Seite 7 von 12

Re: Fensterkontakt Status

Verfasst: 16. Feb 2022 13:06
von udo1toni
Dann hast Du aber für jeden Raum eine weitere Gruppe, oder? Die Rule kann man so gestalten, dass sie sich um all diese Gruppen kümmert. eventuell (müsste man halt ausprobieren) kann man auch das Group Item zum Speichern des Status verwenden, allerdings muss auf jeden Fall die Aggregation aus dem Group Item entfernt werden.

Du kannst auch versuchen, das Mapping an anderer Stelle einzusetzen. Ich gehe davon aus, dass Du das Mapping im Thing oder im Profile vornimmst.
Es gehört aber in die Metadaten (dort State Description -> Pattern). Auf diese Weise wird der "echte" Status nicht verändert und steht auch für das Group Item weiterhin zur Aggregation zur Verfügung.

Re: Fensterkontakt Status

Verfasst: 24. Feb 2022 13:45
von tommesd
Ich verzweifele gerade daran, die Rule für alle Gruppen (Räume) anzupassen. Ich nehme an, dann müssen auch die Gruppen und Items eine bestimmte Namenssyntax haben. Ist es denn grundsätzlich geschickter den Gruppen- bzw Raumstatus im Gruppen Item zu speichern oder für jeden Raum ein eigenes Item zu erstellen und den Zustand darin zu speichern. Danke schon mal für die Hilfe.

Re: Fensterkontakt Status

Verfasst: 24. Feb 2022 20:49
von udo1toni
Wenn es möglich ist, das Group Item selbst als Speicher herzunehmen, sparst Du Dir halt ein weiteres Item.
Was die Gestaltung der Itemnamen betrifft, das ist nicht unbedingt nötig, vor allem, wenn das Group Item selbst den Wert halten kann. Das müsste man halt ausprobieren.
Organisation der Items: In der Hauptgruppe sind ausschließlich Untergruppen, keine einzelnen Fenster.

Code: Alles auswählen

Group gWindow
Group gWindow_01 "Fenster Gruppe 01 [%s]" (gWindow)
Group gWindow_Schlafzimmer "Fenster Schlafzimmer [%s]" (gWindow)
Contact Fenster01 "Schlafzimmer 01" (gWindow_Schlafzimmer)
Contact Fenster02 "Schlafzimmer 02" (gWindow_Schlafzimmer)
Contact Fenster03 "Schlafzimmer 03" (gWindow_Schlafzimmer)
Contact Fenster04 "Schlafzimmer 01" (gWindow_01)
Contact Fenster05 "Schlafzimmer 01" (gWindow_01)
Die Rule ist nur unwesentlich länger. Falls der Trigger der Rule nicht anspricht (da bin ich nicht sicher), müsste man allenfalls alle Gruppen einzeln mit Member of ... changed als Trigger auflisten. Der Eingfachheit halber berechent die Rule einfach bei jeder Änderung alle Zustände aller Fenster. Das dürfte bis zu einem großen Zweifamilienhaus (~30 Fenster) schneller gehen, als erst rauszusuchen, in welcher Gruppe es Änderungen gab und nur dort zu rechnen.

Code: Alles auswählen

rule "update group status" 
when
    Member of gWindow changed
then
    gWindow.members.forEach[g|
        if(g.members.filter[i|i.state != "CLOSED"].size > 0)
            g.postUpdate(OPEN)
        else
            g.postUpdate(CLOSED)
    ]
end

Re: Fensterkontakt Status

Verfasst: 25. Feb 2022 09:56
von tommesd
Ich habe noch 2 Verständisfragen:
- Was bewirkt das [%s] ?
- Wofür wird die Gruppe gWindow_01 benötigt?
Ich mache mal ein Beispiel:

Code: Alles auswählen

