Przesyłanie danych miedzy dwoma Domoticzami za pomocą node red

Cześć Grupa
Potrzebuje pomocy ponieważ pomimo kilku godzin spędzonych na necie nie jestem w stanie przesłać danych miedzy dwoma Domoticzami.

Jestem w stanie przechwycić dane w node red po mqqt wysyłane z jednego Domoticza, ale nie jestem w stanie przesłać ich do drugiego, bo za bardzo nie wiem jak, to zrobić

Utworzyłem przepływy, ale domyslem, się, że będę musiał coś wpisać w node function2 a żeby poniżej dane które otrzymuje w nodzie debug1 przesłać do drugiego Domoticza i oczywiście przy okazji zmienić IDX, bo w drugim Domoticzu mam mniej niż 100 IDX-xów i czujnik w Domoticz 2 który będzie odpowiadał czujnikawi w domoticz 1 bedzie miał np. idx 99. Poniżej dane które uzyskałem w z node Debug 1, oraz schemat. Z góry dziękuje za zainteresowanie

domoticz/out : msg : Object
object
topic: “domoticz/out”
payload: “{“Battery”:255,“LastUpdate”:“2023-02-22 20:14:12”,“RSSI”:12,“description”:”",“dtype”:“General”,“hwid”:“3”,“id”:“00000002”,“idx”:463,“name”:“V3D Clock Speed”,“nvalue”:0,“stype”:“Custom Sensor”,“svalue1”:“333.3340”,“unit”:1}"
qos: 0
retain: false
_msgid: “d24c3e44ac2bd61c”

Jeżeli dobrze rozumiem to chcesz w NR przesłać msg.mqtt z jednego do drugiego?

Ja spróbowałbym z nodem change, i zmienił w nim otrzymany idx na taki jaki chcesz np.idx 155 i wysłał to dalej do brokera 2 domoticza.
nr

change.json (222 bajty)

cześc
Dziekuje za zainteresowanie. Dopiero od kilku dni mam zainstalowanego nr więc jestem żółtodziób.
Chce przesyłać dane z jednego domoticza do drugiego po mqtt.
Jak widać powyżej Node Red pobrał już dane z domoticz 1 i chce je teraz przesłać po mqqt do domoticza nr 2 przy okazji zmieniając idx z 463 na np 200, bo w domoticz 2 mam utworzony czujnik Custom Sensor który ma właśnie idx 200 tylko nie wiem jak ogarnąć Node Red.

IDX tak jak podał @MariuszAK

Screenshot - 22.02.2023 , 21_03_27
Tu musisz dodać broker drugiego domoticza
Screenshot - 22.02.2023 , 21_03_43

Add new mqtt-broker
Screenshot - 22.02.2023 , 21_04_06

uzupełniasz dane, IP, login:, hasło:, topic jeżeli jest wymagany

Wydaje się, że domoticz 1 został dobrze skonfigurowany w nr, bo po prawej pojawiają się komunikaty z odczytami danych.
Domoticz 2 też chyba dobrze skonfigurowany, bo skonfigurowałem go tak samo jak domoticz 1 z tym, że różnią się tylko adresami. Jak mam teraz kilka odczytów, bo za cholerę nie mogę zrobić a żeby wysyłał jeden odczyt (jutro będę się zastanawiał jak wysyłać jeden) to jak mam skorzystać z funkcji change a żeby zamieniał idx dla kilku odczytów tzn np idx 432 zmień na 123 a idx 433 na 124 itd. Dobrze zrobilem polaczenia node?

wstaw między join a change noda switch i dodawaj tam te idx które chcesz potem zmienić w nodzie change, do poszczególnych wyść ze switcha podłącz noda change

PS. Możesz tez spróbować tak : mqtt in – > funkcja → mqtt out a w funkcji zmieniasz z tych idx co chcesz na jakie chcesz, jak we flow poniżej
flows (11).json (475 bajtów)

Witam
Poustawiałem to jak poniżej możesz zerknąć czy to tak ma być?. Jak wrócę do domu to będę testował, bo z pracy jak się łącze z serwerem node red po publicznym adresie IP to node red nie widzi mqtt i domoticza.



Każdy z dwóch domoticz konfigurujesz odmiennie.
Tematy mqtt pierwszego zostawiasz domyślne domoticz/in, domoticz/out.
W drugim np. domoticz/out2, domoticz/in2.
Teraz przepisujesz w NR skorygowane dane pomiędzy
/out > /in2 oraz w drugą strone /out2 > /in według klucza jakiego sobie wymyślisz.
Tyle co mogę z fona podpowiedzieć.
Mała uwaga … trzeba to robić ostrzożnie, bo łatwo zapetlić wymianę danych z udusić całość.

Ja bym dane z czujnika pierwszego domoticza zapisywał do zmiennej flow, a potem w ustalonym interwale czasowym wysyłał do drugiego, filtrując jakieś stany nieustalone itp. Resztę fajnie opisał @RobinI30 , chociaż użycie dwóch brokerów też nie powinno być problemem.

Mógłbyś to objaśnić bo nie rozumiem, w tym przypadku wybrane dane (określone idx) z Dom1 są subskrybowane, zmieniany jest tylko idx i są publikowane do innego brokera Dom2, który je odbiera. Komunikacja tylko w jedną stronę , gdzie więc pętla ? One się nie wymieniają wzajemnie (w obie strony) ?

Co was opętało z tymi dwoma brockeram? :wink:
Jeśli bezrefleksyjnie będziesz przepisywal z out na i in2 i na odwrót to raz wpuszczona informacja może krążyć w nieskończoność
out>in2>out2>in>out … itd. to trzeba mieć z tyłu głowy. Inaczej z chwilę pojawi się temat " Pomoc- System zwolnił?" :wink:

2 polubienia

W przypadku, który opisujesz tak może się zdarzyć, ale nie przy komunikacji w jedną stronę. Tu mamy tylko Out > In2 i koniec , dlatego nie widzę takiego zagrożenia. Dawca 1 , odbiorca 2 , odbiorca nie będzie dawcą.

Nie wiadomo co autor finalnie wymyśli, wieć zagrożenie jest. Myślę jednak że po tej polemice dwa razy się zastanowi…

Zrobiłem tak jak mi poradził MariuszAK i już jestem o krok od celu ale.
Wszystko wygląda dobrze komunikat po przejściu przez node function zamienia idx z 554 na 505 i nawet widać w Domoticz 2, że odbiera jakieś dane na tym idx 505, bo ten czujnik pokazuje, że dostaje dane (na czerwono zaznaczyłem, że tam się zmienia czas jak zmienię temperaturę czujnika (czujnik zigbee który wysyła dane do domoticz 1 tylko jak się zmieni temperatura w celu oszczędzania baterii)) . Jak tylko zmienie coś w Node Red w nodzie Domoticz/in to przestaje wysyłać dane bo czas przy czujniku w Domoticz 2 się nie zmienia. (Więc tu nie mam co zmieniać) problem w tym, że niestety nie wyświetla mi tej temperatury ciągle widzę 0 sC. Tak się zastanawiam czy poza idx nie powinienem jeszcze zmienić Topic domoticz/out na domoticz/in ??, bo tylko to przychodzi mi do głowy. ktoś podpowie czy dobrze myślę? Jeśli tak to co mam tam w tym nodzie function jeszcze dopisać?


A tu zaznaczyłem na czerwono, że dane dochodzą do Domoticz 2 bo ciągle zmienia się czas przy tym czujniku
Domoticz 2

Domoticz 1

Domoticz 2

Sciagni sobie mqtt-explorer/ http://mqtt-explorer.com/
Podłącz się pod HA będziesz widział co idzie w topic
Przykładowy ekran:


Możesz uruchomić 2 mqtt-explorer jeden dla D1 drugi dla D2

https://www.domoticz.com/wiki/MQTT#Update_devices.2Fsensors.2FThermostat_Setpoint

Ponieważ w węźle mqttin ustawieś automatyczne parsowanie, otrzymywany payload jest już konwertowany z na object.
Po zmianach idx powinieneś wykonać odwrotną konwersję do formatu pierwotnego.
Jeśli zrobisz to co proponował @artpc to zobaczysz, że w tej domotycz1 będzie coś innego niż w domotycz2.
Przed wysłaniem użyj węzła json i zmień object na json string. Nie mam możliwości sprawdzenia więc musisz kombinować sam, tak długo aż w obu mqtt zobaczysz takie same wpisy.
Problem jest taki, że nie wiem jako co wpisyje domotycz w mqtt i czego oczekuje, takie porównanie dużo podpowie. Mogę się mylić, ale na ile jeszcze pamietam domoticz i z tego co napisałes pozostaje ten kierunek.

Domoticz dla czujnika temperatury oczekuje

mosquitto_pub -h localhost -m '{ "idx" : xx, "nvalue" : 0, "svalue" : "20.0" }' -t 'domoticz/in'

czyli topic to domoticz/in
a msg to string idx,nvalue:0,svalue:wartość
To co wychodzi z noda funkcji nie jest w takim formacie i to nie może działać
Mając dwa domoticze napisałbym to w dzVents i po sprawie, nie wiem skad pomysł żeby angażować do tego NR

1 polubienie

Zaraz…zaraz, skoro zigbee publikuje dane w mqtt… to te dwa domoticze nie mogą subskrybować tego samego tematu? :thinking:

Nie ,bo plugin zigbee tworząc czujnik w domoticz przypisuje mu indywidualny ID i IDX. Plugin jest wewnątrz domoticza, nie jest to odrębna usługa taka jak serwer zigbee2mqtt.