Stawiam pierwsze kroki w HA, więc proszę o wyrozumiałość.
HA plus podpięte urządzenie “X” na tasmocie, komunikujące się poprzez mqtt (add-on: Mosquitto broker). Wszystko działa, mogę sterować, odczytywać parametry itp. “X” to Wemos Mini - stan urządzenia to on/of, dodatkowo urządzenie analizuje sygnał na pinie analogowym i pokazuje wartość ADC. Klasyka
Automatyzacja typu “jak zmieni się status X na 1sek, to włącz urządzenie Y” - działa bezproblemowo i bez żadnych opóźnień. Również “jak zmieni się stan Y to włącz/wyłącz/przełącz stan X”. Mogę więc sterować i odczytywać stany urządzeń bez opóźnień.
Ale nie udaje mi się odczytywać z czujnika zmian ADC. Zmiany pojawiają się zgodnie z “telemetry period”, a zależy mi aby były “na bieżąco” - analogicznie jak zmiany statusu.
Jes możliwe w samym oprogramowaniu Tasmota dzięki regułom. Zapoznaj się z działem dokumentacji. Jest sporo przykładów, które pozwalają zrozumieć jak działa składnia reguł. Są to automatyzacje zapisane w ESP.
Dla Ciebie przykład:
Przesyłaj wartość czujnika tylko po osiągnięciu delty
No właśnie - ale chciałem uniknąć tej “delty”. Bo to dodatkowa linia kodu, dodatkowe zmienne, dodatkowe parametry - i zwiększa to komplikację i szanse na popełnienie błędu. Według dokumentacji sam zapis “ANALOG#A0” powinien wystarczyć
Jeśli chcesz mieć każdą zmianę jako wyzwalacz to użyj A0#state Nie podając atrybutu czy wartości dla state każda zmiana stanu czujnika A0 będzie publikowała jego stan %value% poprzez regułę.
Rule1 ON A0#State DO Publish tele/tasmota_1F536B/SENSOR {"Time":"%timestamp%","ANALOG":{"A0":%value%}} ENDON
No właśnie, takie coś mi nie działa, zarówno trigger na “A0#State” jak i “ANALOG#State” - nie wysyła zmian na bieżąco, tylko co telemetry. Chyba za późno na kodowanie
Informacyjnie:
W konsoli Tasmota, wielkość liter nie mają znaczenia. Zamiennie działa 1 zamiast ON czy 0 zamiast off.
Reguły często wykorzystują funkcję komend BACKLOG:
Tak, każdorazowo daję “Rule1 0” i “Rule1 1” po zmianach. Sprawdzam na razie tylko w konsoli, ale jak w konsoli coś się zmieni to w HA również, więc powinno być OK. Z “div10” próbowałem, ale tu coś w ogóle dziwnie, bo działa, ale nie “od razu” tylko z pewnym opóźnieniem, a co gorsza wygląda że wysyła nie wartość z sensora, ale “wartość div10”, czyli “2” zamiast “22”, “0” zamiast “30”. Generalnie div10 wolałbym uniknąć - bo jak sygnał zmieni się z “10” na 20" to div10 tego nie wykryje. Jakiś robię szkolny błąd
Coraz bardziej podejrzewam, że to jest coś z Wemosem. Może to co wysyła rzeczywiście jest stałą wartością (zaokrągloną?), ale urządzenie dokonuje pomiarów z jakimiś uśrednieniami (i wewnętrznie operuje na np 744.1, 774.8) i stąd wyzwolenia…
Tak szczegółowo nie znam działania tasmoty, ale wygląda, że trygger uruchamia z każdym odczytem wartości A0. Być może trzeba porównać wartość obecną z poprzednią?
Edit…
W dokumentacji znalazłem taki wpis
Analog#A0div10 when the A0 input changes by more than 1% it provides a value between 0 and 100
Ameryki nie odkryłem, ale można stworzyć regułę z regulowanym czasem raportowania sensorów
rule2
on system#boot do
ruletimer2 60
endon
on rules#timer=2 do
backlog status 10; ruletimer2 60
endon
W sumie sukces
Zadziałała następująca konstrukcja:
Rule1 ON ANALOG#A0!=%var1% DO backlog var1 %value%; Publish tele/tasmota_1F536B/SENSOR {"Time":"%timestamp%","ANALOG":{"A0":%value%}} ENDON
Trochę pokręcone i nie jest KISS, ale działa. Automatyzacja na bazie odczytu wartości A0 działa z około sekundowym opóźnieniem, więc jest zupełnie zadowalająco.
Dzięki @RobinI30 i @angler za pomoc!
Gratuluję samozaparcia i fajnie, że nie zrezygnowałeś z reguł w Tasmota. Myślę, że dają sporo satysfakcji gdy automatyzacja dzieje się na poziomie urządzenia, niezależnie od pośredników.
Dla zaspokojenia ciekawości…
Jakie pomiary(czego) wymagają takiej precyzji? Czy komunikat jest wysyłany co jedną sekundę niezależnie od zmiany napięcia?
P.S.
Dla zaciekawionych działaniem reguł Tasmota, przykłady wykorzystania:
Generalnie to rozpoczynam zabawę z HA i staram się nad tym zapanować Ze względu na scentralizowany system HA planuję co się da wrzucić do urządzeń/czujników a HA żeby tylko to ogarniał do kupy.
Najbardziej mi zależy na braku opóźnień. Chciałbym aby np. włączyło mi się światło jak tylko czujnik wykryje ruch. Czyli niech to będzie jakaś sekunda, góra dwie - a nie 10 sekund. Ten przykład z ADC to w ramach “zabawy” - jeżeli uda mi się to zrobić, to uda też inne. W planie mam realizację automatyki “jak włączę komputer to ma włączyć się lampka” i “jak czujnik oświetlenia wykryje na dole wyłączenie światła, to niech zapali na piętrze lampkę w trybie nocnym” - czyli zdarzenia, które powinny być zrealizowane “błyskawicznie”, żeby się po prostu zrealizowały, a nie musiał na to czekać.
A z drugiej strony niech to działa na “zdarzeniach”, bo oczywiście telemetrię można przyśpieszyć, ale wówczas wszystkie urządzenia non-stop by coś wysyłały, a to marnowanie mocy, zasobów i pasma.
Póki co bawię się Node Red (ale to jak strzelanie z armaty do wróbla) i trochę się wkurzam, że w XXI wieku ciągle trzeba edytować pliki konfiguracyjne i poznawać tajemnicze rzeczy typu “payload” “topic”, “class”, “yaml” zamiast działać na klik-klik