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;)
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
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.