Въведение

Home Assistant е може би най-новия член в семейството на софтуера за домашна автоматизация: слоганът на този софтуер за домашна автоматизация е простота.Той е разработен на Python и по същия начин като Domoticz, можете да разширите неговата функционалност с помощта на приставки/add-ons.Home Assistant се предлага като готова операционна система (image) за Raspberry PI или като виртуална машина за PC с Windows, MacOS, Linux (KVM, VirtualBox, VMware).Като контейнер на Docker, Home Assistant може да се изпълнява и във ваша собствена среда, която управлявате сами.Не са необходими специални умения за компилация и конфигуриране!

NetControl и Home Assistant

Home Assistant има вградена поддръжка на протоколите SNMP и MQTT. Може да се използва всеки от тях за интегриране на NetControl, но определено MQTT дава повече възможности, най-вече с това, че данните от NetControl постъпват в Home Assistant в реално време (за разлика от SNMP, където се използва "polling" и устройствата се "запитват" за състоянието си през определено време).

Добавянето на едно или няколко NetControl устройства става ръчно, чрез редактиране на файла configuration.yaml (обърнете внимание на това, че се използват групи от по два интервала за структуриране на данните!). За по-голямо удобство при работа с YAML файлове препоръчваме да си инсталирате 'Visual Studio Code' add-on.

'switch' и 'sensor' (това са т.нар. 'integrations') са два от типовете, които Home Assistant използва, като определение за вида на канала на дадено устройство (и данните, които то приема/предава). В групата "switch" попадат релейните изходи на NetControl - т.е. към тях можем да подаваме команди On/Off и да получаваме техния текущ статус. Групата 'sensor' обхваща всички входове на NetControl, които могат само изпращат данни към Home Assistant - алармени входове, входове за датчици (температура, влажност и т.н.), измерване на напрежение, ток, импулси и др. Разбира се, има и други видове 'integrations' като light, binary sensor и др. Може да използвате и тях, според ситуацията - много често имат сходни параметри за настройка.

Интегриране чрез SNMP

Следват примери за добавяне на релеен изход 'Line 1' и вход за температура 'Sensor 1' на NetControl (напр. модели 2R2S1A, 4R4S1A). Моля, имайте предвид, че ако в конфигурационния файл вече имате секции 'swtich' и 'sensor' трябва да добавите само кода към наличните секции (тъй-като не е допустимо да има множество дефиниции за тях).

switch:
- platform: snmp
scan_interval: 10 # state polling interval in seconds
name: "Netcontrol_SNMP_Line1" # Name of this NetControl channel in Home Assistant
host: 192.168.1.100 # IP address of your NetControl Device
version: "1"
auth_protocol: none
priv_protocol: none
payload_on: 1
payload_off: 0
vartype: Integer
# Enter here your R/W community string
community: private
# Line 1 uses [P]=9. Change to another value, according to model (see manual)
baseoid: 1.3.6.1.4.1.19865.2.3.1.9.6.0 sensor:
- platform: snmp
scan_interval: 10
name: "Netcontrol_Temperature_TDS300"
host: 192.168.1.100
version: "1"
auth_protocol: none
priv_protocol: none
community: private
baseoid: 1.3.6.1.4.1.19865.2.3.1.25.6.0 # Channel with [P]=25
unit_of_measurement: "C"
# Template to convert raw SNMP value to temparature
value_template: "{{(((3300 * (value | float) / 1023) - 500) / 10) | round(1)}}"

Интегриране чрез MQTT

ВАЖНИ ПРЕДВАРИТЕЛНИ ИЗИСКВАНИЯ !!!
1. MQTT изисква наличието на т.нар. брокер. Home Assistant предлага такъв под формата на add-on 'Mosquitto broker' - използвайте него, ако нямате вече инсталиран друг брокер.
2. MQTT брокера използва системата от "Users" на Home Assistant за ауторизация. Най-добре си дефинирайте един нов потребител в системата, специално за логването на MQTT клиентите. Потребителят/паролата и IP адреса на Home Assistant трябва да се въведат в MQTT настройките на NetControl.
3. В настройките за MQTT на NetControl трябва 'PUBLISH value format' = JSON!

Следват примери за добавяне на релеен изход Line 1 и вход за температура Sensor 1 на NetControl (напр. 2R2S1A, 4R4S1A), но вече на базата на MQTT протокола

Последните 3 секции илюстрират добавянето и на вход тип "брояч на импулси" (NetControl 4PC2R). Освен дефиницията за mqtt, чрез която в системата да се получава натрупаната от брояча стойност, са добавени още два блока "statistics" и "template". Тяхното предназначение е да можем да получим информация за мощността на товара (напр. ако имаме свързан електромер към импулсния вход), чрез изчисляване на разликата между новото и предишното показание на електромера. Тези последни две измервания идват от модула "statistics", като най-важното при него е entity_id да сочи към mqtt обекта, от който идват данните (в случая:sensor.pulse_counter_1); с другите параметри му указваме, че се интересуваме от последните два отчета и ако няма данни повече от 5мин да даде нулева стойност. Секцията 'template' се използва за прилагане на самото изчисление на товара, според константата на електромера (imp/kWh) и вграденият параметър 'change_rate' (той изчислява разликата между последните две стойности, разделена на разликата във времето между техните измервания в секунди).

switch:
- platform: mqtt
name: "NetControl_A_CH1"
# next topics must match your NetControl's settings for 'User defined sub-topic' and desired channel
command_topic: "NetControl/subgroup/in/ch9"
state_topic: "NetControl/subgroup/out/ch9"
retain: true
payload_on: "ON" 
payload_off: "OFF"
value_template: "{{value_json.value.real}}"
sensor:
- platform: mqtt
name: "NetControl_Hummidity"
# topic must match your NetControl's settings for 'User defined sub-topic' and desired channel
state_topic: "NetControl/subgroup/out/ch28"
unit_of_measurement: "%"
# NetControl sends dimension with value, but HomeAssistant doesn't like it - so trim it!
value_template: '{{value_json.value.real|trim("%")}}'

- platform: mqtt
name: "pulse_counter_1"
state_topic: "NetControl/subgroup/out/ch20"
value_template: "{{value_json.value.raw}}"
force_update: true

- platform: statistics
entity_id: sensor.pulse_counter_1
name: pulse_stat_1
sampling_size: 2
max_age:
minutes: 5 # to set zero power value if MQTT data is not received by some reason

- platform: template
sensors:
current_power:
friendly_name: "Power current load"
# Change 1600 with your device's imp/kWh constant
value_template: "{{ (state_attr('sensor.pulse_stat_1','change_rate')|float * 1000 * 3600 / 1600) | round(1)}} Watt"

 
Примерните YAML дефиниции можете да свалите във файл от тук: netcontrol_ha.yaml