Optimierung der Hausabschaltung: Raumbezogene Steuerung?

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Proton
Beiträge: 93
Registriert: 10. Okt 2022 12:13
Answers: 4
Wohnort: Oberbergisches

Re: Optimierung der Hausabschaltung: Raumbezogene Steuerung?

Beitrag von Proton »

udo1toni hat geschrieben: 27. Nov 2024 15:35 (und außerdem sehr sparsam...)
In welcher Hinsicht sparsam?
udo1toni hat geschrieben: 27. Nov 2024 15:35 [*]Du musst lediglich die vorhandenen "Raum Group Items" einer weiteren Gruppe hinzufügen, das geht mit wenigen Klicks in der UI:
  • Main UI->Administration->Einstellungen->Items
  • Add Item (rechte untere Ecke weißes Plus in blauem Kreis...)
  • Group Item erstellen
  • Item in der Liste der Items selektieren
  • Direct Group Members->Change
  • in der Itemliste alle "Raum Group Items" selektieren
  • Schließen
  • Apply
[/list]
Und schon hast Du alle Räume gemeinsam in einer Gruppe zusammengefasst, wie gesagt, dieses Group Item darf nicht Teil des Semantic Model sein, da jeder Member des Semantic Model nur einmal im Model auftauchen darf. Das ist aber egal, weil wir das Group Item nicht im Model benötigen, es dient ja nur der Steuerung innerhalb der Rules.
Das habe ich mal testweise für drei Räume gemacht
2024-11-27_20-02.png
aber im non-semantic Model erscheint da nichts (der Pfeil zum Aufklappen fehlt)
2024-11-27_20-05.png
udo1toni hat geschrieben: 27. Nov 2024 15:35

Code: Alles auswählen

rule "Rollläden schließen"
when
    Item shutters changed to 100
then
    gLichter_alle.allMembers.filter[i|i instanceof SwitchItem].forEach[j|
        val room = j.label.split(" ").get(0)                                   // erstes Wort des Labels
        val presence = gPresence.members.filter[k|k.name.contains(room)].head  // zugehöriges Presänzitem
        if(presence.state == ON && j.state != ON)                              // Präsenz aktiv aber Licht aus
            j.sendCommand(ON)                                                    // einschalten
    ]
end
Immer vorausgesetzt, Du hast ein gemeinsames Group Item gPresence, in dem alle Präsenzmelder enthalten sind, es gibt nur ein Präsenzitem pro Raum und diese Items tragen den Raumnamen in identischer Form im Label.
Sehe ich das richtig, dass Gruppen openHAB intern mit einem kleinen "g" versehen werden und ich in Regeln auf diese zugreifen kann wie du es in deinem Beispiel gemacht hast? Das wäre natürlich eine chice Sache. :)
Dann könnte ich ja so durch alle Gruppen iterieren, wenn ich es brauche und gRaeume wäre nicht mehr nötig, oder sehe ich das falsch?

Du hattest erwähnt
udo1toni hat geschrieben: 27. Nov 2024 00:24 In der Folge musst Du allerdings extrem tief graben, um rückwärts pro Item abzufragen, zu welchen Group Items sie gehören, möglich, aber sehr viel aufwändiger.
den Teil habe ich leider immer noch nicht verstanden :oops:
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

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

Re: Optimierung der Hausabschaltung: Raumbezogene Steuerung?

Beitrag von udo1toni »

Proton hat geschrieben: 27. Nov 2024 20:22 In welcher Hinsicht sparsam?
Ein Bild hat gewöhnlich weit über 10 KByte Größe (z.B. das obere Bild Deines letzten Postings alleine 20 KByte, der Informationsgehalt kann jedoch leicht in wenigen Byte Text untergebracht werden.)
Proton hat geschrieben: 27. Nov 2024 20:22 aber im non-semantic Model erscheint da nichts (der Pfeil zum Aufklappen fehlt)
Vergiss bitte diese Anzeige, das Semantic Model kann jedes Item nur einmal anzeigen. Da die Items bereits Member des Semantic Model sind, tauchen sie keinesfalls als Kinder von Non-semantic Items auf.
Proton hat geschrieben: 27. Nov 2024 20:22 Sehe ich das richtig, dass Gruppen openHAB intern mit einem kleinen "g" versehen werden
Nein. Siehe weiter oben, es ist lediglich meine Form, Group Items zu kennzeichnen.
Proton hat geschrieben: 27. Nov 2024 20:22 den Teil habe ich leider immer noch nicht verstanden
Das habe ich auch nirgendwo gezeigt.
Da Deine Items die Rauminformation im Label enthalten, musst Du Dir darüber keine Gedanken machen.
Aber nur zur Erklärung: Die korrekte Form, das Semantic Model zu nutzen, ist, zunächst die Location zu definieren. Ein Group Item "Haus", darunter z.B. ein Group Item "Keller", Ein Group Item "Erdgeschoss", ein Group Item "Obergeschoss" oder so ähnlich, innerhalb dieser Geschossgruppen je Raum ein Group Item, z.B. Schlafzimmer, Wohnzimmer, Kueche usw.
Innerhalb dieser Location Group Items landen dann Group Items für Equipment, z.B. ein Group Item TV und eine Group Item AVReceiver und eventuell einzelne Points.
Gewöhnlich möchte man kurze Label haben, damit diese z.B. vollständig auf einem Smartphone Display dargestellt werden können. Es verbietet sich also eigentlich, den Raumnamen im Label zu verwenden.
Du kannst nun über die Gruppe Haus (mittels allMembers) alle Items des Semantic Model abfragen. Jedoch steht die Information, welches Item sich in welchem Raum befindet nur über die Gruppenzugehörigkeit zur Verfügung, das heißt, Du muss für die Items nun ermitteln, in welchen Gruppen sie Member sind, das geht mit .getGroupNames
Dummerweise kann ein Item aber mehreren Gruppen angehören, das heißt, die Methode liefert eine Liste zurück, durch die Du nun nach Group Items suchen musst, die einen Raum repräsentieren. Hast Du dann dieses Group Item gefunden, musst Du dazu das passende Präsenzitem finden (welches sich im Raum befindet, also auch Member der selben Gruppen sein sollte, sofern das Semantic Model korrekt aufgesetzt wurde).
Das Ganze ist absurd kompliziert, zumal Du ja auch keine Liste der Räume hast.
Eine einfachere Variante wäre, über die Stockwerke zu iterieren und innerhalb der Stockwerke über die Räume. Das geht bei mir dann schief, weil ich hier zwei Gebäudeteile habe, die (weil zwei Wohneinheiten) auch separat im Semantic Model abgebildet sind :)
Die einfache Variante ist, ein Group Item zu haben, welches alle Räume enthält. Ein weiteres notwendiges Kriterium ist, dass es sich um ein Licht handelt, das habe ich oben glatt vergessen... und um gezielt alles in einem Raum auszuschalten (nun ja, eben nicht alles, sondern z.B. nur alle "Hauptschalter", aber z.B. nicht die Mute-Funktion vom Fernseher, der ja Teil des Semantic Model sein könnte), müsste man weitere Merkmale einführen, evtl. geht einiges über die Tags.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Proton
Beiträge: 93
Registriert: 10. Okt 2022 12:13
Answers: 4
Wohnort: Oberbergisches

Re: Optimierung der Hausabschaltung: Raumbezogene Steuerung?

Beitrag von Proton »

Es hat leider etwas gedauert, aber ich habe jetzt alle Items umbenannt(so denke ich zumindest) und
mir jetzt den ganzen Thread nochmal durchgelesen. Es könnte sein, dass ich mich mal wieder unklar ausgedrückt habe.

Vorab: Das Problem mit den Präsenzsensoren und den Beleuchtungen konnte ich mit den geänderten Item-Namen wie folgt lösen:

Code: Alles auswählen

logInfo("Beleuchtung", "Start")
Prasenzsensoren_alle.allMembers.forEach[ sensor |
    // Extrahiere den Raumnamen
    val roomName = sensor.name.split("_").get(0)
    
    // Suche nach der zugehörigen Beleuchtung (Dimmer oder Switch)
    val light = Lichter_alle.allMembers.filter[ item |
        item.name.startsWith(roomName) && 
        (item.name.contains("Switch") || item.name.contains("Dimmer"))
    ].head
    
    logInfo("Beleuchtung", "Prüfe " + sensor.name)
    
    // Wenn Präsenz erkannt wird und ein Licht gefunden wurde
    if (sensor.state.toString == "ON" && light !== null) {
        logInfo("Beleuchtung", "Schalte " + light.name + " ein")
        light.sendCommand(ON)  // Funktioniert für beide Typen
    }
]
Das läuft wunderbar. :)

Bei meiner Frage, wegen derer ich den Thread gestartet habe, bin ich aber noch nicht weiter gekommen, zumindest nicht bewusst.

Ich habe das Folgende schon in einem vorherigen Post mal geschrieben, aber das ist ein bisschen untergegangen.
Wenn meine Frau schlafen geht, soll das Schlafzimmer (die Regel für Anwesenheitserkennung soll ausgeschaltet werden, Licht aus etc.) und ihr Arbeitszimmer(Licht aus, Rechner runterfahren usw.) ausgeschaltet werden.
Das gleiche gilt auch für mich, aber wenn meine Frau schon im Bett ist, braucht natürlich das Schlafzimmer nicht mehr ausgeschaltet werden, aber dadurch, dass wir beide schlafen sollen noch anderen Räume ausgeschaltet werden(z.B. im Wohnzimmer die Mediabox herunterfahren).

Leider verstehe ich es nicht, wie hilft mir bei diesem Problem eine Gruppe mit Räumen, wenn ich doch für jeden Raum eigentlich eine eigene Regel brauche?

Schönen Gruß

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

Re: Optimierung der Hausabschaltung: Raumbezogene Steuerung?

Beitrag von udo1toni »

Im Grunde sollte eine Rule für alle Räume reichen :) , was Du aber brauchst, ist eine Art Matrix, aus der hervorgeht, bei welcher Kombination von An- und Abwesenheiten welche Räume aktiv ein- bzw. auszuschalten sind.
Alternativ kannst Du auch Rules pro Raum definieren und dort jeweils entsprechende Trigger hinterlegen. Dann musst Du halt in jeder Rule einzeln alle Bedingungen hinterlegen.

Und wie gesagt, die saubere Variante fürs Ausschalten ist immer, pro zu schaltendem Item zu prüfen, welchen Status das Item hat und nur bei Bedarf den Befehl zu senden:

Code: Alles auswählen

gAusschaltgruppe.allMembers.forEach[i|
if(i.getStateAs(OnOffType) != OFF)
    i.sendCommand(OFF)
]
schaltet alle Member (und deren Kinder) aus, sofern diese noch nicht aus sind.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Proton
Beiträge: 93
Registriert: 10. Okt 2022 12:13
Answers: 4
Wohnort: Oberbergisches

Re: Optimierung der Hausabschaltung: Raumbezogene Steuerung?

Beitrag von Proton »

Bisher sieht es bei mir so aus:
Wir sind vier Personen im Haushalt.
Für jeden gibt es ein Switch-Item "abwesend" und "schläft".

Aus diesen acht Items werden die folgenden Items berechnet:
2024-12-16_21-52.png
Das hier möchte ich abbilden:
(Szenario mit meiner Frau und mir hatte ich ja schon beschrieben)
Kind1 geht schlafen (Schlaf-Item wird aktiviert) -> Kinderzimmer1 wird ausgeschaltet
Kind2 geht schlafen (Schlaf-Item wird aktiviert) -> Kinderzimmer2 + Rest vom Obergeschoss werden ausgeschaltet.

