Seite 1 von 1
Liste aller Items einer Gruppe ausgeben ??? DSL
Verfasst: 21. Sep 2025 12:50
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
Re: Liste aller Items einer Gruppe ausgeben ??? DSL
Verfasst: 21. Sep 2025 13:10
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
Re: Liste aller Items einer Gruppe ausgeben ??? DSL
Verfasst: 21. Sep 2025 16:36
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
Re: Liste aller Items einer Gruppe ausgeben ??? DSL
Verfasst: 22. Sep 2025 01:53
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.

Re: Liste aller Items einer Gruppe ausgeben ??? DSL
Verfasst: 22. Sep 2025 19:06
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.