update readingsGroup (zeilen/spalten summe,min,max,durchschnitt,...)

Begonnen von justme1968, 04 Mai 2015, 00:45:25

Vorheriges Thema - Nächstes Thema

C0mmanda

Hier steht nochmal etwas mehr im Stacktrace:

2016.04.26 14:31:11 1: readingsUpdate(Verbrauch,ATotal,0.93) missed to call readingsBeginUpdate first.
2016.04.26 14:32:21 1: readingsUpdate(Verbrauch,KWh,368.53) missed to call readingsBeginUpdate first.
2016.04.26 14:32:21 1: readingsUpdate(Verbrauch,ATotal,0.93) missed to call readingsBeginUpdate first.
2016.04.26 14:32:30 1: PERL WARNING: Odd number of elements in anonymous hash at (eval 60985) line 1.
2016.04.26 14:32:30 3: stacktrace:
2016.04.26 14:32:30 3:     main::__ANON__                      called by (eval 60985) (1)
2016.04.26 14:32:30 3:     (eval)                              called by ./FHEM/33_readingsGroup.pm (341)
2016.04.26 14:32:30 3:     main::lookup2                       called by ./FHEM/33_readingsGroup.pm (522)
2016.04.26 14:32:30 3:     main::readingsGroup_value2html      called by ./FHEM/33_readingsGroup.pm (997)
2016.04.26 14:32:30 3:     main::readingsGroup_2html           called by ./FHEM/33_readingsGroup.pm (1086)
2016.04.26 14:32:30 3:     main::readingsGroup_detailFn        called by ./FHEM/01_FHEMWEB.pm (2739)
2016.04.26 14:32:30 3:     main::FW_devState                   called by ./FHEM/01_FHEMWEB.pm (1533)
2016.04.26 14:32:30 3:     main::FW_showRoom                   called by ./FHEM/01_FHEMWEB.pm (897)
2016.04.26 14:32:30 3:     main::FW_answerCall                 called by ./FHEM/01_FHEMWEB.pm (446)
2016.04.26 14:32:30 3:     main::FW_Read                       called by fhem.pl (3164)
2016.04.26 14:32:30 3:     main::CallFn                        called by fhem.pl (658)
2016.04.26 14:32:30 1: PERL WARNING: Odd number of elements in anonymous hash at (eval 60987) line 1.
2016.04.26 14:32:30 3: stacktrace:
2016.04.26 14:32:30 3:     main::__ANON__                      called by (eval 60987) (1)
2016.04.26 14:32:30 3:     (eval)                              called by ./FHEM/33_readingsGroup.pm (341)
2016.04.26 14:32:30 3:     main::lookup2                       called by ./FHEM/33_readingsGroup.pm (522)
2016.04.26 14:32:30 3:     main::readingsGroup_value2html      called by ./FHEM/33_readingsGroup.pm (997)
2016.04.26 14:32:30 3:     main::readingsGroup_2html           called by ./FHEM/33_readingsGroup.pm (1086)
2016.04.26 14:32:30 3:     main::readingsGroup_detailFn        called by ./FHEM/01_FHEMWEB.pm (2739)
2016.04.26 14:32:30 3:     main::FW_devState                   called by ./FHEM/01_FHEMWEB.pm (1533)
2016.04.26 14:32:30 3:     main::FW_showRoom                   called by ./FHEM/01_FHEMWEB.pm (897)
2016.04.26 14:32:30 3:     main::FW_answerCall                 called by ./FHEM/01_FHEMWEB.pm (446)
2016.04.26 14:32:30 3:     main::FW_Read                       called by fhem.pl (3164)
2016.04.26 14:32:30 3:     main::CallFn                        called by fhem.pl (658)
2016.04.26 14:32:30 1: PERL WARNING: Odd number of elements in anonymous hash at (eval 60988) line 1.
2016.04.26 14:32:30 3: stacktrace:
2016.04.26 14:32:30 3:     main::__ANON__                      called by (eval 60988) (1)
2016.04.26 14:32:30 3:     (eval)                              called by ./FHEM/33_readingsGroup.pm (341)
2016.04.26 14:32:30 3:     main::lookup2                       called by ./FHEM/33_readingsGroup.pm (522)
2016.04.26 14:32:30 3:     main::readingsGroup_value2html      called by ./FHEM/33_readingsGroup.pm (997)
2016.04.26 14:32:30 3:     main::readingsGroup_2html           called by ./FHEM/33_readingsGroup.pm (1086)
2016.04.26 14:32:30 3:     main::readingsGroup_detailFn        called by ./FHEM/01_FHEMWEB.pm (2739)
2016.04.26 14:32:30 3:     main::FW_devState                   called by ./FHEM/01_FHEMWEB.pm (1533)
2016.04.26 14:32:30 3:     main::FW_showRoom                   called by ./FHEM/01_FHEMWEB.pm (897)
2016.04.26 14:32:30 3:     main::FW_answerCall                 called by ./FHEM/01_FHEMWEB.pm (446)
2016.04.26 14:32:30 3:     main::FW_Read                       called by fhem.pl (3164)
2016.04.26 14:32:30 3:     main::CallFn                        called by fhem.pl (658)
2016.04.26 14:32:30 1: PERL WARNING: Odd number of elements in anonymous hash at (eval 60990) line 1.
2016.04.26 14:32:30 3: stacktrace:
2016.04.26 14:32:30 3:     main::__ANON__                      called by (eval 60990) (1)
2016.04.26 14:32:30 3:     (eval)                              called by ./FHEM/33_readingsGroup.pm (341)
2016.04.26 14:32:30 3:     main::lookup2                       called by ./FHEM/33_readingsGroup.pm (522)
2016.04.26 14:32:30 3:     main::readingsGroup_value2html      called by ./FHEM/33_readingsGroup.pm (997)
2016.04.26 14:32:30 3:     main::readingsGroup_2html           called by ./FHEM/33_readingsGroup.pm (1086)
2016.04.26 14:32:30 3:     main::readingsGroup_detailFn        called by ./FHEM/01_FHEMWEB.pm (2739)
2016.04.26 14:32:30 3:     main::FW_devState                   called by ./FHEM/01_FHEMWEB.pm (1533)
2016.04.26 14:32:30 3:     main::FW_showRoom                   called by ./FHEM/01_FHEMWEB.pm (897)
2016.04.26 14:32:30 3:     main::FW_answerCall                 called by ./FHEM/01_FHEMWEB.pm (446)
2016.04.26 14:32:30 3:     main::FW_Read                       called by fhem.pl (3164)
2016.04.26 14:32:30 3:     main::CallFn                        called by fhem.pl (658)
2016.04.26 14:32:30 1: PERL WARNING: Odd number of elements in anonymous hash at (eval 60991) line 1.
2016.04.26 14:32:30 3: stacktrace:
2016.04.26 14:32:30 3:     main::__ANON__                      called by (eval 60991) (1)
2016.04.26 14:32:30 3:     (eval)                              called by ./FHEM/33_readingsGroup.pm (341)
2016.04.26 14:32:30 3:     main::lookup2                       called by ./FHEM/33_readingsGroup.pm (522)
2016.04.26 14:32:30 3:     main::readingsGroup_value2html      called by ./FHEM/33_readingsGroup.pm (997)
2016.04.26 14:32:30 3:     main::readingsGroup_2html           called by ./FHEM/33_readingsGroup.pm (1086)
2016.04.26 14:32:30 3:     main::readingsGroup_detailFn        called by ./FHEM/01_FHEMWEB.pm (2739)
2016.04.26 14:32:30 3:     main::FW_devState                   called by ./FHEM/01_FHEMWEB.pm (1533)
2016.04.26 14:32:30 3:     main::FW_showRoom                   called by ./FHEM/01_FHEMWEB.pm (897)
2016.04.26 14:32:30 3:     main::FW_answerCall                 called by ./FHEM/01_FHEMWEB.pm (446)
2016.04.26 14:32:30 3:     main::FW_Read                       called by fhem.pl (3164)
2016.04.26 14:32:30 3:     main::CallFn                        called by fhem.pl (658)
2016.04.26 14:32:30 1: PERL WARNING: Odd number of elements in anonymous hash at (eval 60993) line 1.
2016.04.26 14:32:30 3: stacktrace:
2016.04.26 14:32:30 3:     main::__ANON__                      called by (eval 60993) (1)
2016.04.26 14:32:30 3:     (eval)                              called by ./FHEM/33_readingsGroup.pm (341)
2016.04.26 14:32:30 3:     main::lookup2                       called by ./FHEM/33_readingsGroup.pm (522)
2016.04.26 14:32:30 3:     main::readingsGroup_value2html      called by ./FHEM/33_readingsGroup.pm (997)
2016.04.26 14:32:30 3:     main::readingsGroup_2html           called by ./FHEM/33_readingsGroup.pm (1086)
2016.04.26 14:32:30 3:     main::readingsGroup_detailFn        called by ./FHEM/01_FHEMWEB.pm (2739)
2016.04.26 14:32:30 3:     main::FW_devState                   called by ./FHEM/01_FHEMWEB.pm (1533)
2016.04.26 14:32:30 3:     main::FW_showRoom                   called by ./FHEM/01_FHEMWEB.pm (897)
2016.04.26 14:32:30 3:     main::FW_answerCall                 called by ./FHEM/01_FHEMWEB.pm (446)
2016.04.26 14:32:30 3:     main::FW_Read                       called by fhem.pl (3164)
2016.04.26 14:32:30 3:     main::CallFn                        called by fhem.pl (658)
2016.04.26 14:32:30 1: PERL WARNING: Odd number of elements in anonymous hash at (eval 60994) line 1.
2016.04.26 14:32:30 3: stacktrace:
2016.04.26 14:32:30 3:     main::__ANON__                      called by (eval 60994) (1)
2016.04.26 14:32:30 3:     (eval)                              called by ./FHEM/33_readingsGroup.pm (341)
2016.04.26 14:32:30 3:     main::lookup2                       called by ./FHEM/33_readingsGroup.pm (522)
2016.04.26 14:32:30 3:     main::readingsGroup_value2html      called by ./FHEM/33_readingsGroup.pm (997)
2016.04.26 14:32:30 3:     main::readingsGroup_2html           called by ./FHEM/33_readingsGroup.pm (1086)
2016.04.26 14:32:30 3:     main::readingsGroup_detailFn        called by ./FHEM/01_FHEMWEB.pm (2739)
2016.04.26 14:32:30 3:     main::FW_devState                   called by ./FHEM/01_FHEMWEB.pm (1533)
2016.04.26 14:32:30 3:     main::FW_showRoom                   called by ./FHEM/01_FHEMWEB.pm (897)
2016.04.26 14:32:30 3:     main::FW_answerCall                 called by ./FHEM/01_FHEMWEB.pm (446)
2016.04.26 14:32:30 3:     main::FW_Read                       called by fhem.pl (3164)
2016.04.26 14:32:30 3:     main::CallFn                        called by fhem.pl (658)
2016.04.26 14:32:30 1: PERL WARNING: Odd number of elements in anonymous hash at (eval 60996) line 1.
2016.04.26 14:32:30 3: stacktrace:
2016.04.26 14:32:30 3:     main::__ANON__                      called by (eval 60996) (1)
2016.04.26 14:32:30 3:     (eval)                              called by ./FHEM/33_readingsGroup.pm (341)
2016.04.26 14:32:30 3:     main::lookup2                       called by ./FHEM/33_readingsGroup.pm (522)
2016.04.26 14:32:30 3:     main::readingsGroup_value2html      called by ./FHEM/33_readingsGroup.pm (997)
2016.04.26 14:32:30 3:     main::readingsGroup_2html           called by ./FHEM/33_readingsGroup.pm (1086)
2016.04.26 14:32:30 3:     main::readingsGroup_detailFn        called by ./FHEM/01_FHEMWEB.pm (2739)
2016.04.26 14:32:30 3:     main::FW_devState                   called by ./FHEM/01_FHEMWEB.pm (1533)
2016.04.26 14:32:30 3:     main::FW_showRoom                   called by ./FHEM/01_FHEMWEB.pm (897)
2016.04.26 14:32:30 3:     main::FW_answerCall                 called by ./FHEM/01_FHEMWEB.pm (446)
2016.04.26 14:32:30 3:     main::FW_Read                       called by fhem.pl (3164)
2016.04.26 14:32:30 3:     main::CallFn                        called by fhem.pl (658)
2016.04.26 14:32:38 1: readingsUpdate(Verbrauch,VoltAVG,232.93) missed to call readingsBeginUpdate first.
2016.04.26 14:32:38 1: readingsUpdate(Verbrauch,ATotal,0.93) missed to call readingsBeginUpdate first.
2016.04.26 14:32:57 1: readingsUpdate(Verbrauch,KWh,368.53) missed to call readingsBeginUpdate first.
2016.04.26 14:32:57 1: readingsUpdate(Verbrauch,ATotal,0.92) missed to call readingsBeginUpdate first.

C0mmanda

Ich habe die Fehlermeldung erst einmal wegbekommen, allerdings ist das auch keine schöne Lösung.

Ich hatte die Einheiten der readings (W, kWh, A, V) ja im attr valueSuffix hinterlegt, so wie es eigentlich auch sein sollte.
Dadurch habe ich jedoch die ganzen Fehlermeldungen bekommen.

Nun habe ich die Einheiten mal testweise mit ins valueFormat mit reingepackt ( A => "%.2f A", KWh => "%.2f kWh" usw) und die Fehlermeldung ist weg.

Jetzt bekomme ich natürlich diese Fehlermeldung:

2016.04.26 17:40:37 1: PERL WARNING: Argument "233.32 V" isn't numeric in sprintf at ./FHEM/33_readingsGroup.pm line 525.


Jedoch weitaus seltener und das Log wird nicht geflutet.

Dies nur zur Info, an einer Lösung wäre ich dennoch interessiert. Scheint ja irgendwie mit attr valueSuffix zusammen zu hängen?!?!

Danke.

grtz
CmdA

awex102

#32
Hallo,

ich stehe auf dem Schlauch:

Ich habe folgende readingsGroup angelegt:

.*:Daily.Energy  .*:AC.Power.Fast

Damit erhalte ich die Werte von zwei Wechselrichtern, die ich nun summieren möchte.

