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:
Code: Select all
#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));
Code: Select all
#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));
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:
Code: Select all
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
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ć.