Powiadomienia
Wyczyść wszystko

Reguła LWT opóźnione sprawdzanie stanu

3 Wpisów
2 Użytkownicy
0 Reactions
1,862 Wyświetleń
(@maras)
Wpisów: 197
Weteran Donator 2K22 Donator 2K19
Autor tematu
Translate
English
Spanish
French
German
Italian
Portuguese
Russian
Chinese
Japanese
Korean
Arabic
Hindi
Dutch
Polish
Turkish
Vietnamese
Thai
Swedish
Danish
Finnish
Norwegian
Czech
Hungarian
Romanian
Greek
Hebrew
Indonesian
Malay
Ukrainian
Bulgarian
Croatian
Slovak
Slovenian
Serbian
Lithuanian
Latvian
Estonian
 
[#2572]

Programista ze mnie żaden i popełniłem taką regułę:

rule "LWT"
when
    Member of gLWT changed
then
    val Lwtitem = triggeringItem
    if (Lwtitem.state == "Offline"|| Lwtitem.state == "Nieaktywny" || Lwtitem.state == "disconnected")
    {
     logInfo("home.rules", "LWT ALERT!: " + Lwtitem.name + " jest Offline")
     sendBroadcastNotification("LWT Allert " + Lwtitem.name + " jest Offline")    
    }
end

 

Reguła ma jedną wadę. Często zdarza sie ze urządzenie na sekundę staje się niedostępne i wtedy dostaje powiadomienia. Chciałbym zrobić tak, żeby po 15 minutach reguła ponownie sprawdziła status i jeśli ten jest nadal offline to wtedy komunikat. Jeśli jest już online to nic nie robi.

 


 
Dodane : 01/11/2021 8:24 pm
adrian
(@adrian)
Wpisów: 4083
Szefu Admin Zasłużony dla Forum, Patron Strony
Translate
English
Spanish
French
German
Italian
Portuguese
Russian
Chinese
Japanese
Korean
Arabic
Hindi
Dutch
Polish
Turkish
Vietnamese
Thai
Swedish
Danish
Finnish
Norwegian
Czech
Hungarian
Romanian
Greek
Hebrew
Indonesian
Malay
Ukrainian
Bulgarian
Croatian
Slovak
Slovenian
Serbian
Lithuanian
Latvian
Estonian
 

hey @maras

powinieneś zrobić coś takiego. 

Tylko nie jestem pewien o co biega z tymi grupami u Ciebie - bo zmiana w grupie powoduje odpalenie tej reguły, a nie jakiś konkretny item, 

Wiec nie wiem jaki tam ma być warunek po 15 minutach bo ten sam co powyżej chyba nie pyknie - powinno nam maje oko tam wystąpić sprawdzenie jakiegoś item

rule "LWT"
when
    Member of gLWT changed
then
    val Lwtitem = triggeringItem
    if (Lwtitem.state == "Offline"|| Lwtitem.state == "Nieaktywny" || Lwtitem.state == "disconnected")
    {
     createTimer(now.plusMinutes(15), [
        if (tutaj musi sprawdzic te itemy) {
            logInfo("home.rules", "LWT ALERT!: " + Lwtitem.name + " jest Offline")
            sendBroadcastNotification("LWT Allert " + Lwtitem.name + " jest Offline")  
        }
     ]) 
    }
end

EDIT: hm.... w sumie przydałoby się zobaczyć co tam masz w tej grupie gLWT? hm....w sumie to nie wiem czy zadziała bo teraz domyślam się, że Ty tą regułą chcesz obsłużyć więcej item's ???


 
Dodane : 02/11/2021 4:19 pm
(@maras)
Wpisów: 197
Weteran Donator 2K22 Donator 2K19
Autor tematu
Translate
English
Spanish
French
German
Italian
Portuguese
Russian
Chinese
Japanese
Korean
Arabic
Hindi
Dutch
Polish
Turkish
Vietnamese
Thai
Swedish
Danish
Finnish
Norwegian
Czech
Hungarian
Romanian
Greek
Hebrew
Indonesian
Malay
Ukrainian
Bulgarian
Croatian
Slovak
Slovenian
Serbian
Lithuanian
Latvian
Estonian
 

Tak grupa ma 17 Items'ow. Przechowujących string'a
Przykładowo:

StringGaraz1LWT"Garaz1 LWT"                    (gLWT) { channel="mqtt:topic:newbroker:mything:garaz1LWT" }
 
Domyślam się, że nie działa bo do zmiennej val Lwtitem jeśli zapisze status Offline to w ciągu tych 15 minut inny może zmienić stan zapisać do Val i w ten sposób reguła się sypie. Chyba że w drugiej części / Drugi IF if (tutaj musi sprawdzic te itemy) może sprawdzić wszystkich członków grupy. Chyba się wkopałem z tym stringiem. Nie wiem czy nie lepiej by było przypisywać status ON OFF

 
Dodane : 02/11/2021 7:01 pm
Udostępnij: