Czy ktoś próbował integrować sterowanie wyjściami optimy z openhabem albo domoticzem? Da się w ogóle? Satela rozkminili fajnie.
W OptimaGSM jest Modbus TCP/IP (slave)
https://ropam.com.pl/pl/towar/645/modbus_tcpip.html (https://ropam.com.pl/pl/towar/645/modbus_tcpip.html)
więc wymagany jest plugin Modbus TCP/IP (master).
(nie testowaliśmy nic z wymienionych ale sterowniki PLC z Ethernet integrują się bez problemu)
Ja uzywam i sie sprawdza.
Ja bylem zainteresowany dwoma sytuacjami:
1. Zalaczenie alarmu jest odnotowane w Domoticzu i wtedy wylacza wszystkie swiatla w domu (intencja: jak ktos zapomni wylaczyc swiatlo to i tak przy wychodzeniu sie wylaczy)
2. Jezeli uruchomi sie alarm, to przesylane sa na e-maila zdjecia z kamer co minute
Modbus Ropam dziala, ale niestety pluginy do Modbus do Domoticz-a maja wlasne problemy np. nie odczytuja (jak na razie) zmiennych Boolean (true/false) (mozna to zmienic troche skrypt), ale druga sprawa to taka, ze maja problemy z odczytaniem wielu parametrow na raz i nie mozna uruchomic paru tych samych urzadzen (w sensie domoticza jednoczesnie).
U mnie dziala to tak:
Ustawienia centrali Optima:
Uruchomiony serwer Modbus w AP-IP
Konfiguracja wyjsc:
Standardowe:
Alarm zalacza wyjscia:
0: syrena
1: syrena dzwiek
Dodatkowe:
2: zalaczenie alarmu zalacza wyjscie 3 (2 w Modbus) w trybie bipolar
Do odzytu stanu uzylem programu mbpoll https://github.com/epsilonrt/mbpoll pod linuxa (domoticz dziala u mnie pod debianem) i utworzylem dwie zmienne uzytkownika w Domoticzu (Alarm-level i Alarm-last-state, obie typu Integer).
W crontab mbpoll odczytuje dane zmiennych i przestawia bezposrednio zmienna 'alarm-level' na wartosc 1 (alarm niezalaczony), 2 (alarm zalaczany), 4 (alarm wzbudzony) np:
crontab:
* * * * * /opt/mbpoll/alarm-trigger-status.sh
alrm-trigger-status.sh:
#!/bin/bash
# Centrala ropam jest pod adresem 10.0.0.5
ALARMARMED=$(/usr/bin/mbpoll -t 0 -0 -1 -r 0 -c 4 10.0.0.5 | grep "\[2\]" | awk '{print($2)}');
ALARMSTATUS=$(/usr/bin/mbpoll -t 0 -0 -1 -r 0 -c 4 10.0.0.5 | grep "\[0\]" | awk '{print($2)}');
if [ $ALARMARMED = "0" ]; then
# echo "Alarm armed is disarmed ($ALARMARMED)";
curl 'http://127.0.0.1:8080/json.htm?type=command¶m=updateuservariable&vname=Alarm-level&vtype=0&vvalue=1';
exit 0;
else
if [ $ALARMARMED = "1" ]; then
# echo "Alarm is armed ($ALARMARMED)";
if [ $ALARMSTATUS = "1" ]; then
curl 'http://127.0.0.1:8080/json.htm?type=command¶m=updateuservariable&vname=Alarm-level&vtype=0&vvalue=4';
exit 0
else
curl 'http://127.0.0.1:8080/json.htm?type=command¶m=updateuservariable&vname=Alarm-level&vtype=0&vvalue=2;
fi
else
echo "Alarm is unknown ($ALARMARMED)";
exit 1;
fi
fi
Skrypt odpala sie co minute i aktualizuje status zmiennej Alarm-level na 3 poziomy:
"1": nieuzbrojony
"2": uzbrojony
"4": wzbudzony (alarm)
nastepnie robimy 2 skrypty (np. blockly w domoticzu) na zasadzie:
if ( Alarm-level = 2 ) and ( Alarm-last-state = 0 )
set Alarm-last-state = 1
if "all-lights" = on then set "all-lights" = "off"
elseif ( Alarm-level = 1 ) and (Alarm-last-state = 1 )
set Alarm-last-state = 0
oraz drugi skrypt:
if ( Alarm-level = 4 ) send pictures from camera-1 after 0 seconds and send pictures from camera2 after 0 seconds ... etc.
Powyzsza konfiguracja praktycznie tylko odczytuje status centrali Ropam (Alarm zalaczony/ Nie zalaczony/ Aktywny) po monitoringu zalaczonych wyjsc, jednak analogicznie mozna monitorowac wejscia czy inne parametry centrali zgodnie z dokumentacja Ropam.
PS. Wiem - skrypt nie jest ladny, wymaga dwoch polaczen TCP, nie obsluguje wielu bledow i tak dalej, ale byl zrobiony na szybko, zeby dzialal i wydaje mi sie, ze latwo odzwierciedla to co mozna zrobic.