Script mit zwei Bedingungen "AND"

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
DonMarcello
Beiträge: 19
Registriert: 13. Apr 2022 11:15
Answers: 0

Script mit zwei Bedingungen "AND"

Beitrag von DonMarcello »

Hallo zusammen,

ich habe eine Frage zu Skripten mit zwei Bedingungen zur Ausführung, welche mit der AND-Funktion gekoppelt sind.

Folgender Code wurde mit Blockly geschrieben:

Code: Alles auswählen

if (itemRegistry.getItem('PingMarcelHandy_Online').getState() == 'OFF' && itemRegistry.getItem('PingMelanieHandy_Online').getState() == 'OFF') {
  events.sendCommand('Statusschalter_SchalterfurStatusAusserHaus', 'ON');
}
Ziel soll es sein, dass wenn die Pingerreichbarkeit zu dem Handy von meiner Frau UND die Pingerreichbarkeit zum Handy von mir den Status "OFF" hat, (also durch Ping nicht erreichbar), soll der Schalter für den "Außer Haus"-Modus auf ON geschaltet werden.

Drücke ich auf "Run now" funktioniert es. Aber auch nur dann. Sonst verweilt das Script im Modus IDLE. Muss ich dieses noch irgendwie zur Dauerüberprüfung der Stati einrichten?

Ich hoffe ihr könnt mir ein wenig auf die Sprünge helfen.

Vielen Dank im Voraus für eure Hilfe!

int5749
Beiträge: 1173
Registriert: 4. Nov 2019 22:08
Answers: 9

Re: Script mit zwei Bedingungen "AND"

Beitrag von int5749 »

Wie wird dies denn getriggert? Generell funktionieren solche Vergleiche, aber die Rule muss eben irgendwie getriggert werden.
itemRegistry ist ja sicher nicht das item, sondern z.B. PingMarcelHandyOnline??
Dann würde eine DSL Rule wie folgt aussehen

Code: Alles auswählen

rule "GhostMode"
when
    Item PingMarcelHandy_Online changed or
    Item PingMelanieHandy_Online changed
then
    if (itemRegistry.getItem('PingMarcelHandy_Online').getState() == 'OFF' && itemRegistry.getItem('PingMelanieHandy_Online').getState() == 'OFF') {
        events.sendCommand('Statusschalter_SchalterfurStatusAusserHaus', 'ON');
    }
end
ggfs auch OFF anstatt 'OFF'
openHAB 4.1.0 Release mit openHABian in einem Debian Bookworm (LXC) unter Proxmox 8.1.3

DonMarcello
Beiträge: 19
Registriert: 13. Apr 2022 11:15
Answers: 0

Re: Script mit zwei Bedingungen "AND"

Beitrag von DonMarcello »

Also der Auslöser/Trigger sollten die Stati der Ping-Erreichbarkeiten sein.

Also wenn PingMarcel... UND PingMelanie... gleich OFF sind, dann soll die Rule ausgelöst werden. Ich vermute, ich habe hier noch ein grundsätzliches Verständnisproblem bei den OpenHab-Skripten. Ich vergleiche das aktuell wie eine normale Programmiersprache. Da sind ja UND-Operatoren kein Problem.

Geht das überhaupt? In deinem Beispiel hast du

Code: Alles auswählen

when
    Item PingMarcelHandy_Online changed or
    Item PingMelanieHandy_Online changed
verwendet. Hier soll ja eigentlich nicht or sondern and. Kann man das 1:1 austauschen?

DonMarcello
Beiträge: 19
Registriert: 13. Apr 2022 11:15
Answers: 0

Re: Script mit zwei Bedingungen "AND"

Beitrag von DonMarcello »

Kommando zurück ... ich hatte tatsächlich einen Denkfehler bzgl. des Triggers.

Der Trigger ist, wenn sich ein Status ändert. Dann wird die UND-Funktion ausgeführt. Jetzt habe ich das System begriffen :D

Danke dir int5749!

Benutzeravatar
udo1toni
Beiträge: 15249
Registriert: 11. Apr 2018 18:05
Answers: 243
Wohnort: Darmstadt

Re: Script mit zwei Bedingungen "AND"

