Powiadomienia
Wyczyść wszystko

multitematy

3 Wpisów
2 Użytkownicy
0 Reactions
1,643 Wyświetleń
Wpisów: 162
Zasłużony dla Forum Donator 2K19, Donator 2K18, Donator 2K17
Autor tematu
(@tomaszraszowski)
Pomocny
Dołączył: 8 lat temu

Chciałem dziś za subskrybować multitematy komenda /xxx/xxx/# w oknie gdzie wklepujemy temat w przeglądarce.

Niestety po restarcie robi się Sajgon i esp staje, jedyne co się da zrobić to rozłączyć wifi (router) odczekać 20sek aż dioda zacznie pulsować co 1 sek wejść w tryb ustawień i wtedy zmienić "topic" na jakiś normalny.

 

Do czego multitematy ?
Dla mnie jest to istotne gdyż nie chcę ograniczyć się tylko do jednego przełącznika, jeden z esp ma pracować jako server a raczej bridge dla przełączników radiowych 433mHz. Niestety brak możliwości subskrypcji wielu tematów blokuje mój rozwój 😀

Szczerze Adrianie, to jak dla mnie Twój poziom programowania, znacznie przerasta moją wiedzę, dlatego muszę poprosić Cię tutaj abyś coś pomyślał w tym kierunku, nie twierdzę że powinno się to znaleźć jako integralna część AFE, ale może naprowadził byś mnie na dobrą drogę abym dalej mógł kombinować:

Co potrzebuję zaimplementować w kod ?:

#include <RCSwitch.h> //Z tym nie ma problemu
RCSwitch mySwitch = RCSwitch(); // Z tym także

void setup(void) { mySwitch.enableTransmit (14); // Z tym myślę iż sobie poradzę bo 14 jest już w firmware
}

Największym problemem jest dla mnie wpakowanie w AFE tego:

void messageReceived(String topic, String payload, char * bytes, unsigned int length) { if (topic.indexOf("/iQ/RF/#") >= 0) { //switch control, parse out the channel and plug id int channel = getValue(topic, '/', 3).toInt(); int plug = getValue(topic, '/', 4).toInt(); if (payload == "ON") { mySwitch.switchOn(channel, plug); } else { mySwitch.switchOff(channel, plug); } } /* ##################################################################################################### */ else if (topic.indexOf("T1") >= 0) { if (payload == "ON") { T1on(); } else if (payload == "OFF") { T1off(); } }

Utility: To też nie stanowi wielkiego problemu

String getValue(String data, char separator, int index) { int found = 0; int strIndex[] = { 0, -1 }; int maxIndex = data.length() - 1; for (int i = 0; i <= maxIndex && found <= index; i++) { if (data.charAt(i) == separator || i == maxIndex) { found++; strIndex[0] = strIndex[1] + 1; strIndex[1] = (i == maxIndex) ? i + 1 : i; } } return found > index ? data.substring(strIndex[0], strIndex[1]) : ""; }

 

No i voidy od "radia" też nie ma większych problemów

void T1on() { mySwitch.switchOn("11111", "10000"); } void T1off() { mySwitch.switchOff("11111", "10000"); }

 

No i teraz czekam cierpliwie na Twoją opinię.

Pozdrawiam

 

2 Odpowiedzi
2 Odpowiedzi
adrian
Admin Zasłużony dla Forum, Patron Strony
(@adrian)
Dołączył: 11 lat temu

Szefu
Wpisów: 4035

Daj mi sparafrazować, żebym wiedział co chcesz zrobić.

  • Chcesz mieć jeden ESP
  • ESP ma nasłuchiwać (subskrybować) się do wielu tematów do MQTT Brokera?
  • W zależności jaki temat z wiadomością dostanie to robisz tam jakąś akcję 

tak?

 

Odpowiedz
Zasłużony dla Forum Donator 2K19, Donator 2K18, Donator 2K17
(@tomaszraszowski)
Dołączył: 8 lat temu

Pomocny
Wpisów: 162

Dokładnie tak 🙂

Właściwie to doszedłem do wniosku że nie ma co ruszać Twojego softu 🙂

Już sobie jakoś częściowo poradziłem i póki co z powodzeniem działa, nawet udało mi się zrobić update-ra przez www 🙂 wzorowałem się, a raczej chciałem na Twoim projekcie, jednakowoż jedyne co mi dało patrzenie w te sketche to sięgnięcie po kurs C++ 😀 Na złe nie wyjdzie 🙂

Poniżej podaje link do moich newbie wypocin, może jakieś sugestie od Ciebie otrzymam co źle a co zmienić.

https://github.com/Raszowski/iQbridge

Użyłem do tego WeMos D1 mini, bardzo przyjemnie się go flashuje, nie trzeba nic naciskać i kombinować, a gabaryty ma połowę mniejsze niż NODEMCU V3

 

p.s. Ogólnie to powoli odchodzę od tematu RF433, bo pojawił się problem z odbiorem kodów z pilota, no może nie odszedłem całkiem ale lekko w zawieszeniu zostawiam, bo nadajnik czyli pilot wysyła różne sygnały jako OFF a nawet jako ON i potrafi wyłączyć 2 inne wyłączniki (przy udziale MQTT i odbiornika rf433) zanim wyłączy ten właściwy, aczkolwiek nie zmienia to faktu iż mogę je wykorzystać w jakichś mniej przydatnych miejscach, nie wymagających podnoszenia statusu w OH2, dlatego miło by było gdyby jednak soft miał ręce i nogi zamiast swoistego "burdeliku" w kodzie 🙂

Ahhh jeszcze jedna sprawa że czasem przy upgrade firmware przez web, robi reset WDS z tego co dobrze pamiętam i staje, po tym muszę załadować wszystko z laptopa niestety aby ożył 🙂

Odpowiedz
Udostępnij: