Domoticz i np dwa l...
 
Powiadomienia
Wyczyść wszystko

Domoticz i np dwa lub wiecej czujnikow temperatury, wilgotnosci etc (np DS18B20)

3 Wpisów
2 Użytkownicy
3 Likes
1,909 Wyświetleń
(@mirmil99)
Wpisów: 181
Pomocny
Autor tematu
 

czesc

moze sie komus kiedys przyda, chodzi o ten problem, gdy mamy kilka takich samych czujnikow podpietych pod jakies urzadzenie (w sumie zdecydowanie lepiej unikac takiej sytuacji, ale mialem klopot z dostepnym miejscem, a prosilo sie o dwa czujniki), a tylko jeden IDX. Przykladowa linijka jak sa wysylane dane po mqtt w klasycznym topicu (AFE chyba z zalozenia obsluguje na jednym urzadzeniu jeden czujnik, ale tuta musi sie wypowiedziec @Adrian )

"{"Time":"2020-01-25T12:34:33","DS18B20-1":{"Id":"0117C15FA6FF","Temperature":20.7},"DS18B20-2":{"Id":"0217B06B6CFF","Temperature":22.6},"TempUnit":"C"}"

a teraz przykladowa linijka jaka jest wysylana z tego samego urzadzenia do Domoticza

"domoticz/in = {"idx":54,"nvalue":0,"svalue":"20.7","Battery":100,"RSSI":7}"

jak widac publikujemy tylko jedna temperature, druga jest pomijana.

Konieczny bedzie client mqtt np mosquitto-clients, czyli musimy go zainstalowac:

sudo apt-get update
sudo apt-get install mosquitto-clients

 

I teraz potrzebujemy juz tylko prosty skrypt w bashu, aby calosc dzialala


#!/bin/bash


mosquitto_sub -t Twoj_topic/tele/SENSOR -C 1 > mqtt_1.txt

temp1=`awk 'BEGIN{FS=","} {print $5}' mqtt_1.txt | awk 'sub(/"Temperature":/, "")' | awk 'sub(/}/, "")'`

echo "$temp1"

mosquitto_pub -t 'domoticz/in' -m '{ "idx":308, "nvalue":0, "svalue": "'$temp1'" }'

 

W pierwszej linijce odpytujemy po mqtt topic z interesujacego nas urzadzenia (wazna skladnia topicu, w sumie zalezy od softu na urzadzeniu a czasem i do czego to wysylamy) i zapisujemy wynik do pliku. Druga linijka generuje nam zmienna w naszym przypadku zmieniac sie bedzie druga temperatura (podzielilismy text na czesci oddzielane "," piata czesc zawiera interesujaca nas daną, i ostatnia linijka to juz publikowanie do Domoticza na okreslonym IDX naszej zmiennej. Oczywiscie aby nam to dzialalo cyklicznie to musimy dac skrypt do crona, czyli np:

sudo nano /etc/crontab

*/5 * * * * root /home/katalog_domowy/domoticz/scripts/bash/nazwa_naszego_skryptu.sh

bedziemy odpytawac urzadzenie o temperature co 5 min oraz nadac uprawnienia dla skryptu z katalogu gdzie jest skrypt:

sudo chmod 755 nazwa_naszego_skryptu.sh

Dziala u mnie juz 72h i zadnych klopotow nie generuje.

Oczywiscie tym prostym sposobem mozemy tak naprawde wszystko wyciagnac co jest publikowane po mqtt i wyslac w wybranej przez nas formie (mqtt, http) do Domoticza, na zadany przez nas IDX.

ponizej przyklad gdzie mamy dwa czujniki: AM2302 i DB18B20, wpadlem na "szalony" pomysl wyslania na jednym IDX temperatury z DB18B20 i wilgotnosci z AM2302, to tylko tak dla cwiczen:

#!/bin/bash
#{"Time":"2020-01-21T11:42:26","DS18B20":{"Id":"0217B07381FF","Temperature":24.1},"AM2301":{"Temperature":19.8,"Humidity":39.4},"TempUnit":"C"}
#domoticz/in = {"idx":52,"nvalue":0,"svalue":"19.8;39.4;2","Battery":100,"RSSI":7}

mosquitto_sub -t tele/Barton/SENSOR -C 1 > mqtt_2.txt

temp2=`awk 'BEGIN{FS=","} {print $3}' mqtt_2.txt | awk 'sub(/"Temperature":/, "")' | awk 'sub(/}/, "")'`

humidity=`awk 'BEGIN{FS=","} {print $5}' mqtt_2.txt | awk 'sub(/"Humidity":/, "")' | awk 'sub(/}/, "")'`

echo "$temp2 $humidity"

mosquitto_pub -t 'domoticz/in' -m '{ "idx":300, "nvalue":0, "svalue": "'$temp2' ; '$humidity' ;2" }'

 

 

ps. tym sposobem mozna tez bez problemu skorzystać z dobrodziejstwa LWT z klasycznego tematu mqtt;)

 
Dodane : 28/01/2020 6:45 pm
isom, wojtek_gtx and adrian reacted
wojtek_gtx
(@wojtek_gtx)
Wpisów: 538
Ekspert Patron Strony Donator 2K19, Donator 2K20, Donator 2K21, Donator 2K22, Donator 2K24
 

Fajny opis, szczegółowy 👍 

Można to też zrobić bez takiej zabawy na espeasy, każdy dodatkowy ds18 widzi jako oddzielny czujnik i przypisać mu w sofcie oddzielny idx

 
Dodane : 28/01/2020 7:27 pm
(@mirmil99)
Wpisów: 181
Pomocny
Autor tematu
 

DS18B20 to tylko przyklad, tym prostym sposobem mozna tak naprawdze wszystko wyslac do Domoticza, po mqtt, http na zadany IDX, to naprawde uniwersalna metoda, wazna jest tylko stala forma w zapisie do pliku.

 

 
Dodane : 29/01/2020 6:53 pm
Udostępnij: