Staram się skonstruować regułę, która uruchomi nawilżacz.
Nie mam czujnika poziomu wody w nawilżaczu 🙁
Założenia (podkreślone = zrealizowane):
Jeżeli jest jesień lub zima i
Jest noc lub nikogo z domowników nie ma
Jeżeli wilgotność w pomieszczeniu jest <40% to włącz nawilżacz.
Jeżeli wilgotność w pomieszczeniu jest >45% to wyłącz nawilżacz.
Coś dopiszę jak będą postępy. Jako, że jest to moja pierwsza reguła to będzie pewnie szło jak krew z nosa.
Items:
Number XAIR_humidity "Humidity [%d %%]" <humidity> {channel="xxxxxxxxxxxxx"}
Switch sonoff_03 "Nawilżacz" {mqtt=">[broker:/sonoff/03/cmd:command:ON:ON],>[broker:/sonoff/03/cmd:command:OFF:OFF]"}
String Season_Name "Pora roku [%s]" { channel="astro:sun:home:season#name" }
Group:Switch:OR(ON, OFF) ile_osob "Obecność [%dx os. w domu]"
rule "Metoda 1 ON"
when
Item XAIR_humidity changed
then
if(XAIR_humidity<=40.0) { sendCommand(sonoff_03, ON) }
end
rule "Metoda 1 OFF"
when
Item XAIR_humidity changed
then
if(XAIR_humidity>=45.0) { sendCommand(sonoff_03, OFF) }
end
ja złączyłbym to w jedna regułę
rule "Metoda humidit changed"
when
Item XAIR_humidity changed
then
if (XAIR_humidity<=40.0) { sendCommand(sonoff_03, ON) }
else if (XAIR_humidity>=45.0) { sendCommand(sonoff_03, OFF) }
end
Też o tym myślałem. Ale jako, że to moja pierwsza reguła to jeszcze jej nawet nie przetestowałem. Chyba nic nie wybuchnie...
nie jestem pewien czy możesz tak bezpośredni czytać wartości z items
XAIR_humidity<50
nie mam jak teraz sprawdzić
Niestety nie działa. Z logu:
Unknown variable or command '<'
zrob tak
XAIR_humidity.state<=40.0
Działa. Teraz staram się dodać warunek "jesienią i zimą", Nie potrzeba nawilżać poza sezonem grzewczym (a nie mam smart ogrzewania aby wyznaczyć start sezonu grzewczego)
rule "ON OFF humidifier"
when
Item XAIR_humidity changed or
Item Season_Name changed to AUTUMN or
Item Season_Name changed to WINTER
then
if (XAIR_humidity.state<=40.0) { sendCommand(sonoff_03, ON) }
else if (XAIR_humidity.state>=45.0) { sendCommand(sonoff_03, OFF) }
end
To Ci nie zadziała tak jak chcesz
reguła odpali się
- jeśli zmieni się wilgotność i nie ważne jaka masz porę roku - użyłeś warunku or (lub)
- jeśli zmieni się na Jesień - raz w roku to się odpali - przy zmianie z lata na jesień
- jeśli zmieni się na na Zimę - raz w roku to się odpali - przy zmianie z jesieni na zimę
generalnie odpali Ci 100% + 2 razy tyle samo co bez warunków na porę roku. Nie napiszę Ci, jak to zrobić, żebyś sam rozkminił 😉
@Maciek - i jak zrobies?
Hej. No ostatnio z innych powodów miałem przerwę w "home automation". Do tego poopóźniały mi się dostawy z CN i nie wiem gdzie są. Teraz mam trochę pisania i wyjaśniania... Jednak czasem warto zapłacić "troszkę" więcej.
Muszę powiedzieć, że bardzo mi się podoba automatyzacja i naprawdę działa! Dodaję wody. Sam się włącza i wyłącza. Polecam.
Jedyne co wymyśliłem to aby zmienić na:
Item Season_Name.state AUTUMN or Item Season_Name.state WINTER
ale nie przetestowałem. Muszę powiedzieć, że za każdym razem jak szukam openhab rules to otrzymuję przykłady które są już bardzo zaawansowane. Trudno złapać początek. Brak tutoriali. Dla nieprogramisty to chyba najcięższa część tego projektu...
Jak byś mógł coś podpowiedzieć to byłbym wdzięczny.
ok,
to taki tutorial'ik
Do poniższego
rule "nazwa reguly"
when
warunek (co ma sie wydarzyc, zeby uruchomił się kod poniżej)
then
ZROB COS
end
Między when a then masz tzw. zdarzenie, czyli co ma się wydarzyć, żeby uruchomiła się część między then a end
jaki są zdarzenia
Głownie zmienił się stan Item z jednej wartości na drugą.
przykłady.
- Item typu: Switch z ON na OFF lub odwrotnie
- Item typu PIR: z OPEN na CLOSE lub odwrotnie
- Item typu astro start zachód słońca - uruchomi się w czesie kiedy rozpocznie się zachód słońca
ale mogą być też np, godzina 12:31:10sek
Teraz jeśli zrobisz taki warunek
when
Item przycisk changed from OFF to ON
then
ZROB COS
end
to taka reguła odpali się za każdym razem kiedy wciśniesz przycisk
Łączenie warunków
Między when a then możesz oczywiście łączyć warunki
Warunki łączy się albo używając and albo or
Jeśli użyjesz and to te dwa warunki muszę wystąpić jednocześnie, żeby uruchomił się kod między then a end
when
Item przycisk_1 changed from OFF to ON
and
Item przycisk_2 changed from OFF to ON
then
ZROB COS
end
W tym przypadku musisz mieć wciśnięty przycisk_1 i przycisk_2 równocześnie, żeby uruchomił się kod między then a end
Jeśli użyjesz or to kod między then a end uruchom się kiedy jeden z tych dwóch przycisków zostanie wciśnięty, obojętnie który
------
Kolejny poziom wtajemniczenia
Między when a then jak napisałem wpisywane są zdarzenia, czyli coś musi się wydarzyc
- jest zima
- jest wiosna
to nie jest zdarzenie i nie może występować w warunku
Zmieniło się z lato na jesień jest zdarzeniem
Item Season_Name changed to AUTUMN
ale spowoduje że kod między then a end, uruchomi się raz w roku bo tylko raz w roku pora roku zmienia się z lato na jesień.
Jeśli chcesz sprawdzać stan / wartości to musisz już zrobić takie sprawdzenie w kodzie nie w warunku.
W twoim przypadku musisz zrobić coś takiego
when
Item XAIR_humidity changed
then
To odpali kod za każdym razem jak zmieni się wartości wilgotności
Tylko, że w kodzie teraz sprawdzasz - jaka jest pora roku, jaka jest wartość wilgotności i jak wszystko pasi to włączasz sonoffa
rule "ON OFF humidifier"
when
Item XAIR_humidity changed
then
if (Season_Name.state==AUTUMN or Season_Name.state==WINTER) { // Jesli jest albo jesień albo zima
if (XAIR_humidity.state<=40.0) { sendCommand(sonoff_03, ON) }
else if (XAIR_humidity.state>=45.0) { sendCommand(sonoff_03, OFF) }
}
end
Dziękuję, już zrozumiałem. Usilnie wszystkie warunki próbowałem wstawić po stronie "when".