a czemu sobie w Tasmocie nie dasz Rule że jak tam spoadnie < 50 co tam mierzysz to sobie zrobisz publish mqtt? nie musisz wtedy te 300 sec czekać
{“Rule2”:“ON”,“Once”:“OFF”,“StopOnError”:“OFF”,“Length”:111,“Free”:400,“Rules”:“on Switch1#state do publish domoticz/in {"idx":59,"nvalue":%value%} endon on Switch1#state=0 do Power1 0 endon”}
to przykład ode mnie, gdzie mam sonofa mini i on raportuje osobno stan przełącznika, a osobno stan power. Power idzie przez menu, a stan przełącznika idzie na inny idx. Temat mqtt dla HASS ogarniesz.
Tak, dokładnie tak to teraz robię, rule załatwiają sprawę. Ma to kilka wad: są mało “koszerne” i nieprzenośnie na inne systemy, są trudne (łatwo o pomyłki trudne do zdiagnozowania) no i nie da się tam wszystkiego ogarnąć (typu zmiana o 15% w ciągu 10 sekund).
no to tu Ci podpowiem, że dla wszystkich takich bardziej skomplikowanych tematów -
np u mnie: pomiar prądu sterowania cewką elektrozaworu gazu pieca gazowego i wyliczanie z tego zużycia gazu, raportowanie charakterystyk - zdecydowałem się na pisanie własnego kodu w Arduino IDE, i też z takiego kodu karmie i mqtt, i web requesty i nawet chyba jeszcze to wysyłam gdzieś do chmury thingspeak i całość mieści się tam w 200 linijkach, jedyna upierdliwość to że jak coś potrzebujesz zmienić to trza lecieć z laptopem do garażu programować po USB, choć pewnie jak by mi się bardziej chciało to jakiś parametry mógłby sobie czytać z sieci - ale mi się nie chciało
Mi to się marzy, aby całą tasmotę dało się skompilować na Arduino IDE Pisanie własnego kodu jest super, ale jednak obawiałbym się, czy umiałbym uniknąć wszystkich pułapek programistycznych i przewidział w algorytmie to co jest nieprzewidziane
Ale to akurat nie problem. I nawet nie w arduino tylko poczytaj o takiej przystawce github.dev gdzie od razu w przeglądarce z githuba Ci zaczytuje działający i kompilowalny kod tasmota. Zmieniasz co potrzebujesz i kompilujesz. Sam mam taką jedną wersję zrobiona bo orginal a tasmota ma zwalony debouncing jeśli chcesz żeby działał tylko w jedną stronę np force high, i max w tasmocie jest 900ms a ja potrzebowałem więcej. Na koniec z tej strony z katalogu pobierasz sobie bin i wgrywasz do sonofa na przykład. A swój zmieniony projekt możesz zapisać jako brunch w githubie.
@angler Dzięki za info! Używałem Tasmota Compiler - zaskakująco szybko i sprawnie działa, ale jak dla mnie ma za mało opcji, bo to klik-klik “grube” opcje plus dodanie pojedynczych sensorów.
Dlatego właśnie szukam rozwiązania bardziej “offline”, żeby móc sobie podłubać w kodzie bez kont na githubie, odpalania dockerów itp. Taka tasmota na Arduino IDE byłaby idealna. Mam np. dwa czujniki które pokazują wartości z “offsetem” - pewnie dałoby się to jakoś wyklikać na gitpodzie, ale wolałbym ograniczyć się do prostego “x=x-5”…
Edit:
Odpowiadam sam sobie, ale ku potomnym
Pomiar energii w “inteligentnym” gniazdku - wysłanie telemetrii tylko wtedy, gdy zmierzona przez gniazdko moc zwiększy się +/-5W. Czyli “dynamiczna” telemetria - informacja nie jest wysyłana co określony czas ale tylko wtedy gdy informacja zmieni się w ściśle zdefiniowanym zakresie:
Rule1 ON ENERGY#Power>%var1% DO Backlog var1 %value%; Publish tele/%topic%/SENSOR {"Time":"%timestamp%","ENERGY":{"Power":%value%}} ; var2 %value%; add1 5; sub2 5 ENDON
Rule1 + ON ENERGY#Power<%var2% DO Backlog var2 %value%; Publish tele/%topic%/SENSOR {"Time":"%timestamp%","ENERGY":{"Power":%value%}} ; var1 %value%; add1 5; sub2 5 ENDON
To samo, ale dla np. czujnika temperatury, z jednoczesną korekcją wskazań (u mnie czujnik zaniża o 4,1hPa):
Rule1 ON BMP180#Pressure>%var1% DO Backlog var5=%value%+4.1; var1 %value%; Publish tele/%topic%/SENSOR {"Time":"%timestamp%","BMP180":{"Pressure":%var5%}}; var2 %value%; add1 0.2; sub2 0.2 ENDON
Rule1 + ON BMP180#Pressure<%var2% DO Backlog var5=%value%+4.1; var2 %value%; Publish tele/%topic%/SENSOR {"Time":"%timestamp%","BMP180":{"Pressure":%var5%}}; var1 %value%; add1 0.2; sub2 0.2 ENDON
I voila!
Teraz wystarczy prosta automatyzacja w HA (jeżeli POWER<50 to włącz GNIAZDKO) i w zasadzie otrzymuje się sekundę, góra dwie opóźnienia akcji.
Cześć, tutaj masz w kod tylko dla czunjnika bmp, mozesz udostępnić, albo dać info co zmienić dla czujnika temperatury?
Taka opcja znacznie odciązy mi bazę danych, gdzie monitoruję temp co 10s przy bojlerze i kotle
W pierwszej zasadzie zamiast %var5% wpisz %value% - bo chcesz wysłać wartość z czujnika, a nie jakaś zmienną - tym bardziej że tej zmiennej nie masz zdefiniowanej.
W kolejnych zasadach używaj kolejnych %var%, żeby nie wpadały do niepoprawnych reguł.
Spróbuj tak:
Rule1 ON DS18B20-1#Temperatura>%var1% DO Backlog var1 %value%; Publish tele/%topic%/SENSOR {"Time":"%timestamp%","DS18B20-1":{"Temperatura":%value%}}; var2 %value%; add1 0.2; sub2 0.2 ENDON
Rule1 + ON DS18B20-1#Temperatura<%var2% DO Backlog var2 %value%; Publish tele/%topic%/SENSOR {"Time":"%timestamp%","DS18B20-1":{"Temperatura":%value%}}; var1 %value%; add1 0.2; sub2 0.2 ENDON
Rule2 ON DS18B20-2#Temperatura>%var3% DO Backlog var3 %value%; Publish tele/%topic%/SENSOR {"Time":"%timestamp%","DS18B20-2":{"Temperatura":%value%}}; var4 %value%; add3 0.2; sub4 0.2 ENDON
Rule2 + ON DS18B20-2#Temperatura<%var4% DO Backlog var4 %value%; Publish tele/%topic%/SENSOR {"Time":"%timestamp%","DS18B20-2":{"Temperatura":%value%}}; var3 %value%; add3 0.2; sub4 0.2 ENDON
Upewnij się czy sensor wysyła “po polsku”: “Temperatura” czy “Temperature”, raczej to drugie
Najlepiej - sprawdź w konsoli tasmoty jaką paczkę danych wysyła podczas telemetrii. I jedyne co to trzeba taką samą paczkę spreparować używając reguł. Mi DS wysyła takie coś:
Chyba będzie proste, masz 90% gotowe. Spróbuj tego:
Rule1 ON DS18B20-1#Temperature>%var1% DO Backlog var1 %value%; Publish tele/%topic%/SENSOR {"Time":"%timestamp%","DS18B20-1":{"Id":"01144A470DAA","Temperature":%value%}}; var2 %value%; add1 0.2; sub2 0.2 ENDON
Rule1 + ON DS18B20-1#Temperature<%var2% DO Backlog var2 %value%; Publish tele/%topic%/SENSOR {"Time":"%timestamp%","DS18B20-1":{"Id":"01144A470DAA","Temperature":%value%}}; var1 %value%; add1 0.2; sub2 0.2 ENDON
Rule1 + ON DS18B20-2#Temperature>%var3% DO Backlog var3 %value%; Publish tele/%topic%/SENSOR {"Time":"%timestamp%","DS18B20-2":{"Id":"01144F1255AA","Temperature":%value%}}; var4 %value%; add3 0.2; sub4 0.2 ENDON
Rule1 + ON DS18B20-2#Temperature<%var4% DO Backlog var4 %value%; Publish tele/%topic%/SENSOR {"Time":"%timestamp%","DS18B20-2":{"Id":"01144F1255AA","Temperature":%value%}}; var3 %value%; add3 0.2; sub4 0.2 ENDON
I powinno działać - mam nadzieję że żadnej literówki nie walnąłem Najlepiej sprawdź na jednym czujniku, a jak zadziała to dodawaj kolejne, zmieniając numer czujnika, Id czujnika oraz zwiększając kolejno %var%.
Ja wklejam linijka po linijce. Czyli wklejam do konsoli, daję [Enter], wklejam następną itd. Pierwsze wcięcie jest nieistotne, zrobiłem żeby ładniej się czytało.
Nie wiem czy tasmota nie ma jakichś ograniczeń na długość reguły - ale pewnie wyskoczy błąd jakby coś. W razie problemów to zrób pierwsze trzy na Rule1, kolejne3 na Rule2 i ostatnie 2 na Rule3.
I oczywiście na koniec aktywuj regułę (rule1 1) i powinno zadziałać.