Witam.
Od niedawna zacząłem bawić się esphome, więc bardzo proszę o wyrozumiałość.
Do tej pory oprogramowanie na mikrokontrolery, czy też PC pisałem w C, C++, C# i w tych środowiskach sobie radzę, natomiast esphome, to dla mnie nowość, której nie do końca potrafię zrozumieć. Tu proszę was o pomoc. Do ESP12-F mam dołączone 3 czujniki: BMP280, DHT11 oraz SDS01. Skrypt jak poniżej
Wszystko działa pięknie, dane przesyłane są do HA ale czy istnieje możliwość wstawiania warunku, w którym załączanie SDS011 nastąpi tylko i wyłącznie wtedy jeśli wilgotność odczytana z DHT będzie poniżej zadanej wartości?
coś jak:
Musisz zmienić sposób myślenia, nie jesteś pierwszy, który ma z tym problem ale to nic trudnego .
HA i ESPHome wykorzystują automatyzacje, które wykonują się jeżeli coś się zmieni, jeżeli encja zmieni swój stan i tak w przypadku sensor w ESPHome masz takie możliwości - sensor-automation. Proponuje dokładnie czytać dokumentację, jest tam sporo przykładów, nawet Twój przypadek:
Jednak nie jest tak łatwo jakby się wydawało. Korzystając z metody on_value_range edytor nie podpowiada/nie widzi id czujnika. Jeśli spróbuję wprowadzić go ręcznie, to zgłasza błędy. Też zauważyłem, że zamiana miejscami poszczególnych czujników (zamiana w kodzie) powoduje wywalanie się kompilatora lub zgłaszanie błędu w edytorze.
ESPhome jest fajnym narzędziem, ale jakoś nie potrafię zrozumieć jego logiki.
Chyba będę musiał oprogramować urządzenie w tradycyjny sposób. Czyli na piechotę w C++ z wykorzystaniem MQTT.
A jeszcze jedna rzecz mi się nasuwa na myśl. Czy spod HA można odnieść się do zmiany interwału odpytywania konkretnego urządzenia - czujnika?
Sorry ale nie wiem o czym piszesz więc nie jestem wstanie pomóc. Jezeli bedziesz potocznie coś opisywał bez przykładów to raczej marna szansa żeby rozwiązać problem techniczny.
Problem opisany na samym początku z przykładem. Trzy czujniki podłączone do esp8266. Chodzi o to aby zezwolenie na uruchomienie czujnika SDS011 nastąpiło tylko i wyłącznie jeśli wilgotność powietrza jest niższa niż 75%. Co masz na myśli mówiąc o potocznym przedstawianiu problemu?
Jeśli zaczynasz pisać, to edytor podpowiada składnię tak? Natomiast w przypadku czujnika sds011 nie robi tego. Jesli ręcznie wprowadzę dane takie jak id czujnika, to z automatu mam podkreślenie błędu.
Przegladajac dokumentacje, czy przykłady nie spotkałem aby ktoś uzależniał działanie jednego czujnika od drugiego. Są co prawda akcje związane z przyciskiem i przekaźnikiem ale to nie to samo.
Niestety nie jestem Yamlowy. Nie potrafię przestawić się na taki język. Na codzień pisze w pochodnych języka C wiec proszę nie dziwcie się, ze yaml jest dla mnie mało logiczny.
Jest mało logiczny, bo to nie jest język programowania, pod spodem tego YAMLa są kilometry c++, więc skoro to jest coś czym żyjesz, to świetnie, bo raczej będziesz musiał sobie stworzyć komponent niestandardowy na bazie sds011, zobacz jak jest zbudowany komponent standardowy (być może to co wymyślisz da się wdrożyć jako bardziej ogólne rozwiązanie w ESPHome lub wybranych komponentach, którym by się właśnie coś podobnego przydało)
Ja rozumiem ideę - ale switch tu nie pomoże.
Mało technicznie, ale zrozumiesz - SDS011 (jak i wiele innych czujników pyłu zawieszonego) ma własny MCU w który nie ingerujemy (ten się komunikuje UARTem).
Natomiast czujnik jako całość nie jest wieczny - tam pracuje mechaniczny wentylator oraz naświetlacz LED (z wykręconą mocą tak daleko, że wytrzymuje tylko parę tysięcy godzin pracy), można jego żywotność znacznie przedłużyć aktywując go tylko na czas jednego pomiaru oraz nie aktywując go wcale jeśli warunki w których nie jest w stanie dać wiarygodnych wartości (za wysoka wilgotność).
Komponent standardowy przewiduje tylko możliwość pracy ciągłej (interwał 0 minut) lub pracy cyklicznej (w zakresie 1-30 min), ale nie przewiduje możliwości wyłączenia.
Technicznie jest to możliwe, ale nie na bazie komponentu standardowego.
Tak wiem o tym i dlatego chce usypiać czujnik na dłużej i blokować go przy dużej wilgotności powietrza. Kilka lat temu zbudowałem sobie stacje monitorująca, która działa do dziś, dzięki temu, ze czujnik nie działa w trybie automatycznym, tylko w najlepszych dla niego warunkach (czyli przy niskiej wilgotności). Program do obsługi SDS011 pisalem w oparciu o kartę katalogowa czujnika, stad wiem jakie są jego słabe punkty. Wtedy jako protokół komunikacyjny z HA wykorzystałem MQTT. Dwa dni temu wpadło mi w oko właśnie esphome i spodobało mi się api. Stad tez pomysł aby przenieść mój projekt na platformę esphome. Spróbuje w takim razie połączyć swój kod z yaml. Jeśli będzie działać, to się podzielę.
Na twoim miejscu, to bym raczej zgłosił propozycję kluczowym deweloperom, bo to projekt, który się rozwija i chyba każde sensowne ulepszenia są mile widziane.
Tu taką ogólną ideą jest możliwość wstrzymania pracy tego czujnika (i wielu innych podobnych), bo to jest dobrze uzasadnione jako nowa funkcjonalność.
Oczywiście komponent niestandardowy jest jakimś posunięciem, ale widziałem że bywały takie sytuacje, gdy ktoś napisał coś lepszego niż to co było wcześniej i w całości wymieniono cały komponent na nowy innego autora.
Z braku czasu trochę to trwało ale w końcu rozwiązałem problem. Oprogramowałem “własny czujnik”. W pliku konfiguracyjnym podajemy interwał pomiaru w minutach (1-255 typ uint8_t) oraz graniczną wartość wilgotności, która jeśli nie zostanie osiągnięta, to czujnik SDS011 zostanie wybudzony i dokona pomiaru. Sterowanie SDS011 oraz DHT22 zawarte jest w pliku źródłowym, który należy zaimportować do projektu. Należy jeszcze zwrócić uwagę do jakiego kanału UART podłączymy czujnik. Jeśli mamy do dyspozycji tylko jeden sprzętowy UART, to należy bezwzględnie wyłączyć logi w pliku konfiguracyjnym YAML (inaczej będzie pluł logami do czujnika). Przed podłączeniem SDS011 do reszty elektroniki, należy też go odpowiednio ustawić - interwał pomiaru na 0 (praca ciągła) oraz ręczny tryb pracy. Wtedy mamy pewność, że czujnik nie będzie się sam niepotrzebnie wybudzał. Poniżej wrzucę kod oraz aplikację PC do SDS011 mojego autorstwa. Może komuś się przyda.
Fajnie ale dlaczego użyłeś czego co nie jest rekomendowane przez ESPHome:
“Warning Custom components are deprecated, not recommended for new configurations and will be removed from ESPHome in a future release.” Custom Sensor Component — ESPHome
Na chwile obecna działa. Jeśli go usuną, na 100% pojawi się nowy komponent o podobnych właściwościach. Jeśli nie, to wrócę do podstawowej wersji jaką popełniłem dawno temu czyli wysyłanie danych po mqtt i obróbka w nodered. Chciałem sprawdzić funkcjonalności esphome. A z drugiej strony jak oni będą tak dodawać i usuwać komponenty, to ludziska zaczną sie wkurzać i przestaną używać esphome. Tak to działa niestety.
“Nie myli się (tylko) ten, kto nic nie robi” więc wątpię, że ESPHome przestanie być popularne z powodu zmian , osobiście widzę zmiany na lepsze ale to mój punkt widzenia.