Also sum(). Ich kriege es aber nicht hin das jeweils für die beiden getrennt jeweils die summe ausgegeben wird.

.*:Daily.Energy WechselrichterGroup:$sum()  .*:AC.Power.Fast WechselrichterGroup:$sum()

Welche "Koordinaten" muss ich der $sum Funktion mitgeben?

Aktuell sehe ich im Webfrontend:

Wechselrichter1:Daily.Energy 1
Wechselrichter2:Daily.Energy 1
WechselrichterGroup:sum 2
Wechselrichter1:AC.Power.Fast 1
Wechselrichter2:AC.Power.Fast 1
WechselrichterGroup:sum 6

Danke und Gruß!

justme1968

je nach dem wie es aussehen soll. spaltenweise z.b. so:

.*:Daily.Energy,AC.Power.Fast
<hr>
WechselrichterGroup:<&Sigma;>,$sum(:1),$sum(:2)


so wie bei dir einspaltig z.b. so:Wechselrichter.:Daily.Energy WechselrichterGroup:$sum(1..$ROW)  Wechselrichter.:AC.Power.Fast WechselrichterGroup:$sum($ROW-2..$ROW)das hat aber für den zweiten block den nachteil das die anzahl der geräte (2) fest eingetragen werden muss.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

sz_wolfi

