Akcje warunkowe w Arduino IDE

Awatar użytkownika
klew
Posty: 8184
Rejestracja: czw cze 27, 2019 12:16 pm
Lokalizacja: Wrocław

Kolejna nowość :)

Na moim branchu są dostępne do testowania nowe rodzaje akcji: warunkowe.
Akcje warunkowe można dodać na kanałach, które posiadają jakąś wartość liczbową (na chwilę obecną poza "electricity meter").
Działa to np. tak:

Kod: Zaznacz cały

#include <supla/control/relay.h>
#include <supla/sensor/DS18B20.h>

...
auto grzalka = new Supla::Control::Relay(...);
auto termometr = new Supla::Sensor::DS18B20(...);

termometr.addAction(Supla::TURN_ON, grzalka, OnLess(21.8));
termometr.addAction(Supla::TURN_OFF, grzalka, OnGreater(22.2));
Albo:

Kod: Zaznacz cały

#include <supla/control/relay.h>
#include <supla/sensor/DHT.h.h>

...
auto nawilzacz = new Supla::Control::Relay(...);
auto dht = new Supla::Sensor::DHT(...);

dht.addAction(Supla::TURN_ON, nawilzacz, OnLess(40, true));
dht.addAction(Supla::TURN_OFF, nawilzacz, OnGreater(55, true));
Wszystkie akacje "On" działają na zasadzie wyzwolenia w momencie spełnienia warunku. Wyzwolenie następuje tylko raz po spełnieniu warunku. Następne wykonanie będzie dopiero po tym, gdy warunek przestanie być spełniony i ponownie wejdzie w zakres "spełnienia".
Przykładowo dla termometru z powyższego przykładu, gdy temperatura spadnie z 21.8 do 21.7, to zostanie włączona grzałka. Następne włączenie nastąpi, dopiero, gdy temperatura wzrośnie powyżej 21.8 i następnie znowu spadnie poniżej 21.8. Nie ma przy tym znaczenia, czy my lub inna akcja przełączy "grzałkę".

Lista dosępnych warunków:

Kod: Zaznacz cały

OnLess(liczba) - warunek: wartość kanału < liczba
OnLessEq(liczba) - warunek: wartość kanału <= liczba
OnGreater(liczba) - warunek: wartość kanału > liczba
OnGreaterEq(liczba) - warunek: wartość kanału >= liczba
OnEqual(liczba) - warunek: wartość kanału == liczba
OnBetween(liczba1, liczba2) - warunek wartość kanału > liczba1 i wartość < liczba2
OnBetweenEq(liczba1, liczba2) - warunek wartość kanału >= liczba1 i wartość <= liczba2
Dodatkowo każdy z powyższych warunków przyjmuje dodatkowy parametr typu bool - działa on przy kanałach "wilgotność+termometr" (np. DHT22). Gdy ustawimy ten parametr na "true", to będzie sprawdzana druga wartość z kanału (czyli wilgotność). Przykładowe użycie jest w drugim przykładzie powyżej.
Dla kanału ciśnienia z BME280 jeszcze tych warunków nie zaimplementowałem, ale nie wiem czy ktoś będzie chciał tego używać, więc jakby co - dajcie znać.

Inny przykład użycia warunków dodałem w przykładach Arduino: GarageParkingAssistLight - czyli proste urządzenie do zapalania lampek zielonej, pomarańczowej i czerwonej na podstawie odległości z sensora HC_SR04.

W planach mam jeszcze dodanie obsługę liczników energii, aby dało się np. sterować jakimś przekaźnikiem na postawie danych produkcji prądu (np. aby włączać podgrzewacz wody, gdy produkujemy > 1 kW.

Mimo tego, że warunków można użyć do budowy termostatu, to chciałbym jasno napisać, że to nie jest termostat. Termostat będzie dużo fajniejszy ;), ale na będziemy musieli jeszcze poczekać, aż pojawi się odpowiedni kanał do tego typu funkcji.

Dajcie znać, jeśli macie jakieś ciekawe pomysły użycia tej funkcjonalności, oraz jeśli macie pomysły co by można jeszcze dodać.
Widzimy się na Supla Offline Party vol. 2 :!:
Awatar użytkownika
lukfud
Posty: 2091
Rejestracja: czw lis 23, 2017 11:33 pm
Lokalizacja: Warszawa

wow, rozkręcasz się widzę :)
https://www.facebook.com/groups/supladiy/
krycha88
Posty: 5187
Rejestracja: pt lis 16, 2018 7:25 am
Kontakt:

Fajne, można to wykorzystać do zabezpieczenia układu przed przegrzaniem wykorzystując termistor NTC ;)
https://gui-generic-builder.supla.io/
Awatar użytkownika
Gang
Posty: 616
Rejestracja: pt lis 09, 2018 12:44 pm

To już wiem, dlaczego nie ma BME w GUI.
Jakby się dało to jednak ten czujnik dodać i @krycha88 wrzuciłby to do GUIa byłoby pięknie, bo bym nie musiał rozbierać mojej czujki w łazience.
Która w zamyśle ma włączać wentylator kiedy żona tam saune robi.

Z dodatkowych, to mi się gdzieś rzucił w oczy projekt wagi, która pokazuje ile gazu w butli zostało, czy to jest wtedy też wartość liczbowa? można by dodać aby zapalało czerwone światło jak waga spada poniżej X. Chociaż ja tego nie wykorzystam, bo indukcja.
Zamel: MEW-01, ROW-02, THW-01, RNW-01, SLW-02, ROW-07, mROW-02, PNW-01. DIY: Supla Device RPI + 10 xiaomi mija2, Sonoff: basic + 7 DS18B20, basic x2, touch, mini x3, - Nodemcu x2, - ElectroDragon ESP8266 - Gosund SP111 x3
Awatar użytkownika
klew
Posty: 8184
Rejestracja: czw cze 27, 2019 12:16 pm
Lokalizacja: Wrocław

Gang pisze: sob lut 06, 2021 6:06 am To już wiem, dlaczego nie ma BME w GUI.
Jakby się dało to jednak ten czujnik dodać i @krycha88 wrzuciłby to do GUIa byłoby pięknie, bo bym nie musiał rozbierać mojej czujki w łazience.
Która w zamyśle ma włączać wentylator kiedy żona tam saune robi.
Bme działa z warunkami dla temperatury i wilgotności. Nie działają tylko warunki dla ciśnienia
Widzimy się na Supla Offline Party vol. 2 :!:
Awatar użytkownika
Kamil Ból
Posty: 193
Rejestracja: wt maja 05, 2020 6:55 pm
Lokalizacja: Chęciny

Super sprawa tylko pasowało by tu zastosować coś na zasadzie histerezy ponieważ w chwili punktu 0 przekaźnik będzie narażony na częste przełączanie. Może wystarczy tu jakieś opóźnienie czasowe lub temperaturowe.
krycha88
Posty: 5187
Rejestracja: pt lis 16, 2018 7:25 am
Kontakt:

klew pisze: sob lut 06, 2021 8:06 am
Gang pisze: sob lut 06, 2021 6:06 am To już wiem, dlaczego nie ma BME w GUI.
Jakby się dało to jednak ten czujnik dodać i @krycha88 wrzuciłby to do GUIa byłoby pięknie, bo bym nie musiał rozbierać mojej czujki w łazience.
Która w zamyśle ma włączać wentylator kiedy żona tam saune robi.
Bme działa z warunkami dla temperatury i wilgotności. Nie działają tylko warunki dla ciśnienia
Ok nie wiedziałem tego, więc dzisiaj dodam ;)
https://gui-generic-builder.supla.io/
Awatar użytkownika
Gang
Posty: 616
Rejestracja: pt lis 09, 2018 12:44 pm

A ja zaraz update wrzucę i będę testował, już nawet nawilżacz z szafy wyciągnąłem :mrgreen:
Zamel: MEW-01, ROW-02, THW-01, RNW-01, SLW-02, ROW-07, mROW-02, PNW-01. DIY: Supla Device RPI + 10 xiaomi mija2, Sonoff: basic + 7 DS18B20, basic x2, touch, mini x3, - Nodemcu x2, - ElectroDragon ESP8266 - Gosund SP111 x3
krycha88
Posty: 5187
Rejestracja: pt lis 16, 2018 7:25 am
Kontakt:

Kamil Ból pisze: sob lut 06, 2021 8:17 am Super sprawa tylko pasowało by tu zastosować coś na zasadzie histerezy ponieważ w chwili punktu 0 przekaźnik będzie narażony na częste przełączanie. Może wystarczy tu jakieś opóźnienie czasowe lub temperaturowe.
Zwróć uwagę, że warunkowanie działa na dwóch wartościach on/off a nie jednej jak w termostacie więc nie będzie takiego problemu ;)
https://gui-generic-builder.supla.io/
Awatar użytkownika
Kamil Ból
Posty: 193
Rejestracja: wt maja 05, 2020 6:55 pm
Lokalizacja: Chęciny

Siadłem i doczytałem dokładniej i rzeczywiście masz rację. :shock: Sory że zawracam Gitarę :D Pozdrawiam
ODPOWIEDZ

Wróć do „Arduino IDE”