Obsługa setTimerFuncImpl w nowej bibliotece
-
klew
- Posts: 13908
- Joined: Thu Jun 27, 2019 12:16 pm
- Location: Wrocław
- Has thanked: 134 times
- Been thanked: 137 times
A co chcesz tam zrobić? W tytule pytasz o timer, a w treści o iteracje 
Najprościej stworzyć sobie klasę dziedziczącą po Supla::Element. Taka klasa ma metody onInit, iterateAlways, iterateConnected, onTimer, onFastTimer.
Swoją implementację możesz wstawić w którąś z tych metod (w zależności od potrzeby).
Klasa dziedzicząca po Element sama jest zarejestruje w SuplaDevice i będzie automatycznie uruchamiana.
Najprościej stworzyć sobie klasę dziedziczącą po Supla::Element. Taka klasa ma metody onInit, iterateAlways, iterateConnected, onTimer, onFastTimer.
Swoją implementację możesz wstawić w którąś z tych metod (w zależności od potrzeby).
Klasa dziedzicząca po Element sama jest zarejestruje w SuplaDevice i będzie automatycznie uruchamiana.
Najlepsze suple dla Twojego domu 
-
krycha88
- Posts: 5575
- Joined: Fri Nov 16, 2018 7:25 am
- Been thanked: 5 times
heh bo zawsze timera traktowałem tak samo jak iteracjęklew wrote: Tue Jun 02, 2020 11:01 am A co chcesz tam zrobić? W tytule pytasz o timer, a w treści o iteracje
Najprościej stworzyć sobie klasę dziedziczącą po Supla::Element. Taka klasa ma metody onInit, iterateAlways, iterateConnected, onTimer, onFastTimer.
Swoją implementację możesz wstawić w którąś z tych metod (w zależności od potrzeby).
Klasa dziedzicząca po Element sama jest zarejestruje w SuplaDevice i będzie automatycznie uruchamiana.
chciałem wyrzucić z loopa handleClient więc zapewne murzę wykorzystać iterateAlways
https://github.com/esp8266/Arduino/tree ... t-requests
https://gui-generic-builder.supla.io/
-
klew
- Posts: 13908
- Joined: Thu Jun 27, 2019 12:16 pm
- Location: Wrocław
- Has thanked: 134 times
- Been thanked: 137 times
Możesz całą obsługę sobie zapakować w taką klasę dziedziczącą po Element.krycha88 wrote: Tue Jun 02, 2020 11:24 am heh bo zawsze timera traktowałem tak samo jak iterację![]()
chciałem wyrzucić z loopa handleClient więc zapewne murzę wykorzystać iterateAlways
https://github.com/esp8266/Arduino/tree ... t-requests
iterateAlways będzie odpowiednim miejscem.
Najlepsze suple dla Twojego domu 
-
Goral64
- Posts: 3258
- Joined: Fri Dec 27, 2019 6:22 pm
- Location: Żerniki Wrocławskie
- Has thanked: 2 times
- Been thanked: 1 time
Umieszczanie obsługi webowego GUI w SuplaDevice.iterate() wydaje się być mało elastyczne. No chyba, że webGUI będzie klasą dziedziczącą po Element i będzie deklarowana jako ostatnia albo pierwsza. Tak sobie na sucho kombinuję 
Widzimy się na Supla Offline Party Season 2026

-
krycha88
- Posts: 5575
- Joined: Fri Nov 16, 2018 7:25 am
- Been thanked: 5 times
Tak właśnie zrobiłem i działa bardzo fajnie - dzięki za bardzo elastyczną bibliotekęklew wrote: Tue Jun 02, 2020 11:51 am Możesz całą obsługę sobie zapakować w taką klasę dziedziczącą po Element.
iterateAlways będzie odpowiednim miejscem.
Tak się zastanawiam czy dałoby się wykorzystać onTimer do obsługi LED w łatwiejszy sposób. Zawsze robiłem to mniej więcej w taki sposób.
Code: Select all
ETSTimer led_timer;
void ledBlinking(int time) {
os_timer_disarm(&led_timer);
os_timer_setfn(&led_timer, ledBlinking_func, NULL);
os_timer_arm (&led_timer, time, true);
}
void ledBlinking_func(void *timer_arg) {
int val = digitalRead(getPinLedConfig());
digitalWrite(getPinLedConfig(), val == HIGH ? 0 : 1);
}
https://gui-generic-builder.supla.io/
-
Goral64
- Posts: 3258
- Joined: Fri Dec 27, 2019 6:22 pm
- Location: Żerniki Wrocławskie
- Has thanked: 2 times
- Been thanked: 1 time
Wygląda na to, że jeśli zrobisz klasę potomną dla Element dla diody, którą będziesz chciał pomrugać to możesz wykorzystać onTimer(). Tylko będziesz musiał sobie jakiś dzielnik ustawić, bo onTimer wywoływany jest co 10 jednostek czasu. Tylko pewnie trzeba by było jeszcze oprogramować tryb mrugania, włączanie i wyłączanie mrugania. Więc wygląda, że da się to zrobić, ale czy łatwiej?
Widzimy się na Supla Offline Party Season 2026

-
krycha88
- Posts: 5575
- Joined: Fri Nov 16, 2018 7:25 am
- Been thanked: 5 times
napotkałem mały problem metody iterateAlways, iterateConnected, onTimer, onFastTimer nie wykonują się w momencie podania niepoprawnych parametrów dla SuplaDevice.begin - w moim przypadku NULLem jest mail oraz serwer.klew wrote: Tue Jun 02, 2020 11:01 am A co chcesz tam zrobić? W tytule pytasz o timer, a w treści o iteracje
Najprościej stworzyć sobie klasę dziedziczącą po Supla::Element. Taka klasa ma metody onInit, iterateAlways, iterateConnected, onTimer, onFastTimer.
Swoją implementację możesz wstawić w którąś z tych metod (w zależności od potrzeby).
Klasa dziedzicząca po Element sama jest zarejestruje w SuplaDevice i będzie automatycznie uruchamiana.
o ile GUID oraz AUTHKEY powinien być wymagany to wg mnie mail lub serwer już nie - w najgorszym wypadku nie nastąpi połączenie ze SUPLĄ. Jeżeli możesz @klew usunąć return w tych miejscach
Code: Select all
if (Supla::Channel::reg_dev.ServerName[0] == NULL) {
status(STATUS_UNKNOWN_SERVER_ADDRESS, "Unknown server address");
// return false;
}
if (Supla::Channel::reg_dev.Email[0] == NULL) {
status(STATUS_MISSING_CREDENTIALS, "Unknown email address");
// return false;
}
https://gui-generic-builder.supla.io/
