Seite 1 von 1
Rules bitte einmal überprüfen.
Verfasst: 26. Feb 2020 12:43
von Boxana
Ich komme nicht so ichtig weiter mit den rules.
ibt es da kein Kompendium?
Der Windalarm an sich geht aber Telegram sendet nicht. Ich denke das ich die Verkettung falsch anlege finde aber kein Beispiel oder weiß nicht so richtig wie ich das bei google suchen soll.
wenn ich den wert 85 über die sitemap einstellen möchte, muss ich das ein dummyschalter in der .items anlegen z.B. ein und dann mit einem slider verbinden?
Code: Alles auswählen
rule "Windwächter"
when
Item Wind_Gust changed or System started
then
if (Wind_Gust.state> 85)
sendCommand(WindAlarm, ON)
sendTelegram("bot1", "WindAlarm,Jalousie wird gesperrt!")
else
sendCommand(WindAlarm, OFF)
end
Re: Rules bitte einmal überprüfen.
Verfasst: 26. Feb 2020 12:48
von Darkwin101
Du musst die If anweisung in {} setzen damit das ganze dem IF zugeordnet wird das gleiche gilt für else
Code: Alles auswählen
rule "Windwächter"
when
Item Wind_Gust changed or System started
then
if(Wind_Gust.state> 85) {
sendCommand(WindAlarm, ON)
sendTelegram("bot1", "WindAlarm,Jalousie wird gesperrt!")
} else {
sendCommand(WindAlarm, OFF)
}
end
Ich würde auch noch ein Counter einbauen damit du nicht x Alarme bekommst wenn der Wind über 85 ist, denn ist der Wert 90 bekommst du eine Nachricht und sinkt der Wert auf 89 bekommst du die nächste Nachricht
Re: Rules bitte einmal überprüfen.
Verfasst: 26. Feb 2020 13:14
von Darkwin101
Zu Telegram hast du den Bot auch eingerichtet und ihm beim ersten mal eine Nachricht von deinem Telefon geschickt der Bot fängt erst an zu senden wenn er von dir eine Nachricht empfangen hat.
Zu deiner Frage ja du nimmst ein ITEM ohne Zuordnung als Number und in der Sitemap koppelst du das ganze mit einem Slider.
Deine Item würde dann So aussehen.
Number Slider_Name
Ich würde die Rule dann so aufbauen
Code: Alles auswählen
rule "Windwächter"
when
Item Wind_Gust changed or System started
then
if((Wind_Gust.state > Slider_Name.state) && WindAlarm.state != ON) {
WindAlarm.sendCommand(ON)
sendTelegram("bot1", "WindAlarm,Jalousie wird gesperrt!")
} else {
WindAlarm.sendCommand(OFF)
}
end
Es kann sein das eventuell noch ein as Number hinter Wind_Gust.state und Slider_Name.state kommen muss
Re: Rules bitte einmal überprüfen.
Verfasst: 26. Feb 2020 13:49
von Boxana
Danke euch für die schnelle und die freundliche Info und ja der Bot und Telegam sind aktiv und funktionieren.
Re: Rules bitte einmal überprüfen.
Verfasst: 26. Feb 2020 16:48
von Boxana
Ich denke so geht es nicht.
Wenn Wind > xx und Windalarm != ON
führt dazu das er beim nächstem changed den Alarm wieder ausschaltet da ja die Bedingung Wenn Wind > xx und Windalarm != ON nicht mehr gegeben ist
Re: Rules bitte einmal überprüfen.
Verfasst: 26. Feb 2020 16:52
von Boxana
So richtig?
40 ist nur ein debagg wert.
Code: Alles auswählen
rule "Windwächter"
when
Item Wind_Gust changed or System started
then
if ((Wind_Gust.state > 40) && WindAlarm.state == OFF){
WindAlarm.sendCommand(ON)
sendTelegram("bot1", "WindAlarm,Jalousie wird gesperrt!")}
else if {(Wind_Gust.state < 40)
WindAlarm.sendCommand(OFF)
}
end
Re: Rules bitte einmal überprüfen.
Verfasst: 26. Feb 2020 16:55
von Boxana
korrekt
Code: Alles auswählen
rule "Windwächter"
when
Item Wind_Gust changed or System started
then
if ((Wind_Gust.state > 40) && WindAlarm.state != OFF){
WindAlarm.sendCommand(ON)
sendTelegram("bot1", "WindAlarm,Jalousie wird gesperrt!")}
else if (Wind_Gust.state< 40) {
sendCommand(WindAlarm, OFF)
}
end
Re: Rules bitte einmal überprüfen.
Verfasst: 26. Feb 2020 17:46
von udo1toni
Nein, so ganz stimmt das nicht.
Also, mal abgesehen von unterschiedlichen Schreibweisen des gleichen Befehls, was immer hässlich ist (einmal Methode, einmal Action), gibt es drei gültige Status für ein Switch Item, nämlich ON, OFF und NULL. Wenn man nun nur dann auf ON schaltet, falls das Item
nicht OFF ist (!=), so wird der Befehl maximal einmal nach dem Start von openHAB ausgeführt.
Korrekt sähe die Rule eher so aus:
Code: Alles auswählen
rule "Windwächter"
when
Item Wind_Gust changed
then
if (Wind_Gust.state > 40 && WindAlarm.state != ON) {
WindAlarm.sendCommand(ON)
sendTelegram("bot1", "WindAlarm,Jalousie wird gesperrt!")
} else if(Wind_Gust.state < 40 && WindAlarm.state != OFF)
WindAlarm.sendCommand(OFF)
end
Die Rule wird bei Systemstart auf jeden Fall triggern, sobald ein gültiger Wert für Wind_Gust ansteht. Es hat hier keinen Vorteil, zusätzlich auf
System started zu triggern.
Eventuell wäre es sicherer, zuerst zu prüfen, ob Wind_Gust eine Zahl enthält.