/BS30

Primary LanguagePython

Программа для устройства BS30.
30 реле, 32 входа "сухой контакт" для комнатных выключателей или датчиков.
Вот само устройство: https://www.youtube.com/watch?v=rqpyM6vhPLA
Как работает программа:
MCP23017 - расширитель портов входа выхода на 16 штук.
M_INT - MCP23017, отвечающая за сбор прерываний с MI1, MI2, MB1, MB2.
MI1 и MI2 - MCP23017, отвечающая за входы, которые в основном используются для подсоединения домашних выключателей в жилище.
MB1 и MB2 - MCP23017, отвечающая за входы для кнопок на устройстве. На устройстве находится 30 кнопок для переключения состояния реле. Кнопка управляет релюшкой, находящеся ровно под кнопкой.
MO1 и MO2 - MCP23017, отвечающая за выходы. К ней присоединены релюшки. В этот корпус влезло только 30 реле, поэтому у MCP23017 осталось 2 неиспользованные ноги.
Банк - в MCP23017 восемь ног на одной стороне именуются как "bank A", а на другой как "bank B". Банк А - это 1 бай, оно же 8 бит (00000001).

Если на ноге Omega2sp изменилось состояние между 0 и 1, значит произошло изменение на входах.
Считываем M_INT и видим на какой ноге M_INT произошло изменение.
Исходя из этого понимаем на какой MCP и в каком банке произошло изменение.
Считываем байт из банка той микросхемы.
После считывания данных из банка - прерывания с микросхем снимается самостоятельно.

Считанное значение посылаем по MQTT Mosquitto брокеру.

Подписываемся на определённый топик и если пришла команда на включение реле, то изменяем состояние ноги MO1 или MO2.

В файле Inputs_map.json сопоставляем вход с выходом.
Какой вход микросхемы за какой выход реле отвечает.
Можно переназначать как нужно.
Можно не привязывать к реле и тогда просто по mqtt будет посылаться информация об изменении входа.
Например, чтобы со второго этажа коттеджа управлять светом первого этажа.

В файл OutputsStates.json сохраняются значения выходов.
Если пропадёт электричество и потом появится, то релюшки могут включиться в то состояние, в котором они оказались до пропадания электричества.
Но это если так будет указано в файле RelaysStatesAfterReboot.json.

В файле RelaysStatesAfterReboot.json указывается "как себя вести при запуске программы". 
Например после того как пропало электричество, а потом возмобновилось.
Реле могут принять следующие состояния после включения устройства:
1. Могут принять состояние выключателя. Если выключатель включен, то реле включится.
2. Могут принять состояние "включено" или "выключено" вне зависимости ни от чего.
3. Могут принять состояние, которое было до пропадания электричества, которое сохранилось в файле OutputsStates.json

Работа с MQTT сделана глубокая. Через класс.
Можно подключиться к нескольким брокерам и принимать и передавать значения одновременно в одной программе.

Ошибки выводятся в logd.
Чтобы смотреть вывод программы в шеле можно набрать: logread -f или logread - f | grep "user.notice".

И ошибки посылаются в zabbix.

Если одна из микросхем откажет (и другие ошибки), то я получу эту информацию в zabbix, а zabbix пошлёт мне информацию на телефон в telegram.