Asystent AI
Powiadomienia
Wyczyść wszystko

multitematy

3 Wpisów
2 Użytkownicy
0 Reactions
2,336 Wyświetleń
Wpisów: 162
Zasłużony dla Forum Donator 2K19, Donator 2K18, Donator 2K17
Autor tematu
Translate
English
Spanish
French
German
Italian
Portuguese
Russian
Chinese
Japanese
Korean
Arabic
Hindi
Dutch
Polish
Turkish
Vietnamese
Thai
Swedish
Danish
Finnish
Norwegian
Czech
Hungarian
Romanian
Greek
Hebrew
Indonesian
Malay
Ukrainian
Bulgarian
Croatian
Slovak
Slovenian
Serbian
Lithuanian
Latvian
Estonian
(@tomaszraszowski)
Pomocny
Dołączył: 9 lat temu
[#50]

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ł: 12 lat temu

Szefu
Wpisów: 4083
Translate
English
Spanish
French
German
Italian
Portuguese
Russian
Chinese
Japanese
Korean
Arabic
Hindi
Dutch
Polish
Turkish
Vietnamese
Thai
Swedish
Danish
Finnish
Norwegian
Czech
Hungarian
Romanian
Greek
Hebrew
Indonesian
Malay
Ukrainian
Bulgarian
Croatian
Slovak
Slovenian
Serbian
Lithuanian
Latvian
Estonian

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ł: 9 lat temu

Pomocny
Wpisów: 162
Translate
English
Spanish
French
German
Italian
Portuguese
Russian
Chinese
Japanese
Korean
Arabic
Hindi
Dutch
Polish
Turkish
Vietnamese
Thai
Swedish
Danish
Finnish
Norwegian
Czech
Hungarian
Romanian
Greek
Hebrew
Indonesian
Malay
Ukrainian
Bulgarian
Croatian
Slovak
Slovenian
Serbian
Lithuanian
Latvian
Estonian

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: