Cześć
Mam bardzo prostą regułę do wyłączania zasilania komputera codziennie w nocy.
Chciałbym aby w sitemap był przełącznik, który będzie sterował regułą (czasami potrzebuje aby komp działał całą noc) tzn. jeżeli przełącznik jest na pozycji ON to reguła się wykonuje , jeżeli na OFF to reguła się nie wykonuje ( fajnie aby też ten przełącznik po przestawianiu na OFF sam się następnego dnia ustawiał na ON).
Pozdrawiam!
Cześć,
Nie jestem pewien dokładnej składni, reguł, natomiast masz możliwość określenia warunku dla wyzwalacza (część when) lub wewnątrz reguły poprzez warunek if. Potrzebujesz wówczas odwołać się do itemu. Pseudokod:
rule "Wyłącz Kompa"
when
Time cron "0 35 0 1/1 * ? *"
then
if (Komputer_AFE.state == ON) {
Komputer_AFE.sendCommand(OFF)
}
end
Oczywiście całość do zweryfikowania. 🙂
do tego co napisał @ldywicki musisz zdefiniować dodatkowy Item, nie może to być ten sam co włącza / wyłącza komputer
Switch Automate_Komputer_OnOff
Przełącznik oznacza to:
- jeśli ON to automatyzuje wyłączanie kompa
- jeśli OFF to nie ma automatycznego wyłączania kompa
Oczywiście możesz sobie zrobić odwrotnie
rule "Wyłącz Kompa"
when
Time cron "0 35 0 1/1 * ? *"
then
if (Automate_Komputer_OnOff.state!=OFF && Komputer_AFE.state!=OFF) {
Komputer_AFE.sendCommand(OFF)
}
if (Automate_Komputer_OnOff.state!=ON) {
Automate_Komputer_OnOff.postUpdate(ON)
}
end
@adrian z czystej ciekawości , w OH nie ma możliwości użycia innych zależności czasowych niż cron ? Już któryś raz widzę regułę która bazuje na zdarzeniach w cron i zastanawia mnie czy nie można użyć innego mechanizmu - skryptu ?
A może tak jest po prostu wygodniej ?
Dzięki za info. W przyszłości przetestuje.
U mnie rozwiązanie bazujące na cronie jest wystarczające ale zastanawiam się czy nie było by wygodniej stworzyć element , który z pozycji aplikacji na telefonie pozwoli nam wybrać/wprowadzić godzinę zdarzenia . Coś jakby harmonogram ale z możliwością konfiguracji z telefonu a nie na sztywno w regule.
Pozdrawiam
@adrian z czystej ciekawości , w OH nie ma możliwości użycia innych zależności czasowych niż cron ? Już któryś raz widzę regułę która bazuje na zdarzeniach w cron i zastanawia mnie czy nie można użyć innego mechanizmu - skryptu ?
A może tak jest po prostu wygodniej ?
Ogólnie większość skryptów, które widziałem działało w oparciu o timery. Na przykład gdy chcesz odbić przycisk po 2 minutach to uruchamiasz timer i robisz to nim. W OH3 do tego typu scenariuszy wprowadzili oficjalną obsługę czegoś co się nazywa `expiry`.
Nie mniej sama obsługa zdarzenia w danym czasie, np codziennie o 5 (gdzie jest to parametr) sprowadza się do stworzenia itema typu DateTime widocznego z UI, który przetrzymuje sam czas (DateTime w OH jest kontenerem na datę, czas lub obydwie rzeczy). W drugim miejscu skrypt/reguła wykorzystuje to jako parametr do podjęcia akcji.
Na oficjalnym forum jest to określone jako "time of day design pattern".
@isom w zależności jak jest potrzeba, wybrałem co mi przyszło do głowy z czasem
- jest cron, czyli tak jak wyżej on determinuje kiedy odpalić regułę, np o godzine, co 5 sek itd wiesz jak działa na 100%
- jest też wyzwalacz: at a fixed time of the day - wybierasz godzinne np. o 1:10 i leci cos tam
- jest takie czasowo - zdarzeniowe, np. wschód słońca, skończyła się noc, jest ciemno - na bazie lokalizacji i astro danych - dokładny czas zmienia się każdego dnia oczywiście
- jest coś jeszcze takiego jak Efemerydy, ale mam to najmniej rozpykane. Efemerydy są regionalne. Mniej więcej co dostajesz to informacje typu: dzisiaj jest święto narodowe lub następne święto narodowe jest za X dni - no i możesz to wykorzystać. Możesz to sobie jeszcze pod siebie zrobić wprowadzając własne wydarzenia np. "oświadczyłem się żonie", "Urodziny żony: - tego typu "Efemerydy" żeby nie dostać ścierą później. Natomiast moje rozumienie Efemerydów jest bardzie astrologiczne, a w OH jest bardziej wydarzeniowe.
do tego co napisał @ldywicki musisz zdefiniować dodatkowy Item, nie może to być ten sam co włącza / wyłącza komputer
Switch Automate_Komputer_OnOffPrzełącznik oznacza to:
- jeśli ON to automatyzuje wyłączanie kompa
- jeśli OFF to nie ma automatycznego wyłączania kompa
Oczywiście możesz sobie zrobić odwrotnie
rule "Wyłącz Kompa"
when
Time cron "0 35 0 1/1 * ? *"
then
if (Automate_Komputer_OnOff.state!=OFF && Komputer_AFE.state!=OFF) {
Komputer_AFE.sendCommand(OFF)
}
if (Automate_Komputer_OnOff.state!=ON) {
Automate_Komputer_OnOff.postUpdate(ON)
}
end
Dzięki nie pomyślałem, żeby zrobić wirtualny switch...
Jak już pisałem słaby jestem z programowania ale dlaczego robisz tak skomplikowaną regułę? Ja się ograniczyłem do tego:
items
Switch Rules_komputer "Automatyczne wyłączanie komputera"
rule "Wyłącz Kompa"
when
Time cron "0 35 0 1/1 * ? *"
then
if (Rules_komputer.state == ON)
Komputer_AFE.sendCommand(OFF)
else
Rules_komputer.postUpdate(ON)
end