Anwesenheit in Rule

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
Bronco17
Beiträge: 4
Registriert: 16. Mai 2020 11:01

Anwesenheit in Rule

Beitrag von Bronco17 »

Hallo,
ich habe ein Problem mit der Rule welches ein Switch schalten per Anwesenheit.

Code: Alles auswählen

rule "Quooker anwesenheit"
when
    Item iPhone_1 changed from OFF to ON or
    Item iPhone_2 changed from OFF to ON
then
    sendCommand(Quooker_Switch, ON)
end

rule "Wasser abwesenheit"
when
    Item iPhone_1 changed from ON to OFF or
    Item iPhone_2 changed from ON to OFF
then
    if (iPhone_1.state == OFF && iPhone_2.state == OFF) { Quooker_Switch.sendCommand (OFF) }
end
Sobalt ein iPhon anwesend ist und das zweite iPhone auf ON ändert, schaltet der Switch auf OF

Code: Alles auswählen

2020-06-26 16:06:05.615 [INFO ] [thome.model.script.iPhone 2 Home] - 2 ist zu Hause.

==> /var/log/openhab2/events.log <==

2020-06-26 16:06:05.618 [vent.ItemStateChangedEvent] - iPhone_2 changed from OFF to ON

2020-06-26 16:06:05.635 [ome.event.ItemCommandEvent] - Item 'Quooker_Switch' received command ON

2020-06-26 16:06:17.841 [vent.ItemStateChangedEvent] - Quooker_String changed from on to off

2020-06-26 16:06:17.846 [vent.ItemStateChangedEvent] - Quooker_Switch changed from ON to OFF
Wo ist der Fehler?

Gruss
Bronco17

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

Re: Anwesenheit in Rule

Beitrag von udo1toni »

Ich sehe da nur ein Quooker_String Item, welches von on nach off wechselt. Das hat aber nichts mit Deinen Rules zu tun, da es dort nicht auftaucht.
Die Rules sehen syntaktisch und von der Logik ok aus.

Allerdings gibt es zwei Dinge. Das eine: es wäre sinnvoller, ein Group Item zu verwenden:

Code: Alles auswählen

Group:Switch:OR(ON,OFF) iPhones
Switch iPhone_1 “iPhone 1“ (iPhones)
Switch iPhone_2 “iPhone 2“ (iPhones)
Das verodern der beiden Status passiert nun in der Gruppe. Die Rule (eine reicht) wird zur simpelsten möglichen:

Code: Alles auswählen

rule “quooker schalten“
when
    Item iPhones changed
then
    Quooker_Switch.sendCommand(newState)
end
Das Zweite ist, dass gerade iPhones gerne mal offline erkannt werden, obwohl sie im lokalen Netz eingeloggt sind. Es Kommt also sehr darauf an, wie die Items iPhone_1 und iPhone_2 mit ihrem Status versehen werden.

Bronco17
Beiträge: 4
Registriert: 16. Mai 2020 11:01

Re: Anwesenheit in Rule

Beitrag von Bronco17 »

Besten Dank udo.

Der Status von den iPhones (ON, anwesend, OFF, abwesend) passen.

Schaltet ein iPhone auf OFF bleibt der Quooker-Switch auf ON.
Schaltet das zweite iPhone auch auf OFF, schaltet der Quooker-Switch auf OFF.

Schaltet nun ein iPhone auf ON, schaltet der Quooker-Switch auf ON. So weit so gut
Schaltet das zweite iPhone auch auf ON, schaltet der Quooker-Switch auf OFF. Warum?
Diese Fehlschaltung des Quooker-Switch kommt nur vor, wenn ein iPhone bereits ON ist und das zweie iPhone auf ON schaltet, geht der Switch auf OFF.
Obwohl der log den richtigen befehl registriert, wechselt der Quooker-Switch auf OFF

Code: Alles auswählen

2020-06-27 12:31:55.998 [INFO ] [rthome.model.script.iPhone 2 Home] - 2 ist zu Hause.

2020-06-27 12:40:09.244 [INFO ] [thome.model.script.iPhone 1 Home] - 1 ist zu Hause.
 
2020-06-27 12:40:10.085 [ome.event.ItemCommandEvent] - Item 'Quooker_Switch' received command ON
 
2020-06-27 12:40:54.577 [vent.ItemStateChangedEvent] - Quooker_Switch changed from ON to OFF 
Ich weiss nicht, ob die Gruppenschaltung zum Ziel führt.
Den der Quooker-Switch "Marke MyStrom" sollte eingeschaltet sein sobald ein iPhone zuhause ist und abgeschaltet, wenn kein iPhone registriert ist.