Wenn am am WE ein Kind früher wach ist und das Schlaf-Item deaktiviert, wird das entsprechende Kinderzimmer "aufgeweckt"
inkulusive Küche und Wohnzimmer.
Schaltet auch das zweite Kind das Schlaf-Item aus, wacht das Obergeschoss auf.

Ich habe mir das ungefähr so vorgestellt:
Es gibt eine Regel "Aufwachen Kind1", welche das Kinderzimmer1 aufweckt
Entweder startet das auch die Regeln für Küche und Wohnzimmer oder
es gibt eine Regel "Ein Kind wach" die darauf reagiert, wenn "Obergeschoss_abwesend_oder_schläft" auf OFF schaltet.
Wenn "Obergeschoss_abwesend_oder_wach" auf ON schaltet, wird das Obergeschoss aufgeweckt.

Ich gehe davon aus, dass ich es nicht schaffen werden alle Regeln so zu formulieren, dass Räume nicht doppelt aus- oder eingeschaltet werden,
deswegen habe ich für jeden Raum ein Hilfs-Item anlegen, was dafür sorgt, dass jeder Raum nur einmal aus- oder eingeschaltet wird.

Das läuft leider nicht so sauber, denn wenn ich als letzte Person schlafen gehe und mein Item einschalte, wird die Regel für Schlafzimmer und Erdgeschoss ausgelöst, aber auf für den Rest des Hauses, was das Erdgeschoss miteinbezieht, und da bekomme ich dann immer die Meldung, dass Regeln nicht ausgeführt werden können, weil die Regeln schon laufen.

Wenn man das mit einer Regel und einer Matrix lösen kann, soll mir das Recht sein, aber ich habe wirklich keinen Schimmer wie das funktionieren soll. :roll:
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

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

Re: Optimierung der Hausabschaltung: Raumbezogene Steuerung?

Beitrag von udo1toni »

Ich hab das ja oben bereits beschrieben... Du musst lediglich vor dem Ein- bzw. Ausschalten prüfen, ob der Zustand bereits dem Soll entspricht. Hilfsitems machen die Sache nicht einfacher, sondern verkomplizieren das Ganze.

Und wie gesagt... Meine Anregung wäre eine Matrix, welche für alle Kombinationen die gewünschten Zustände definiert.
Man kann das auch als Statemachine abbilden, wobei mit vier Schaltern mit Übergängen schon was zusammen kommt
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Proton
Beiträge: 93
Registriert: 10. Okt 2022 12:13
Answers: 4
Wohnort: Oberbergisches

Re: Optimierung der Hausabschaltung: Raumbezogene Steuerung?

Beitrag von Proton »

Sorry, dass ich gerade so schwer von Begriff bin.

Wenn man alle Räume in einer Gruppe hat, durchsucht man in der Regel alle Räume nach Items die man ausschalten kann und überprüft vorher ob das Item überhaupt ausgeschaltet werden muss, das verstehe ich ja noch, aber den Teil mit der Matrix leider nicht.

Das hier ist einer von 81 möglichen Zuständen.

Code: Alles auswählen

             | abwesend | schlafend | wach
-------------+----------+-----------+-------
Mann         |    X     |           |    
-------------+----------+-----------+-------
Frau         |          |     z     |    
-------------+----------+-----------+-------
Kind1        |          |           |   O
-------------+----------+-----------+-------
Kind2        |    X     |           |
Wie gieße ich alle Zustände in die oben beschriebene Regel?

Proton
Beiträge: 93
Registriert: 10. Okt 2022 12:13
Answers: 4
Wohnort: Oberbergisches

Re: Optimierung der Hausabschaltung: Raumbezogene Steuerung?

Beitrag von Proton »

Ich habe mal nach Statemachine geschaut und bin hier rauf gestoßen
https://community.openhab.org/t/design- ... oups/76116
aber hier weiß ich auch nicht wie ich das adaptieren soll :(

Antworten