Beitrag von udo1toni »

Anmerkung hierzu:

Gewöhnlich brauchst Du dazu keine Rule! Stattdessen reicht es, eine Gruppe zu definieren, in der die beiden Items enthalten sind. Die Gruppe definierst Du mit dem Members Base Type Switch und der Aggregation Function All OFF then ON else OFF.

Ab sofort wird der Status der Group abgängig von den Status der Member gesteuert werden. Falls noch weitere Smartphones dazu kommen, packst Du sie einfach ebenfalls in die Group, den Rest erledigt openHAB.

Wichtig ist noch, dass die Group kein received command triggern wird, sie wird lediglich ihren Status ändern, also changed triggern. Das spielt aber gewöhnlich keine Rolle.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

DonMarcello
Beiträge: 19
Registriert: 13. Apr 2022 11:15
Answers: 0

Re: Script mit zwei Bedingungen "AND"

Beitrag von DonMarcello »

Hallo udo1toni,

danke für deine Ergänzung. Ich muss gestehen, dass ich dir gerade nicht folgen kann. Ich bin noch recht neu in Openhab und mache gerade die ersten Schritte auf der GUI. Ich weiß noch nicht, wo ich Gruppen definieren kann. Das muss ich mir mal in Ruhe anschauen.

Vielleicht trotzdem darauf aufbauend eine weitere Frage:
Ich baue gerade die Zentralheizungsfunktion. Ein Schalter, der bei allen Heizungen die Solltemperatur ändert. Wenn ich nun das Item Zentralheizung auf die Solltemperatur 20 Grad ändere, wie übertrage ich diesen Wert dann an die anderen Solltemperaturen der Heizungen? Gibt es vielleicht ein Blockly-Beispiel? Aktuell kann ich nur vordefinierte Werte als Text senden. Aber ich habe noch nicht herausgefunden, wie ich den Wert der Solltemperatur des Items A an als State der Solltemperatur bei den Items B und C setzen kann.

DonMarcello
Beiträge: 19
Registriert: 13. Apr 2022 11:15
Answers: 0

Re: Script mit zwei Bedingungen "AND"

Beitrag von DonMarcello »

Ich schreibe heute etwas schneller als ich anschließend die Lösung finde ... man kann das Text Feld gegen das State austauschen ... hat sich auch erledigt ... sorry :)

Benutzeravatar
udo1toni
Beiträge: 15249
Registriert: 11. Apr 2018 18:05
Answers: 243
Wohnort: Darmstadt

Re: Script mit zwei Bedingungen "AND"

Beitrag von udo1toni »

Gruppen sind auch nur eine besondere Art Items, entsprechend definiert man sie über die Items.
Man kann in openHAB3 die Items sowohl über die Gruppe zuordnen (Direct Group Members, nachdem die Gruppe angelegt wurde, es können mehrere Items auf einmal der aktuellen Gruppe zugeordnet werden), als auch im Item selbst (Group Membership, es können beliebig viele Gruppen auf einmal für das aktuelle Item selektiert werden).

Gruppen können auch Gruppen enthalten. Das Semantic Model nutzt ebenfalls Gruppen.
Wenn man Gruppen anderen Gruppen zuweist, sollte man darauf achten, keinen Zirkelbezug zu erzeugen :)

Ansonsten sind Gruppen eine der mächtigeren Funktionen in openHAB :) Beispiel Heizung: Du packst alle Thermostaten in eine Gruppe. Anschließend reicht ein Befehl an die Gruppe, um alle Thermostaten auf einen Schlag auf die gleiche Temperatur zu setzen. Dazu braucht es also eigentlich keine Rule. Möchte man Rules generalisieren (eine Rule, die sich um viele gleichartige Items kümmert) sind Gruppen quasi unentbehrlich.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

DonMarcello
Beiträge: 19
Registriert: 13. Apr 2022 11:15
Answers: 0

Re: Script mit zwei Bedingungen "AND"

Beitrag von DonMarcello »

Ich hab es gefunden. Das kannte ich noch gar nicht. Vielen dank für den Hinweis!

Das macht es definitiv in der Rules-Sektion übersichtlicher :)

Antworten