#34
Zitat von: C0mmanda am 26 April 2016, 17:45:06

Jetzt bekomme ich natürlich diese Fehlermeldung:

2016.04.26 17:40:37 1: PERL WARNING: Argument "233.32 V" isn't numeric in sprintf at ./FHEM/33_readingsGroup.pm line 525.


ich habe ein aehnliches Problem - und kann es nicht loesen:

ich habe mehrere Verbrauchsmesser und will als letzte Zeile die Summe anzeigen:


defmod rg_StromVerbrauch readingsGroup < Device: >,<%measure_power>,<%measure_power_meter>\
ALWAYS_ON:power,energy \
DIMMER_OFFICE:power,energy\
STECKER_1:power,energy\
<hr>\
rg_StromVerbrauch:<Summe:>,$sum(:1)@power_total,$sum(:2)@energy_total
attr rg_StromVerbrauch group grp_Stromverbrauch
attr rg_StromVerbrauch mapping {"ALWAYS_ON"=>"IT+NASBOX","STECKER_1"=>"LG-MONITOR","DIMMER_OFFICE"=>"Beleuchtung"}
attr rg_StromVerbrauch room OFFICE
attr rg_StromVerbrauch valueFormat { my $val=$NUM;; my $formatted_val;; $formatted_val = sprintf("%4.2f", $val);; return $formatted_val;; }
attr rg_StromVerbrauch valueStyle style="text-align:right;; font-weight:bold;;"
attr rg_StromVerbrauch valueSuffix {"voltage"=>" V","current"=>" A","power"=>" W","energy"=>" kWh","power_total"=>" W","energy_total"=>" kWh"}


