mirror of
https://github.com/andvikt/mega_hacs.git
synced 2025-12-14 18:44:27 +05:00
Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f197a09072 | ||
|
|
e8d92cfa36 | ||
|
|
5f94186a14 |
@@ -16,7 +16,7 @@ from homeassistant.const import (
|
|||||||
CONF_ENTITY_ID,
|
CONF_ENTITY_ID,
|
||||||
)
|
)
|
||||||
from homeassistant.core import HomeAssistant
|
from homeassistant.core import HomeAssistant
|
||||||
from .const import EVENT_BINARY_SENSOR, DOMAIN, CONF_CUSTOM, CONF_SKIP
|
from .const import EVENT_BINARY_SENSOR, DOMAIN, CONF_CUSTOM, CONF_SKIP, CONF_INVERT
|
||||||
from .entities import MegaPushEntity
|
from .entities import MegaPushEntity
|
||||||
from .hub import MegaD
|
from .hub import MegaD
|
||||||
|
|
||||||
@@ -71,6 +71,10 @@ class MegaBinarySensor(BinarySensorEntity, MegaPushEntity):
|
|||||||
def state_attributes(self):
|
def state_attributes(self):
|
||||||
return self._attrs
|
return self._attrs
|
||||||
|
|
||||||
|
@property
|
||||||
|
def invert(self):
|
||||||
|
return self.customize.get(CONF_INVERT, False)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def is_on(self) -> bool:
|
def is_on(self) -> bool:
|
||||||
val = self.mega.values.get(self.port, {}).get("value") \
|
val = self.mega.values.get(self.port, {}).get("value") \
|
||||||
@@ -79,9 +83,9 @@ class MegaBinarySensor(BinarySensorEntity, MegaPushEntity):
|
|||||||
return self._state == 'ON'
|
return self._state == 'ON'
|
||||||
elif val is not None:
|
elif val is not None:
|
||||||
if val in ['ON', 'OFF']:
|
if val in ['ON', 'OFF']:
|
||||||
return val == 'ON'
|
return val == 'ON' if not self.invert else val == 'OFF'
|
||||||
else:
|
else:
|
||||||
return val != 1
|
return val != 1 if not self.invert else val == 1
|
||||||
|
|
||||||
def _update(self, payload: dict):
|
def _update(self, payload: dict):
|
||||||
self.mega.values[self.port] = payload
|
self.mega.values[self.port] = payload
|
||||||
|
|||||||
@@ -15,5 +15,5 @@
|
|||||||
"@andvikt"
|
"@andvikt"
|
||||||
],
|
],
|
||||||
"issue_tracker": "https://github.com/andvikt/mega_hacs/issues",
|
"issue_tracker": "https://github.com/andvikt/mega_hacs/issues",
|
||||||
"version": "v0.3.11"
|
"version": "v0.3.12"
|
||||||
}
|
}
|
||||||
106
readme.md
106
readme.md
@@ -79,50 +79,11 @@ srv: "192.168.1.4:8123" # ip:port вашего HA
|
|||||||
script: "mega" # это api интеграции, к которому будет обращаться контроллер
|
script: "mega" # это api интеграции, к которому будет обращаться контроллер
|
||||||
```
|
```
|
||||||
|
|
||||||
Входы будут доступны как binary_sensor, а так же в виде событий `mega.sensor`.
|
#### Ответ на входящие события от контроллера
|
||||||
События можно обрабатывать так:
|
|
||||||
```yaml
|
|
||||||
- alias: some double click
|
|
||||||
trigger:
|
|
||||||
- platform: event
|
|
||||||
event_type: mega.sensor
|
|
||||||
event_data:
|
|
||||||
pt: 1
|
|
||||||
click: 2
|
|
||||||
action:
|
|
||||||
- service: light.toggle
|
|
||||||
entity_id: light.some_light
|
|
||||||
```
|
|
||||||
Для binary_sensor имеет смысл использовать режим P&R, для остальных режимов - лучше пользоваться событиями.
|
|
||||||
|
|
||||||
Примеры использования binary_sensor:
|
|
||||||
```yaml
|
|
||||||
- alias: обработка долгих/коротких нажатий
|
|
||||||
trigger:
|
|
||||||
- platform: state
|
|
||||||
entity_id: binary_sensor.some_sensor
|
|
||||||
to: on
|
|
||||||
for: 1 # задержка на секунду
|
|
||||||
|
|
||||||
action:
|
|
||||||
- choose:
|
|
||||||
# если кнопка все еще нажата - значит это долгое нажатие
|
|
||||||
- conditions: "{{ is_state('binary_sensor.some_sensor', 'on')}}"
|
|
||||||
sequence:
|
|
||||||
- service: light.turn_on
|
|
||||||
entity_id: light.some_light
|
|
||||||
# если кнопка уже не нажата - значит это короткое нажатие
|
|
||||||
- conditions: "{{ is_state('binary_sensor.some_sensor', 'off')}}"
|
|
||||||
sequence:
|
|
||||||
- service: light.turn_off
|
|
||||||
entity_id: light.some_light
|
|
||||||
```
|
|
||||||
|
|
||||||
## Ответ на входящие события от контроллера
|
|
||||||
Контроллер ожидает ответ от сервера, который может быть сценарием (по умолчанию интеграция отвечает `d`, что означает
|
Контроллер ожидает ответ от сервера, который может быть сценарием (по умолчанию интеграция отвечает `d`, что означает
|
||||||
запустить то что прописано в поле act в настройках порта).
|
запустить то что прописано в поле act в настройках порта).
|
||||||
|
|
||||||
Поддерживаеются шаблоны HA. Это может быть использовано, например, для запоминания яркости (тк сам контроллер этого не
|
Поддерживаются шаблоны HA. Это может быть использовано, например, для запоминания яркости (тк сам контроллер этого не
|
||||||
умеет). В шаблоне можно использовать параметры, которые передает контроллер (m, click, pt, mdid, mega_id)
|
умеет). В шаблоне можно использовать параметры, которые передает контроллер (m, click, pt, mdid, mega_id)
|
||||||
|
|
||||||
Примеры:
|
Примеры:
|
||||||
@@ -130,7 +91,7 @@ script: "mega" # это api интеграции, к которому будет
|
|||||||
mega:
|
mega:
|
||||||
mega1: # id меги, который вы сами придумываете в конфиге в UI
|
mega1: # id меги, который вы сами придумываете в конфиге в UI
|
||||||
4: # номер порта, с которого ожидаются события
|
4: # номер порта, с которого ожидаются события
|
||||||
response_template: 5:2 # простейший пример без шаблона. Каждый раз когда будет приходить сообщение на этот порт,
|
response_template: "5:2" # простейший пример без шаблона. Каждый раз когда будет приходить сообщение на этот порт,
|
||||||
# будем менять состояние на противоположное
|
# будем менять состояние на противоположное
|
||||||
5:
|
5:
|
||||||
# пример с использованием шаблона, порт 1 будет выключен если он сейчас включен и включен с последней сохраненной
|
# пример с использованием шаблона, порт 1 будет выключен если он сейчас включен и включен с последней сохраненной
|
||||||
@@ -148,30 +109,13 @@ mega:
|
|||||||
{% if m==2 %}1:0{% else %}d{% endif %}
|
{% if m==2 %}1:0{% else %}d{% endif %}
|
||||||
|
|
||||||
```
|
```
|
||||||
## Отладка ответов
|
|
||||||
Для отладки ответов сервера можно самим имитировать запросы контроллера, если у вас есть доступ к консоли
|
|
||||||
HA:
|
|
||||||
```shell
|
|
||||||
curl -v -X GET 'http://localhost:8123/mega?pt=5&m=1'
|
|
||||||
```
|
|
||||||
Если доступа нет, нужно в файл конфигурации добавить ip компьюетра, с которого вы хотите делать запросы, например:
|
|
||||||
```yaml
|
|
||||||
mega:
|
|
||||||
allow_hosts:
|
|
||||||
- 192.168.1.1
|
|
||||||
```
|
|
||||||
И тогда можно с локальной машины делать запросы на ваш сервер HA:
|
|
||||||
```shell
|
|
||||||
curl -v -X GET 'http://192.168.88.1.4:8123/mega?pt=5&m=1'
|
|
||||||
```
|
|
||||||
В ответ будет приходить либо `d`, либо скрипт, который вы настроили
|
|
||||||
|
|
||||||
|
## binary_sensor и события
|
||||||
|
|
||||||
## События
|
Входы будут доступны как binary_sensor, а так же в виде событий `mega.sensor` и `mega.binary`.
|
||||||
`binary_sensor` срабатывает когда цифровой выход принимает значение 'ON'. `binary_sensor` имеет смысл использовать
|
Для корректной работы binary_sensor имеет смысл использовать режим P&R, для остальных режимов - лучше пользоваться
|
||||||
только с режимом входа P&R
|
событиями.
|
||||||
|
|
||||||
При каждом срабатывании `binary_sensor` так же сообщает о событии типа `mega.sensor`.
|
|
||||||
События можно использовать в автоматизациях, например так:
|
События можно использовать в автоматизациях, например так:
|
||||||
```yaml
|
```yaml
|
||||||
# Пример события с полями как есть прямо из меги
|
# Пример события с полями как есть прямо из меги
|
||||||
@@ -181,21 +125,21 @@ curl -v -X GET 'http://192.168.88.1.4:8123/mega?pt=5&m=1'
|
|||||||
event_type: mega.sensor
|
event_type: mega.sensor
|
||||||
event_data:
|
event_data:
|
||||||
pt: 1
|
pt: 1
|
||||||
cnt: 2
|
click: 2
|
||||||
action:
|
action:
|
||||||
- service: light.toggle
|
- service: light.toggle
|
||||||
entity_id: light.some_light
|
entity_id: light.some_light
|
||||||
```
|
```
|
||||||
События могут содержать следующие поля:
|
События могут содержать следующие поля:
|
||||||
- mega_id: id как в конфиге HA
|
- `mega_id`: id как в конфиге HA
|
||||||
- pt: номер порта
|
- `pt`: номер порта
|
||||||
- cnt: счетчик срабатываний
|
- `cnt`: счетчик срабатываний
|
||||||
- mdid: if как в конфиге контроллера
|
- `mdid`: if как в конфиге контроллера
|
||||||
- click: клик (подробнее в документации меги)
|
- `click`: клик (подробнее в документации меги)
|
||||||
- value: текущее значение (только для mqtt)
|
- `value`: текущее значение (только для mqtt)
|
||||||
- port: номер порта
|
- `port`: номер порта
|
||||||
|
|
||||||
Начиная с версии 0.3.7 появилось так же событие типа mega.binary:
|
Начиная с версии 0.3.7 появилось так же событие типа `mega.binary`:
|
||||||
```yaml
|
```yaml
|
||||||
# Пример события с полями как есть прямо из меги
|
# Пример события с полями как есть прямо из меги
|
||||||
- alias: some long click
|
- alias: some long click
|
||||||
@@ -264,3 +208,21 @@ logger:
|
|||||||
logs:
|
logs:
|
||||||
custom_components.mega: debug
|
custom_components.mega: debug
|
||||||
```
|
```
|
||||||
|
|
||||||
|
#### Отладка ответов http-сервера
|
||||||
|
Для отладки ответов сервера можно самим имитировать запросы контроллера, если у вас есть доступ к консоли
|
||||||
|
HA:
|
||||||
|
```shell
|
||||||
|
curl -v -X GET 'http://localhost:8123/mega?pt=5&m=1'
|
||||||
|
```
|
||||||
|
Если доступа нет, нужно в файл конфигурации добавить ip, с которого вы хотите делать запросы, например:
|
||||||
|
```yaml
|
||||||
|
mega:
|
||||||
|
allow_hosts:
|
||||||
|
- 192.168.1.1
|
||||||
|
```
|
||||||
|
И тогда можно с локальной машины делать запросы на ваш сервер HA:
|
||||||
|
```shell
|
||||||
|
curl -v -X GET 'http://192.168.88.1.4:8123/mega?pt=5&m=1'
|
||||||
|
```
|
||||||
|
В ответ будет приходить либо `d`, либо скрипт, который вы настроили
|
||||||
Reference in New Issue
Block a user