FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: 87insane am 16 Februar 2019, 10:21:10

Titel: [GELÖST] - Readings einer bestimmten Art zusammen zählen (Anzahl von Readings)
Beitrag von: 87insane am 16 Februar 2019, 10:21:10
Guten Morgen,

gibt es eine Möglichkeit alle Readings in einem Gerät, die mit Namen xy (regex bekomme ich hin), zusammen zu zählen? Also nicht power1 + power2 = power zusammen. Sondern eine Anzahl der Readings soll am Ende da stehen.

Beispiel:
Gerät A
Readings:
X
Y
Z

= 3

Danke!
Titel: Antw:Readings einer bestimmten Art zusammen zählen (Anzahl von Readings)
Beitrag von: Byte09 am 16 Februar 2019, 10:48:32
über eine perlroutine in jedem Fall:

my $testName = "tre";
# Name des zu testenden Devices

my $testhash = $defs{$testName};
my $testreading = $testhash->{READINGS};
my @areadings = ( keys %{$testreading} );

my @trigg = grep( m/Trigger.*/, @areadings );
# Trigger.* -> regex

my $anz = @trigg;
#anzahl der gefundenen elemente



gruss Byte09
Titel: Antw:Readings einer bestimmten Art zusammen zählen (Anzahl von Readings)
Beitrag von: 87insane am 16 Februar 2019, 10:53:30
Das ist schon mal ne Idee die um zu setzen ist.

Dachte da an sowas, was sich quasi automatisch erzeugt. Also eine Art Reading in dem der Code steht. Und ich weiß, das ist jetzt ggf. ein wenig frech (ist aber so nicht gemeint), glaube aber, es muss viel einfacher gehen.
Titel: Antw:Readings einer bestimmten Art zusammen zählen (Anzahl von Readings)
Beitrag von: Byte09 am 16 Februar 2019, 10:58:06
Zitat von: 87insane am 16 Februar 2019, 10:53:30
Das ist schon mal ne Idee die um zu setzen ist.

Dachte da an sowas, was sich quasi automatisch erzeugt. Also eine Art Reading in dem der Code steht. Und ich weiß, das ist jetzt ggf. ein wenig frech (ist aber so nicht gemeint), glaube aber, es muss viel einfacher gehen.

ja, kann sein das es einfacher geht , ich habe jetzt auch nicht danach geschaut ob fhem da 'direkt' eine Möglichkeit bietet. Das kam mir gerade nur so in den Sinn und ich würde dass etwas modifiziert in ein Userreading packen.

