openhab, domoticz i ropam

Zaczęty przez jajen, Marzec 29, 2018, 14:30:03

Poprzedni wątek - Następny wątek

jajen

Czy ktoś próbował integrować sterowanie wyjściami optimy z openhabem albo domoticzem? Da się w ogóle? Satela rozkminili fajnie.

RobertH

W OptimaGSM jest Modbus TCP/IP (slave)
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)

landi

#2
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&param=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&param=updateuservariable&vname=Alarm-level&vtype=0&vvalue=4';
         exit 0
      else
         curl 'http://127.0.0.1:8080/json.htm?type=command&param=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.