Group gFenster_alle
// ??? Group gWindow_01 "Fenster Gruppe 01 [%s]" (gFenster_alle)
Group gFenster_Schlafzimmer "Fenster Schlafzimmer [%s]" (gFenster_alle)
Contact Fenster01_Schlafzimmer_Seite "Schlafzimmer Seite" (gWindow_Schlafzimmer)
Contact Fenster02_Schlafzimmer_Dach "Schlafzimmer Dach" (gWindow_Schlafzimmer)
Contact Fenster03_Kinderzimmer_Seite "Kinderzimmer Seite" (gWindow_Kinderzimmer)
// ??? Contact Fenster04 "Schlafzimmer 01" (gWindow_01)
// ??? Contact Fenster05 "Schlafzimmer 01" (gWindow_01)

Re: Fensterkontakt Status

Verfasst: 25. Feb 2022 17:42
von udo1toni
Na, das sind einfach Gruppen, in denen Fenster sind. Mein Punkt war hier, dass der Name der Gruppe, Label usw. keine Rolle spielt.

[%s] ist im Label der Platzhalter für den aktuellen Status als String (deswegen das s). Bezogen auf die textliche Definition von Items, aus alter Gewohnheit...

Re: Fensterkontakt Status

Verfasst: 26. Feb 2022 14:27
von N1d45
udo1toni hat geschrieben: 3. Jan 2021 12:47 Und wenn Du das window Icon setzt, sollte dieses die drei Status ebenfalls entsprechend darstellen können. Ein Contact Item ist hier aber nicht die richtige Wahl, das gestattet nur OPEN oder CLOSED als Status.
Welches wäre das richtige Item, anstelle von Contact? Irgendwie bekomme ich es bei mir nicht hin, dass das Icon bei mir auf der Sitemap gekippt anzeigt.

Was ich sende, kann ich beim Sender einstellen. Ich könnte Strings senden ala "Closed" "Open" "Tilted". Auch andere wären möglich.
Auch könnte ich einfach Zahlen senden. z.B. 0 für geschlossen, 1 für geöffnet, 2 für gekippt.

Nur welchen Typ muss das Item haben. Und wie kann ich das Window-Item entsprechend anzeigen lassen? Probiere schon eine weile, und bekomm es einfach nicht hin :cry:

Beispiel Item:

Code: Alles auswählen

Contact          DoorSens_50_Sens                                "Fensterkontakt"                                (CONTACT)                {channel="mqtt:topic:doorsens50:Sens"}
Beispiel Sitemap:

Code: Alles auswählen

Default item=DoorSens_50_Sens                   label="Fenster [%s]" icon="window"
Edit: "Ajar" ist der String den man nutzen muss damit das Icon gekippt zeigt. Hach

Re: Fensterkontakt Status

Verfasst: 26. Feb 2022 17:38
von udo1toni
Gekippt wäre "AJAR" als Status, wenn Du das sehen möchtest, musst Du ein String Item verwenden, denn AJAR gibt es leider nicht als expliziten Status in einem anderen Itemtypen.

Re: Fensterkontakt Status

Verfasst: 26. Feb 2022 18:10
von N1d45
Ja. Danke. Das TILTED hatte mich irritiert. Habe es dann mit String und AJAR hinbekommen

Re: Fensterkontakt Status

Verfasst: 28. Feb 2022 12:00
von tommesd

Code: Alles auswählen

rule "update group status" 
when
    Member of gFenster_alle changed
then
    gFenster_alle.members.forEach[g|
        if(g.members.filter[i|i.state != "CLOSED"].size > 0)
            g.postUpdate(OPEN)
        else
            g.postUpdate(CLOSED)
    ]
end
Das funktioniert nicht. Ich habe mein Modell soweit angepasst, dass es eine Gruppe gFenster_alle gibt, worin die Gruppen der Fenster (Räume) enthalten sind, darin sind dann letztendlich die jeweiligen Fenster.
Der geworfene Fehler lautet:

Code: Alles auswählen

[ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID 'updatewindowgroupstatus-1' failed: 'members' is not a member of 'org.openhab.core.items.Item'; line 6, column 12, length 9 in updatewindowgroupstatus
 

Re: Fensterkontakt Status

Verfasst: 28. Feb 2022 13:46
von udo1toni
Der Fehler besagt, dass es sich bei g oder gFenster_alle nicht um ein Group Item handelt. Das sind die beiden einzigen Items, bei denen .members involviert ist. Hast Du eventuell irgendwelche Rollläden direkt unterhalb gFenster_alle einsortiert?