gruss Byte09
Titel: Antw:Readings einer bestimmten Art zusammen zählen (Anzahl von Readings)
Beitrag von: 87insane am 16 Februar 2019, 10:59:13
Google gerade danach aber glaube das es theoretisch auch mit Regex gehen sollte. So nach dem Motto wenn du Matches hast, dann gib aus wie viele....
Titel: Antw:Readings einer bestimmten Art zusammen zählen (Anzahl von Readings)
Beitrag von: Ellert am 16 Februar 2019, 10:59:21
In DOIF funktioniert das mit der Aggregation [#:"^A$":"power\d"]
Sonst über https://wiki.fhem.de/wiki/DevelopmentModuleAPI#devspec2array oder im Gerätehash https://wiki.fhem.de/wiki/DevelopmentModuleIntro#Readings suchen.
Titel: Antw:Readings einer bestimmten Art zusammen zählen (Anzahl von Readings)
Beitrag von: Byte09 am 16 Februar 2019, 11:12:24
wenn du es so als userreading setzt ist es ja im grunde automatisch:

attr tre userReadings anzahl1 {my $testreading = $hash->{READINGS};;\
my @areadings = ( keys %{$testreading} );;\
my $anz = grep( m/Trigger.*/, @areadings );;\
return $anz;;}



... oder habe ich die Anforderung falsch verstanden ?

gruss Byte09
Titel: Antw:Readings einer bestimmten Art zusammen zählen (Anzahl von Readings)
Beitrag von: 87insane am 16 Februar 2019, 11:16:20
Finde die Idee mit der Aggregation sehr gut. Damit habe ich bisher noch nichts gemacht.

Natürlich geht das nicht und ich habe einen Fehler drin... In deinem Beispiel hast du "power" genommen. Woher weiß dein Beispiel bei welchem Gerät es suchen muss?

Test-Beispiel:

Gerätname: ECHO_123
Readings die gezählt werden sollen: alarm_..status

Geht nicht:
{[#"^ECHO_123:alarm..status"]}


EDIT: Die Anforderung ist einfach eine Zahl als Ausgabe. Also bei meinem Beispiel sind z.B. 7 Readings mit dem Namen alarm..status in dem Gerät vorhanden. Und der Code, welcher es am Ende auch sein wird, soll dann einfach zählen wie viele es sind und am Ende eine 7 ausgeben. Mir geht es nicht um die Werte die im Reading stehen.
Titel: Antw:Readings einer bestimmten Art zusammen zählen (Anzahl von Readings)
Beitrag von: Byte09 am 16 Februar 2019, 11:22:44
schon klar, aber willst du die anzahl automatisch in betreffendem device stehen haben , dann würde ich es über besagtes userreading machen , oder willst du diverse Geräte auf anzahl der Readings abfragen , dann ist wohl doif oder ähnliches die beste wahl.

wobei dieses zusätzliche device ( doif ) m.E.  ja im Grunde nicht nötig ist ?!

gruss Byte09

edit: gekürztes userreading:
anzahl1 {my $anz = grep( m/.*/, ( keys %{$hash->{READINGS}} )); return $anz;}
Titel: Antw:Readings einer bestimmten Art zusammen zählen (Anzahl von Readings)
Beitrag von: Ellert am 16 Februar 2019, 11:26:18
Zitat von: 87insane am 16 Februar 2019, 11:16:20
Finde die Idee mit der Aggregation sehr gut. Damit habe ich bisher noch nichts gemacht.

Natürlich geht das nicht und ich habe einen Fehler drin... In deinem Beispiel hast du "power" genommen. Woher weiß dein Beispiel bei welchem Gerät es suchen muss?

Test-Beispiel:

Gerätname: ECHO_123
Readings die gezählt werden sollen: alarm_..status

Geht nicht:
{[#"^ECHO_123:alarm..status"]}


EDIT: Die Anforderung ist einfach eine Zahl als Ausgabe. Also bei meinem Beispiel sind z.B. 7 Readings mit dem Namen alarm..status in dem Gerät vorhanden. Und der Code, welcher es am Ende auch sein wird, soll dann einfach zählen wie viele es sind und am Ende eine 7 ausgeben. Mir geht es nicht um die Werte die im Reading stehen.
Nicht raten, lesen. Deine Syntay ist falsch, s. https://commandref.fhem.de/commandref_DE.html#DOIF_Inhaltsuebersicht analog zum Beispiel mit "Gruenschnitt".
Titel: Antw:Readings einer bestimmten Art zusammen zählen (Anzahl von Readings)
Beitrag von: 87insane am 16 Februar 2019, 11:28:04
Also mein Traum wäre es, einfach ein Reading zu haben innerhalb des betroffenen Gerätes in dem plump die aktuelle Zahl steht.

Ein gerät (welches auch immer) würde ich ungerne dafür extra haben...
Titel: Antw:Readings einer bestimmten Art zusammen zählen (Anzahl von Readings)
Beitrag von: Byte09 am 16 Februar 2019, 11:30:30
Zitat von: 87insane am 16 Februar 2019, 11:28:04
Also mein Traum wäre es, einfach ein Reading zu haben innerhalb des betroffenen Gerätes in dem plump die aktuelle Zahl steht.

Ein gerät (welches auch immer) würde ich ungerne dafür extra haben...

dann verweise ich auf hier:

https://forum.fhem.de/index.php/topic,97471.msg907044.html#msg907044 (https://forum.fhem.de/index.php/topic,97471.msg907044.html#msg907044)

;)

gruss Byte09
Titel: Antw:Readings einer bestimmten Art zusammen zählen (Anzahl von Readings)
Beitrag von: Ellert am 16 Februar 2019, 11:35:54
Zitat von: 87insane am 16 Februar 2019, 11:28:04
Also mein Traum wäre es, einfach ein Reading zu haben innerhalb des betroffenen Gerätes in dem plump die aktuelle Zahl steht.

Ein gerät (welches auch immer) würde ich ungerne dafür extra haben...
Vielleicht gibt ja bald eine DOIF-API.
Titel: Antw:Readings einer bestimmten Art zusammen zählen (Anzahl von Readings)
Beitrag von: Byte09 am 16 Februar 2019, 11:37:17
Zitat von: Ellert am 16 Februar 2019, 11:35:54
Vielleicht gibt ja bald eine DOIF-API.

??? .... und was stellst du dir darunter vor ?

gruss Byte09
Titel: Antw:Readings einer bestimmten Art zusammen zählen (Anzahl von Readings)
Beitrag von: binford6000 am 16 Februar 2019, 11:38:49
Zitat von: 87insane am 16 Februar 2019, 11:28:04
Also mein Traum wäre es, einfach ein Reading zu haben innerhalb des betroffenen Gerätes in dem plump die aktuelle Zahl steht.

Ein gerät (welches auch immer) würde ich ungerne dafür extra haben...

Konkreter zum Vorschlag von Byte09:
anzahl1 {my $anz = grep( m/alarm.*status/, ( keys %{$hash->{READINGS}} )); return $anz;}

VG Sebastian
Titel: Antw:Readings einer bestimmten Art zusammen zählen (Anzahl von Readings)
Beitrag von: 87insane am 16 Februar 2019, 11:46:37
Kleinster Wert der Readings des Devices "abfall", in deren Namen "Gruenschnitt" vorkommt und die mit "_days" enden:

[#sum:"^ECHO_123$":"alarm_.._status$"]



Wenn ich das anpassen will, scheitere ich daran es zu testen. Fhem Comandline sagt auch immer ich habs falsch.
syntax error at (eval 926) line 1, at EOF
Missing right curly or square bracket at (eval 926) line 1, at end of line


Bei Grünschnitt geht er auf die Werte der Readings ein. Bei mir wäre es ja die Anzahl an sich.

@Byte09: Danke für deinen Code. Versuche aber mal beide Lösungen zu verstehen und zu testen.

EDIT: anzahl1 {my $anz = grep( m/alarm.*status/, ( keys %{$hash->{READINGS}} )); return $anz;} --- Das hier einfach in ein Reading packen und natürlich auf mein Gerät anpassen und fertig wäre es?
Titel: Antw:Readings einer bestimmten Art zusammen zählen (Anzahl von Readings)
Beitrag von: Byte09 am 16 Februar 2019, 11:49:32
in ein userreading

attr 'userReadings' des betreffenden devices.

https://wiki.fhem.de/wiki/UserReadings (https://wiki.fhem.de/wiki/UserReadings)

gruss Byte09
Titel: Antw:Readings einer bestimmten Art zusammen zählen (Anzahl von Readings)
Beitrag von: 87insane am 16 Februar 2019, 11:58:12
Mega der kleine Schnippsel von Code und es läuft.

Wann wird das Reading denn immer aktualisiert? Die Berechnung als solche geht schon mal sauber durch :)
Titel: Antw:Readings einer bestimmten Art zusammen zählen (Anzahl von Readings)
Beitrag von: Byte09 am 16 Februar 2019, 11:58:59
Zitat von: 87insane am 16 Februar 2019, 11:58:12
Mega der kleine Schnippsel von Code und es läuft.

Wann wird das Reading denn immer aktualisiert? Die Berechnung als solche geht schon mal sauber durch :)

immer dann , wenn ein beliebiges reading des devices aktualisiert wird

auszug commandref:
ZitatDiese benutzerdefinierte Readings werden bei jeder Aktualisierung der Gerätereadings gesetzt, indem das spezifizierte perl code { <perl code> } ausgeführt wird, und dessen Wert dem Reading zugewiesen wird......


gruss Byte09
Titel: Antw:Readings einer bestimmten Art zusammen zählen (Anzahl von Readings)
Beitrag von: 87insane am 16 Februar 2019, 11:59:54
Also das ist wirklich das, was ich haben wollte. Klein und effektiv! Danke und einen schönen Tag noch!