structure "Problem"

Begonnen von dt2510, 11 März 2021, 14:00:01

Vorheriges Thema - Nächstes Thema

dt2510

Ich tu mich gerade etwas schwer mit einer structure Definition. Bisher hab' ich die Structure immer in der Form

define <structureName> structure <structureType> <device1> <device2> ...

angegeben. Zur Überwachung des Batteriestatus möchte ich nun gerne alle Geräte die ein battery Reading haben in die Struktur packen.
Das müsste doch einfacher gehen, als alle Geräte aufzuzählen ...

DeeSPe

Wirklich structure?
Wäre hier nicht eine readingsGroup besser angebracht?

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

dt2510

Keine Ahnung, hab' ich noch nie benutzt ... muss ich mir mal ansehen.

viele Grüße

Stefan

dt2510

Die dient aber doch zur Anzeige in der FHEM Oberfläche ... ich erstelle in der Structure userReadings, die ich später zur Anzeige mit TabletUI verwende.

Hier zum Beispiel: alle Devices mit battery "low" werden in einem userReading devices aufgelistet und später in TabletUI angezeigt.

DeeSPe

Was willst Du denn erreichen?
Readings auslesen und anzeigen (readingsGroup) oder einen kumulierten Status sehen und Geräte schalten (structure)?

Gruß
Dan

P.S. structure haben doch keine wirklichen Readings. Wie willst Du da userReadings benutzen? Habe von TableUI aber keine Ahnung.
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

dt2510

Vielleicht poste ich mal das aktuelle define

define Batteries structure Batteries EG_TR_FGSD EG_WZ_FGSD OG_TR_FGSD UG_PR_FGSD
setuuid Batteries 5c460e63-f33f-b646-1f85-c1747836ea577fa2
attr Batteries alias Status Batterien
attr Batteries group Strukturen
attr Batteries propagateAttr ^$
attr Batteries room #System
attr Batteries stateFormat batteryMin % min.
attr Batteries userReadings batteryMin { minNum(100, map { $_ eq $NAME ? 100 : ReadingsNum($_,"batteryPercent",100) } split(" ",$defs{$NAME}{DEF}) ) },\
notFull { grep { $_ ne "$NAME" && ReadingsNum($_,"batteryPercent",100) < 100 } split(" ",$defs{$NAME}{DEF}) },\
devices { join(",",grep { $_ ne "$NAME" && ReadingsNum($_,"batteryPercent",100) < 100 } split(" ",$defs{$NAME}{DEF})) },\
devicesLow { join(",",grep { $_ ne "$NAME" && ReadingsNum($_,"batteryPercent",100) < 26 } split(" ",$defs{$NAME}{DEF})) }


Hier werden 4 userReadings  generiert:

- batteryMin enthält den niedrigsten %-Wert
- notFull enthält die Anzahl aller Geräte, die unter 100% liegen
- devices enthält eine Liste aller Geräte, die unter 100% liegen
- devicesLow enthält eine Liste aller Geräte, die unter 26% liegen

rudolfkoenig

Wenn ich es richtig in Erinnerung habe, wird jedes Argument als devspec interpretiert, und structure hoert auf global RENAMED, DELETED, DEFINED.

dt2510

Das obige define war noch das alte für meine ZWave Devices vor Umstellung auf Homematic. Ich hab' jetzt mal die structure an meine neuen HmIP Devices angepasst:

define Batteries structure Batteries .*._STH .*._SMO .*._SMI55 .*._SWDO .*._WRC2 .*._eTRV
setuuid Batteries 5c460e63-f33f-b646-1f85-c1747836ea577fa2
attr Batteries alias Status Batterien
attr Batteries group Strukturen
attr Batteries propagateAttr ^$
attr Batteries room #System
attr Batteries userReadings battery { min("ok", map { $_ eq $NAME ? "ok" : ReadingsVal($_,"battery","ok") } split(" ",$defs{$NAME}{DEF}) ) },\
batteriesLow { grep { $_ ne "$NAME" && ReadingsVal($_,"battery","ok") eq "low" } split(" ",$defs{$NAME}{DEF}) },\
devices { join(",",grep { $_ ne "$NAME" && ReadingsVal($_,"battery","ok") eq "low" } split(" ",$defs{$NAME}{DEF})) }


Das Internal NOTIFYDEV enthält jetzt zwar alle Geräte (   
OG_BD_STH,EG_KU_SMI55,EG_AZ_WRC2,EG_WC_eTRV,EG_WZ_STH,EG_EZ_WRC2,EG_WC_STH,EG_TR_WRC2,EG_TR_STH,global,EG_AN_STH,UG_PR_STH,OG_BD_eTRV,EG_WF_STH,EG_FL_STH,EG_KU_SWDO,AU_EI_SMO,EG_AZ_STH,EG_EZ_STH,OG_BD_WRC2,EG_WZ_eTRV,EG_AN_eTRV,EG_AZ_eTRV,EG_TR_eTRV) inkl. global, aber für die userReadings wird als $defs{$NAME}{DEF} leider ".*._STH .*._SMO .*._SMI55 .*._SWDO .*._WRC2 .*._eTRV" herangezogen.

DeeSPe

Dann nimm doch statt $defs{$NAME}{DEF} eben $defs{$NAME}{NOTIFYDEV}, split am Komma statt am Leerzeichen, und global ausschließen.

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

dt2510

Ist mir auch gerade aufgefallen :) Danke aber trotzdem für die Info !

rudolfkoenig

ZitatZur Überwachung des Batteriestatus möchte ich nun gerne alle Geräte die ein battery Reading haben in die Struktur packen
...
Zitatdefine Batteries structure Batteries .*._STH .*._SMO .*._SMI55 .*._SWDO .*._WRC2 .*._eTRV

Wieso nicht "define Batteries structure Batteries r:battery=.+" ?

dt2510

#11
Zitat von: rudolfkoenig am 11 März 2021, 16:24:43
...
Wieso nicht "define Batteries structure Batteries r:battery=.+" ?

Weil ich die Art der Definition nicht kannte :) Werd' ich testen - danke !

edit: funktioniert :) Allerdings muss ich noch ein Paar Tage meine Variante verwenden, bis alle ZWave Geräte ausgetauscht sind - die liefern nämlich Prozentwerte statt ok|low