Powiadomienia
Wyczyść wszystko

[Rozwiązany] Jak dorobić WŁĄCZNIK do reguły ?

9 Wpisów
4 Użytkownicy
4 Likes
731 Wyświetleń
(@edass)
Wpisów: 216
Weteran
Autor tematu
 

Cześć

Mam bardzo prostą regułę do wyłączania zasilania komputera codziennie w nocy.

 

rule "Wyłącz Kompa"
when
    Time cron "0 35 0 1/1 * ? *"
then
    
    Komputer_AFE.sendCommand(OFF)
    
end
 

 

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!

 
Dodane : 14/11/2020 4:28 pm
(@ldywicki)
Wpisów: 77
Kontrybutor
 

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. 🙂

 
Dodane : 13/01/2021 1:38 pm
edass reacted
adrian
(@adrian)
Wpisów: 3973
Szefu Admin Zasłużony dla Forum, Patron Strony
 

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
 
Dodane : 14/01/2021 9:24 am
edass reacted
isom
 isom
(@isom)
Wpisów: 5079
Szef wszystkich szefów Moderator Zasłużony dla Forum, Donator 2K19, Donator 2K20
 

@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 ?

 
Dodane : 14/01/2021 10:40 am
(@edass)
Wpisów: 216
Weteran
Autor tematu
 

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

 
Dodane : 14/01/2021 10:53 am
(@ldywicki)
Wpisów: 77
Kontrybutor
 
Dodane przez: @isom

@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".

 
Dodane : 14/01/2021 11:47 am
edass reacted
adrian
(@adrian)
Wpisów: 3973
Szefu Admin Zasłużony dla Forum, Patron Strony
 

@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.

 
Dodane : 14/01/2021 12:33 pm
edass reacted
isom
 isom
(@isom)
Wpisów: 5079
Szef wszystkich szefów Moderator Zasłużony dla Forum, Donator 2K19, Donator 2K20
 

Ok dzięki Panowie @ldywicki i @adrian , nie będę drążył dalej bo to mnie satysfakcjonuje , Efemerydy mi się podobają :)) Ja muszę sobie takie Efemerydy zbudować sam , uzywająć narzędzi LUA i cron 

 
Dodane : 14/01/2021 12:56 pm
(@edass)
Wpisów: 216
Weteran
Autor tematu
 
Dodane przez: @adrian

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

 

 

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"
 
rules
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
 
 
Dodane : 30/01/2021 4:59 pm
Udostępnij: