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