Gruppen abfragen
-
manes
- Beiträge: 243
- Registriert: 23. Jul 2020 17:49
- Wohnort: Kreis Wesel
Re: Gruppen abfragen
ok, gehe ich wieder zu meinem Punkt oben zurück. Ich habe im Moment ein Brett vor dem Kopf, wie erstelle ich Deinen Vorschlag? Wo muß ich da was anlegen?
---------------------
liebe Grüße Manfred
liebe Grüße Manfred
-
nw378
- Beiträge: 357
- Registriert: 22. Sep 2018 10:38
Re: Gruppen abfragen
In dem (Linux) Verzeichnis /etc/openhab/rules/ kannst Du textbasierte Regeln erstellen. Diese Dateien müssen auf .rules enden.
Details dazu findest Du auch hier:
https://www.openhab.org/docs/configurat ... s-dsl.html
Sehr hilfreich zum Programmieren ist Visual Studio Code https://code.visualstudio.com/?wt.mc_id=vscom_downloads.
Dort gibt es auch ein PlugIn für openHAB, so dass Du direkt Werte und Programmierfehler (Syntax) angezeigt bekommst.
Alternativ gehst Du in der WebUI auf Rules, wählst das + für Add, gehst dort auf Code, und gibst folgenden YAML ein:
Details dazu findest Du auch hier:
https://www.openhab.org/docs/configurat ... s-dsl.html
Sehr hilfreich zum Programmieren ist Visual Studio Code https://code.visualstudio.com/?wt.mc_id=vscom_downloads.
Dort gibt es auch ein PlugIn für openHAB, so dass Du direkt Werte und Programmierfehler (Syntax) angezeigt bekommst.
Alternativ gehst Du in der WebUI auf Rules, wählst das + für Add, gehst dort auf Code, und gibst folgenden YAML ein:
Code: Alles auswählen
uid: heizungssteuerung
label: Heizungssteuerung
description: Schaltet die Heizung abhängig von offenen Heizventilen
triggers:
- id: alle_10_minuten
type: timer.GenericCronTrigger
configuration:
cronExpression: "0 */10 * * * ?"
conditions: []
actions:
- id: logik
type: script.ScriptAction
configuration:
type: application/vnd.openhab.dsl.rule
script: |
// nur während der Heizperiode
if (heizPeriode.state == OFF) return;
val heizVentilAuf = gFBH_Vents.members.filter[item | item.state > 0].size > 0
// true, wenn mindestens ein Heizventil geöffnet ist
if (heizVentilAuf) {
if (heizung.state != ON)
heizung.sendCommand(ON)
} else {
if (heizung.state != OFF)
heizung.sendCommand(OFF)
}
openHAB 5.1.0 @ RPi 5 / M.2 SSD - openhabian/Debian 13.1 (trixie) - InfluxDB2 und Grafana @ Synology Docker - KNX, Viessmann vcontrol, u.v.m.
-
Harka
- Beiträge: 578
- Registriert: 30. Apr 2021 13:13
Re: Gruppen abfragen
Ja, geht genau so.manes hat geschrieben: 6. Feb 2026 09:34 Nur, ab da finde ich das Gruppenitem nicht mehr. (kann man das überhaupt so machen?) Ich dachte man könnte dann einfach nur den Trigger so bauen, das man sagt: reagiere bitte auf Änderungen in der Gruppe. Und dann wird ein inline Script erstellt, wo ich dann weitere Aktionen dazu eingebe.
Aktiviere mal unten "Show non-semantic" und nutze die Suchleiste oben (direkt unterhalb "Pick from Model").
-
manes
- Beiträge: 243
- Registriert: 23. Jul 2020 17:49
- Wohnort: Kreis Wesel
Re: Gruppen abfragen
auh verdammt, war ganz unten und ausgegraut. Konnte aber angewählt werden. Hatte ich wohl total übersehen, obwohl ich auch schon show non semantic angeklickt hatte.
---------------------
liebe Grüße Manfred
liebe Grüße Manfred
- udo1toni
- Beiträge: 15622
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Gruppen abfragen
Noch ein Tipp von mir
Weil Du ja explizit schreibst, dass es darum geht, ob alle Regler auf 0 stehen...
Dazu brauchst Du überhaupt keine Regel (bzw. nur noch, um was auch immer auszulösen).
Definiere ein Group:Number:SUM Item (Gruppenitem vom Typ Number mit der Aggregation SUM) und ordne alle Regler zu. Wenn alle Regler 0 sind, ist auch das Group Item 0, ansonsten hält es die Summe aller offenen Ventile. Du könntest auch mit MAX nach dem höchsten Wert schauen oder mit AVG den Durchschnitt nehmen, ganz nach Belieben.
Wenn das Group Item so definiert ist, kannst Du entweder zwei Rules anlegen oder auch nur eine, die zwei Trigger hat, nämlich Item MeinGroupItem changed to 0 und Item MeinGroupItem changed from 0, dann musst Du in der Rule über die implizite Variable newState nur abfragen, ob der aktuelle Zustand von 0 abweicht. Ist das der Fall, muss die Heizung laufen, ansonsten kann sie ausgeschaltet werden.
Die Rule dazu kannst Du über die Main UI eingeben (Add Action -> Inline Script) und hast dort die Wahl zwischen verschiedenen Scriptsprachen. Von Haus aus ist (noch) die DSL installiert, Du kannst aber auch Java Script Scripting installieren und ein passendes Script grafisch erstellen, das geht mit Blockly.
Dabei kann man mit etwas Erfahrung auch sehr komplexe Logiken mit Blockly erstellen. Und das Beste: Blockly generiert JavaScript Code, den man sich anschauen kann (man kann ihn auch editieren, zerstört dann aber evtl. die Blockly Ansicht)
Die fertige Rule wird dank des Group Items mit Aggregation nur beim Wechsel von oder nach 0 ausgelöst. Eventuell ist es sinnvoll, hier noch Timeouts einzubauen, um ein ständiges Ein- und Ausschalten zu verhindern.
Dazu brauchst Du überhaupt keine Regel (bzw. nur noch, um was auch immer auszulösen).
Definiere ein Group:Number:SUM Item (Gruppenitem vom Typ Number mit der Aggregation SUM) und ordne alle Regler zu. Wenn alle Regler 0 sind, ist auch das Group Item 0, ansonsten hält es die Summe aller offenen Ventile. Du könntest auch mit MAX nach dem höchsten Wert schauen oder mit AVG den Durchschnitt nehmen, ganz nach Belieben.
Wenn das Group Item so definiert ist, kannst Du entweder zwei Rules anlegen oder auch nur eine, die zwei Trigger hat, nämlich Item MeinGroupItem changed to 0 und Item MeinGroupItem changed from 0, dann musst Du in der Rule über die implizite Variable newState nur abfragen, ob der aktuelle Zustand von 0 abweicht. Ist das der Fall, muss die Heizung laufen, ansonsten kann sie ausgeschaltet werden.
Die Rule dazu kannst Du über die Main UI eingeben (Add Action -> Inline Script) und hast dort die Wahl zwischen verschiedenen Scriptsprachen. Von Haus aus ist (noch) die DSL installiert, Du kannst aber auch Java Script Scripting installieren und ein passendes Script grafisch erstellen, das geht mit Blockly.
Dabei kann man mit etwas Erfahrung auch sehr komplexe Logiken mit Blockly erstellen. Und das Beste: Blockly generiert JavaScript Code, den man sich anschauen kann (man kann ihn auch editieren, zerstört dann aber evtl. die Blockly Ansicht)
Die fertige Rule wird dank des Group Items mit Aggregation nur beim Wechsel von oder nach 0 ausgelöst. Eventuell ist es sinnvoll, hier noch Timeouts einzubauen, um ein ständiges Ein- und Ausschalten zu verhindern.
openHAB5.1.2 stable in einem Debian-Container (trixie, OpenJDK 21 headless runtime - LXC, 4 Kerne, 3 GByte RAM)
Hostsystem Proxmox VE 9.1.5 - AMD Ryzen 5 3600 6 Kerne, 12 Threads - 64 GByte RAM - ZFS Pools: Raid Z1, 3 x 20 TB HDD -> 40 TByte und Raid Z0-Mirrored 4 x 1 TByte NVMe -> 2 TByte
Hostsystem Proxmox VE 9.1.5 - AMD Ryzen 5 3600 6 Kerne, 12 Threads - 64 GByte RAM - ZFS Pools: Raid Z1, 3 x 20 TB HDD -> 40 TByte und Raid Z0-Mirrored 4 x 1 TByte NVMe -> 2 TByte
-
manes
- Beiträge: 243
- Registriert: 23. Jul 2020 17:49
- Wohnort: Kreis Wesel
Re: Gruppen abfragen
Das klingt nach einem guten Plan, Danke. Den werde ich mal weiter verfolgen. Ich merke, die Tiefen sind noch sehr tief für mich....
---------------------
liebe Grüße Manfred
liebe Grüße Manfred