Benutzeravatar
peter-pan
Beiträge: 890
Registriert: 28. Nov 2018 12:03
Answers: 6
Wohnort: Schwäbisch Gmünd

Re: Anwesenheit in Rule

Beitrag von peter-pan »

Bist du sicher, dass du die Rule von Udo richtig eingerichtet hast ? Eigentlich sollte diese "ON" triggern, wenn das erste Gerät "anwesend" ist und erst dann wieder triggern (OFF), wenn das letzte Gerät wieder "gegangen" ist.

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

Re: Anwesenheit in Rule

Beitrag von udo1toni »

Bronco17 hat geschrieben: 27. Jun 2020 12:58 Ich weiss nicht, ob die Gruppenschaltung zum Ziel führt.
Den der Quooker-Switch "Marke MyStrom" sollte eingeschaltet sein sobald ein iPhone zuhause ist und abgeschaltet, wenn kein iPhone registriert ist.
Genau das passiert über die Gruppe und die Minimal-Rule. Probiere es aus ;)

Wie gesagt, Deine Rules erscheinen mir syntaktisch und funktional korrekt. Der Fehler scheint von anderer Stelle zu kommen.

Du kannst zur Absicherung noch etwas Logging einbauen:

Code: Alles auswählen

rule "Quooker anwesenheit"
when
    Item iPhone_1 changed from OFF to ON or
    Item iPhone_2 changed from OFF to ON
then
    logInfo("iphones","{} wurde ON erkannt",triggeringItem.name)
    Quooker_Switch.sendCommand(ON)
end

rule "Wasser abwesenheit"
when
    Item iPhone_1 changed from ON to OFF or
    Item iPhone_2 changed from ON to OFF
then
    logInfo("iphones","{} wurde OFF erkannt",triggeringItem.name)
    logInfo("iphones","Status iPhone_1: {}",iPhone_1.state)
    logInfo("iphones","Status iPhone_2: {}",iPhone_2.state)
    if (iPhone_1.state == OFF && iPhone_2.state == OFF) 
        Quooker_Switch.sendCommand (OFF)
end
Oder, mit Gruppe und meiner Rule:

Code: Alles auswählen

rule “quooker schalten“
when
    Item iPhones changed
then
    logInfo("iphones","Gruppe iPhones Status von {} auf {} gewechselt.",previousState,newState)
    Quooker_Switch.sendCommand(newState)
end
Wie gesagt, ich kann Dir garantieren, dass die Gruppe exakt das tut, was Du im Sinn hast. Sobald mindestens eines der beiden Items ON ist, ist auch die Gruppe ON. Sobald alle Items auf OFF sind, ist auch die Gruppe OFF. Sobald der Status der Gruppe sich ändert, folgt Quooker_Switch dem Status.

Bronco17
Beiträge: 4
Registriert: 16. Mai 2020 11:01

Re: Anwesenheit in Rule

Beitrag von Bronco17 »

Sorry udo1toni, dass ich meine Zweifel an der Gruppenschaltung gehabt habe.
Habe nun die Rule auf die Gruppe geändert.

Leider gibt mir das Visual Studio Code bei (newState) einen Fehler.
  • Type mismatch: cannot convert from State to String(org.eclipse.xtext.xbase.validation.IssueCodes.incompatible_types)
    A request has failed.
Das Item iPhones in der Rule hat folgende Werte
  • Item iPhones | ON
    Members:
    Item iPhone_1 | ON
    Item iPhone_2 | ON

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

Re: Anwesenheit in Rule

Beitrag von udo1toni »

Welche Version von openHAB läuft denn? newState ist relativ neu dabei. Du kannst stattdessen auch iPhones.state einsetzen. Falls VSCode immer noch motzt, kannst Du auch iPhones.state.toString verwenden (das sollte aber höchstens beim .sendCommand notwendig sein)

Bronco17
Beiträge: 4
Registriert: 16. Mai 2020 11:01

Re: Anwesenheit in Rule

Beitrag von Bronco17 »

Bei mir läuft die Version openHAB 2.5.5-1 auf einem Raspberry Pi 3 Model B Rev 1.2
Mit iPhones.state.toString hat es geklappt :D
Rule wurde intensiv getestet und läuft!
Dankeschön für deine Hilfe.

Antworten