Liste aller Items einer Gruppe ausgeben ??? DSL

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

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

Liste aller Items einer Gruppe ausgeben ??? DSL

Beitrag von peter-pan »

Ich möchte mir gerne eine Liste aller Gruppen-Items ausgeben lassen. Entweder als "Log" oder wenn möglich als "File".

Meine bisherigen Bemühungen sind leider fehlgeschlagen. Die Regel sieht so aus:

Code: Alles auswählen

rule "Tasmota Groups"
  when
   Item Dummy_13 changed to ON   // Test-Switch
  then
   tasmotas.members.forEach[ item | logInfo("Gruppen-Items", item.name + " = " + item.state.toString()) ]
end
Das ergibt dann folgende Meldung beim Abspeichern der Regel:

Code: Alles auswählen

2025-09-21 12:38:40.683 [INFO ] [el.core.internal.ModelRepositoryImpl] - Validation issues found in configuration model 'tasmota_devices.rules', using it anyway:
There is no context to infer the closure's argument types from. Consider typing the arguments or put the closures into a typed context.
Ich weiss nicht was für Argumenttypen oder welche Argumente gemeint sind. Das Gruppen-Item heisst "tasmotas".

Die Fehlermeldung beim Ausführen lautet:

Code: Alles auswählen

2025-09-21 12:51:28.963 [ERROR] [.handler.AbstractScriptModuleHandler] - Script execution of rule with UID 'tasmota_devices-1' failed: The name 'tasmotas' cannot be resolved to an item or type; line 17, column 4, length 8 in tasmota_devices
Pi5/8GB(PiOS Lite 64-bit(trixie)/SSD 120GB - OH5.0.2 openhabian

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

Re: Liste aller Items einer Gruppe ausgeben ??? DSL

Beitrag von peter-pan »

Nach ein paar weiteren Versuchen ist die Meldung beim Speicheren in dieser Version beim Speichern verschwunden:

Code: Alles auswählen

rule "Tasmota Groups"
  when
   Item Dummy_13 changed to ON   // Test-Switch
  then
   tasmotas.members.forEach[ GenericItem item | logInfo("Gruppen-Items", item.name + " = " + item.state.toString()) ]
 end
Ich habe als "ArgumentTyp" ??? GenericItem hinzugefügt (Try and Error").

Aber die Fehlermeldung bleibt nach wie vor.

Code: Alles auswählen

2025-09-21 13:01:03.955 [ERROR] [.handler.AbstractScriptModuleHandler] - Script execution of rule with UID 'tasmota_devices-1' failed: The name 'tasmotas' cannot be resolved to an item or type; line 17, column 4, length 8 in tasmota_devices
Pi5/8GB(PiOS Lite 64-bit(trixie)/SSD 120GB - OH5.0.2 openhabian

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

Re: Liste aller Items einer Gruppe ausgeben ??? DSL

Beitrag von udo1toni »

Erstens: Bist Du sicher, ein Group Item mit dem Namen tasmotas zu besitzen?
Zweitens: Die Logbefehle beherrschen Substitution.
Außerdem ist der erste übergebene String der letzte Teil des Loggernamens und sollte den Namenskonventionen folgen.

Code: Alles auswählen

rule "Tasmota Groups"
when
    Item Dummy_13 changed to ON   // Test-Switch
then
    tasmotas.members.forEach[ m |
        logInfo("listItems", "Status von {} ist {}"m.name, m.state)
    ]
end
m ist das aktuell betrachtete Item aus der Liste der Member vom Group Item tasmotas.
Die Substitution kümmert sich automatisch um den jeweils korrekten Datentyp, es braucht hier also kein .toString
openHAB5.0.1 stable in einem Debian-Container (trixie, OpenJDK 21 headless runtime) (Proxmox 9.0.11, LXC)

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

Re: Liste aller Items einer Gruppe ausgeben ??? DSL

Beitrag von peter-pan »

@udo1toni
Du hast es natürlich gleich erkannt. "tasmotas" ist nicht der der Gruppenname, sondern der Status des Item-Feldes(MQTT-GroupTopic).
Asche über mein Haupt. Der Gruppenname(GruppenItem) ist natürlich "gGrTop".
Danke. 👍
Ich habe neben dem Status "tasmotas" (normale Firmware) noch die Status "tasmosens" (Sensor-Version), "tasmoesp32" (ESp32-Chip) und "tasmocust" (selbst kompilierte)

Item-Beispiel:

Code: Alles auswählen

String  esp32c3_01_GroupTopic  "Hichi ESP32C3-01 Group Topic [%s]" <hichi> (gESP32C3_01,gGrTop) ["Point"]   { channel="mqtt:topic:danny:smame01:grouptop" }            
Ich hab das Ganze für meine Zwecke noch etwas erweitert:

Code: Alles auswählen

import org.openhab.core.model.script.ScriptServiceUtil
rule "Tasmota Groups"
when
    Item Dummy_13 changed to ON   // Test-Switch
then
    gGrTop.members.forEach[ m |
        var GenericItem itemTemp  = ScriptServiceUtil.getItemRegistry.getItem(m.name) as GenericItem    // Initialize Generic Item 
        var strHardware           = ScriptServiceUtil.getItemRegistry.getItem(itemTemp.name.replace("_GroupTopic","_Hardware")) as  GenericItem
        var strVersion            = ScriptServiceUtil.getItemRegistry.getItem(itemTemp.name.replace("_GroupTopic","_Version")) as  GenericItem
        var strItem               = itemTemp.name.replace("_GroupTopic","")

        logInfo("listItems", "MQTT-Group: {} | Name: {} | Chipset: {} | Tasmota-Version: {} " , m.state, strItem, strHardware.state, strVersion.state)
    ]
end
Was das Logging als solches betrifft, da hatte ich einfach einen etwas älteren Code-Schnipsel "geklaut", da gab es die Substitution wahrscheinlich noch nicht. :oops:
Pi5/8GB(PiOS Lite 64-bit(trixie)/SSD 120GB - OH5.0.2 openhabian

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

Re: Liste aller Items einer Gruppe ausgeben ??? DSL

Beitrag von udo1toni »

peter-pan hat geschrieben: 22. Sep 2025 01:53 Was das Logging als solches betrifft, da hatte ich einfach einen etwas älteren Code-Schnipsel "geklaut", da gab es die Substitution wahrscheinlich noch nicht.
Tut mir leid Dich enttäuschen zu müssen, die Logbefehle können das schon seit der ersten Version von openHAB :) Aber es gibt mannigfaltig Codebeispiele, die davon keinen Gebrauch machen.
openHAB5.0.1 stable in einem Debian-Container (trixie, OpenJDK 21 headless runtime) (Proxmox 9.0.11, LXC)

Antworten