Es funktioniert ALLEs wie gewuenscht, nur kommen im log immer diese Zeilen:


2019.10.16 12:34:34 1: PERL WARNING: Argument "83.268 W" isn't numeric in subroutine entry at (eval 1821225) line 1.
2019.10.16 12:34:34 1: PERL WARNING: Argument "0 W" isn't numeric in subroutine entry at (eval 1821225) line 1.
2019.10.16 12:34:34 1: PERL WARNING: Argument "56.606 W" isn't numeric in subroutine entry at (eval 1821225) line 1.
2019.10.16 12:34:34 1: PERL WARNING: Argument "1854.035 kWh previous: 1854.028 delta_time: 300 s" isn't numeric in subroutine entry at (eval 1821229) line 1.
2019.10.16 12:34:34 1: PERL WARNING: Argument "98.4 kWh previous: 98.4 delta_time: 1800 s" isn't numeric in subroutine entry at (eval 1821229) line 1.
2019.10.16 12:34:34 1: PERL WARNING: Argument "153.87 kWh previous: 153.865 delta_time: 300 s" isn't numeric in subroutine entry at (eval 1821229) line 1.


ich habe das 'valueFormat' rel. einfach gemacht - mit debug getestet - kommen nur Zahlen zurueck:


{ my $val=$NUM; my $formatted_val; $formatted_val = sprintf("%4.2f", $val); return $formatted_val; }


valueSuffix - pinselt dann wieder die Einheiten dran:


{"voltage"=>" V","current"=>" A","power"=>" W","energy"=>" kWh","power_total"=>" W","energy_total"=>" kWh"}



ABER:
Die PERL-Meldungen sagen mir, dass die Summen-Funktion NICHT auf die mit ValueStyle-formattierten Readings zugreift,
sondern auf die 'rohen' Readings vom Gerät:


Argument "1854.035 kWh previous: 1854.028 delta_time: 300 s" isn't numeric in subroutine entry at (eval 1821323) line 1.


...so melden die Aeotec-Teile ihren Verbrauchszähler im Reading - raw.
D.h. die sum-Funktion von 'readingsGroup' - muesste auf $NUM statt $VALUE zum Summieren zugreifen.

oder ich muss fuer alle Sensoren userReadings bauen, die die Einheiten+Text vorab schon abschneiden.
(will ich eigentlich vermeiden)

...AH - EDIT: --- mit userReadings an allen beteiligten Devices geht natürlich der Fehler weg.
einfach jedem Strommess-Device so ein Satz Readings einbauen - hier nur beispielhaft an einem Device:


attr STECKER_1 userReadings energyNum {return ReadingsNum("$name","energy",0);;},powerNum {return ReadingsNum("$name","power",0);;}


...und dann in der ReadingsGroup statt 'energy' -> 'energyNum' und statt 'power' -> 'powerNum' lesen/summieren ...

KNUT345

Hallo Zusammen,
ich wollte ähnliches machen, Rechnen mit power,
aber auch bei mir gibt es Geräte die das Reading mit und ohne 'W' liefern
und dann kommt es zu genau den vorgenannten Fehlermeldungen.
Zitat
2022.02.06 15:13:09 1: PERL WARNING: Argument "0.00 W" isn't numeric in subroutine entry at (eval 9210503) line 1.
2022.02.06 15:13:09 1: PERL WARNING: Argument "5.22 W" isn't numeric in subroutine entry at (eval 9210503) line 1.
2022.02.06 15:13:09 1: PERL WARNING: Argument "26.60 W" isn't numeric in subroutine entry at (eval 9210503) line 1.
Jetzt habe ich eingangs gelesen, dass man auch eine Regex einsetzen könnte

rg_Statistik_Steckdosen:,$scalar@<#>,<>,$sum(:3)

Die Umsetzung ist mir aber nicht klar.

Ok, die Variante mit dem Hilfs-Reading ist mir klar und habe ich an anderer Stelle schon verwendet,
aber hier habe ich eine Vielzahl von Geräten und da hätte so eine Regex schon mehr Charm.

Danke im Voraus
Knut

justme1968

einfach in der definition der readingsGroup :d an die reading namen anhängen.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

KNUT345


KNUT345

Ok, ganz so einfach geht es doch nicht, denn
Ich habe etwas getrickst.
Ich wollte die Leistung meiner Steckdosen einfach addieren,
da ich seit kurzem ein Balkonkraftwerk an einer Steckdose habe.
Und da dachte ich mir, alles kein Problem wenn da nur -power kommt.
Um das zu erreichen habe ich ein Dummy erzeugt, dort das Reading invertiert und
dann eben in einer Funktion in myUtils entsprechend umgeleitet.

..Steckdose6X.{1,2}):voltage:d,power@{PowerOfDevice($DEVICE)}:d,statMyEnergyDay,..
<hr>
rg_Statistik_Steckdosen:<Summe>,$scalar@<#>,$sum(:2),$sum(:3)


# Namen des Power-Device aus device ableiten
sub PowerOfDevice ($)
{
  my ($DEVICE) = @_;
  if ($DEVICE eq "Steckdose10") {
    return $DEVICE."_green";
  } else {
    return $DEVICE;
  }
}

Zitat
2022.02.07 20:43:43 1: PERL WARNING: Unescaped left brace in regex is deprecated, passed through in regex; marked by <-- HERE in m/^power@{ <-- HERE PowerOfDevice($DEVICE)}:d,statMyEnergyDay,statMyEnergyDayLast,statMyEnergyMonth,statMyEnergyYear,myEnergy,state$/ at ./FHEM/33_readingsGroup.pm line 1076.
hingegen

..Steckdose6X.{1,2}):voltage:d,power:d@{PowerOfDevice($DEVICE)},statMyEnergyDay,..
<hr>
rg_Statistik_Steckdosen:<Summe>,$scalar@<#>,$sum(:2),$sum(:3)

liefert
Zitat
2022.02.07 20:47:57 1: PERL WARNING: Argument "0.00 W" isn't numeric in subroutine entry at (eval 9585789) line 1.
2022.02.07 20:47:57 1: PERL WARNING: Argument "2.21 W" isn't numeric in subroutine entry at (eval 9585789) line 1.
2022.02.07 20:47:57 1: PERL WARNING: Argument "4.64 W" isn't numeric in subroutine entry at (eval 9585789) line 1.

Was mich auch noch interessieren würde.
Wie bekomme ich die ValueFormat auch in die Ergebniszeile? (siehe Anhang)

Grüße


KNUT345

Ok, wer lesen kann ist klar im Vorteil.
Zitat
...und lassen sich über valuePrefix, valueSuffix, valueFormat und valueStyle in der Darstellung beeinflussen...

Auch etwas rumprobieren hilft.

...Steckdose6X.{1,2}):voltage:d,power:d@{PowerOfDevice($DEVICE)},statMyEnergyDay,...
rg_Statistik_Steckdosen:<Summe>,$scalar,$sum(:2)@SUM2,$sum(:3)@SUM3


und dann mit valueFormat

{scalar => '{sprintf("Σ %d",$VALUE)}',
SUM2 => '{sprintf("%.1f W",$VALUE)}',
SUM3 => '{sprintf("%.1f Wh",$VALUE)}',
usw.}


Ein klasse Tool.