Readingsgroup: Value umbenennen

Begonnen von rih, 08 Mai 2026, 12:27:12

Vorheriges Thema - Nächstes Thema

rih

Ist es möglich, die Werte eines Readings in einer Readingsgroup umzubenennen?

Beispiel: mein Reading heißt "Status". Das Reading "Status" kann die Werte "discharging", "charging" und "standby" annehmen. Diese Werte des Reading "Status" möchte ich nun durch "Entlandung", "Aufladung" und "Standby" ersetzen (nur Anzeige!).

Mein Versuch mit attr valueFormat
{discharging => "Entladung", charging => "Aufladung", standby => "Standby"}führte zu keiner Veränderung.
Der Ursprung des Readings ist ein Modul (ZendureLocal). Wie kann ich mein Ziel erreichen? Geht das überhaupt? Habe kein passendes Beispiel gefunden.
Ein Userreading ist auch nicht zielführend, damit kann ich ja nur das Reading selbst umbenennen.

TomLee

Hallo,

so?
{'Status.discharging' => "Entladung", 'Status.charging' => "Aufladung", 'Status.standby' => "Standby"}
Gruß Thomas
   

rih

#2
Nein, funktioniert leider nicht => Bareword not allowed.
Doppelpunkt statt Punkt zwischen Name und Wert half auch nichts.

Auch ein Versuch mittels dem Attribut mapping brachte nichts.

Durch die ganzen Versuche habe ich jetzt ein neues Problem. Aktuell wird mir das Log vollgemüllt:
2026.05.08 13:13:43 1: PERL WARNING: Argument "charging" isn't numeric in division (/) at (eval 50411691) line 1.Keine Ahnung, wo das jetzt herkommt. Habe alle Versuche gelöscht, kommt trotzdem alle 10s, nur die eval-Zahl ist unterschiedlich.
Was für eine Division ist da gemeint? Wie kann ich die Ursache finden?

TomLee

ZitatWie kann ich die Ursache finden?
Zeig doch einfach mal ein vollständiges Copy for forum.fhem.de.

rih

Ist bei deinem Link etwas schief gelaufen?
Stacktrace zeigt:
2026.05.08 13:51:16 1: PERL WARNING: Argument "charging" isn't numeric in division (/) at (eval 50440053) line 1.
2026.05.08 13:51:16 1: stacktrace:
2026.05.08 13:51:16 1:     main::__ANON__                      called by (eval 50440053) (1)
2026.05.08 13:51:16 1:     (eval)                              called by ./FHEM/33_readingsGroup.pm (357)
2026.05.08 13:51:16 1:     main::lookup2                       called by ./FHEM/33_readingsGroup.pm (540)
2026.05.08 13:51:16 1:     main::readingsGroup_value2html      called by ./FHEM/33_readingsGroup.pm (1109)
2026.05.08 13:51:16 1:     main::readingsGroup_2html           called by ./FHEM/33_readingsGroup.pm (1210)
2026.05.08 13:51:16 1:     main::readingsGroup_detailFn        called by ./FHEM/01_FHEMWEB.pm (3468)
2026.05.08 13:51:16 1:     main::FW_devState                   called by ./FHEM/95_Dashboard.pm (903)
2026.05.08 13:51:16 1:     main::Dashboard_BuildGroup          called by ./FHEM/95_Dashboard.pm (802)
2026.05.08 13:51:16 1:     main::Dashboard_BuildGroupWidgets   called by ./FHEM/95_Dashboard.pm (733)
2026.05.08 13:51:16 1:     main::Dashboard_BuildDashboardCenterRow called by ./FHEM/95_Dashboard.pm (676)
2026.05.08 13:51:16 1:     main::Dashboard_BuildDashboardTab   called by ./FHEM/95_Dashboard.pm (556)
2026.05.08 13:51:16 1:     main::Dashboard_SummaryFN           called by ./FHEM/95_Dashboard.pm (398)
2026.05.08 13:51:16 1:     main::Dashboard_CGI                 called by ./FHEM/01_FHEMWEB.pm (1196)
2026.05.08 13:51:16 1:     main::FW_answerCall                 called by ./FHEM/01_FHEMWEB.pm (609)
2026.05.08 13:51:16 1:     main::FW_Read                       called by fhem.pl (3985)
2026.05.08 13:51:16 1:     main::CallFn                        called by fhem.pl (786)
Sieht man da etwas zur Ursache?

rih

Hier ein List der Readingsgroup, falls du das meintest:
Internals:
   CFGFN     
   DEF        SF800pro:<akt_Status:>,p_packState_txt,<>,
SF800pro:<Grid_Ladeleistung:>,p_gridInputPower,<W>,
SF800pro:<Ausgangsleistung:>,p_outputHomePower,<W>,
SF800pro:<OffGrid_Steckdose:>,p_gridOffPower,<W>,
SF800pro:<akt_Kapazität:>,p_electricLevel,<&percnt;>,
SF800pro:<min_Zellspannung:>,bat0_minVol,<V>,
SF800pro:<max_Zellspannung:>,bat0_maxVol,<V>,
SF800pro:<Gesamtspannung:>,p_BatVolt,<V>,
SF800pro:<Temperatur:>,p_hyperTmp_C,<°C>,
SF800pro:<MaxSoc:>,p_socSet_pct,<&percnt;>,
SF800pro:<MinSoc:>,p_minSoc_pct,<&percnt;>,

   FUUID      69e4ff00-f33f-1bc4-6a61-7184280bbf2fefd5
   NAME       Zendure
   NR         99897
   NTFY_ORDER 50-Zendure
   STATE      Initialized
   TYPE       readingsGroup
   changed    0
   mayBeVisible 1
   CONTENT:
     SF800pro   1
   CONTENT2:
   DEVICES:
     ARRAY(0x61e5960)
     ARRAY(0x6319448)
     ARRAY(0x739e958)
     ARRAY(0x6ce0d88)
     ARRAY(0x5781a98)
     ARRAY(0x6afeb30)
     ARRAY(0x68b62d0)
     ARRAY(0x706f7b0)
     ARRAY(0x6825138)
     ARRAY(0x695fc70)
     ARRAY(0x6125ed8)
   fhem:
     lastDefChange 427
     last_update 1778241076.1235
   helper:
     DEF       
     valueFormat {bat0_minVol => $VALUE/100,
bat0_maxVol => $VALUE/100,
p_BatVolt => $VALUE/100,}
     valueStyle {if ($READING eq "p_gridInputPower") {'style="color:red;text-align:right"'}
elsif ($READING eq "p_outputHomePower") {'style="color:orange;text-align:right"'}
elsif ($READING eq "p_gridOffPower") {'style="color:orange;text-align:right"'}
elsif ($READING eq "p_electricLevel") {'style="color:white;text-align:right"'}
elsif ($READING eq "bat0_minVol") {'style="color:white;text-align:right"'}
elsif ($READING eq "bat0_maxVol") {'style="color:white;text-align:right"'}
elsif ($READING eq "p_BatVolt") {'style="color:white;text-align:right"'}
elsif ($READING eq "p_hyperTmp_C") {'style="color:white;text-align:right"'}
elsif ($READING eq "p_socSet_pct") {'style="color:white;text-align:right"'}
elsif ($READING eq "p_minSoc_pct") {'style="color:white;text-align:right"'}
elsif ($READING eq "p_packState_txt") {'style="color:white;text-align:right"'}}
     positions:
       SF800pro.bat0_maxVol 7:2
       SF800pro.bat0_minVol 6:2
       SF800pro.p_BatVolt 8:2
       SF800pro.p_electricLevel 5:2
       SF800pro.p_gridInputPower 2:2
       SF800pro.p_gridOffPower 4:2
       SF800pro.p_hyperTmp_C 9:2
       SF800pro.p_minSoc_pct 11:2
       SF800pro.p_outputHomePower 3:2
       SF800pro.p_packState_txt 1:2
       SF800pro.p_socSet_pct 10:2
     recalc:
       undef
       undef
       ARRAY(0x59a25e0)
     values:
       formated:
         undef
         undef
         ARRAY(0x61835d0)
       orig:
         undef
         undef
         ARRAY(0x6c183a8)
       prefixsuffix:
         undef
         undef
         ARRAY(0x69df230)
Attributes:
   group      Zendure
   valueFormat {bat0_minVol => $VALUE/100,
bat0_maxVol => $VALUE/100,
p_BatVolt => $VALUE/100,}
   valueStyle {if ($READING eq "p_gridInputPower") {'style="color:red;text-align:right"'}
elsif ($READING eq "p_outputHomePower") {'style="color:orange;text-align:right"'}
elsif ($READING eq "p_gridOffPower") {'style="color:orange;text-align:right"'}
elsif ($READING eq "p_electricLevel") {'style="color:white;text-align:right"'}
elsif ($READING eq "bat0_minVol") {'style="color:white;text-align:right"'}
elsif ($READING eq "bat0_maxVol") {'style="color:white;text-align:right"'}
elsif ($READING eq "p_BatVolt") {'style="color:white;text-align:right"'}
elsif ($READING eq "p_hyperTmp_C") {'style="color:white;text-align:right"'}
elsif ($READING eq "p_socSet_pct") {'style="color:white;text-align:right"'}
elsif ($READING eq "p_minSoc_pct") {'style="color:white;text-align:right"'}
elsif ($READING eq "p_packState_txt") {'style="color:white;text-align:right"'}}


TomLee

Wenn Du das Attribut valueFormat löschst, kommt dann noch die Meldung?
Bist Dir sicher das in $VALUE ein numerischer Wert steht und nicht charging?

rih

Ok, wenn ich das Attribut valueFormat lösche, dann ist die Fehlermeldung weg.
Aber diese 3 Readings, welche ich da durch 100 dividiere, haben doch nichts mit dem Problem-Reading Status zu tun (steht ja auch nicht mehr drin im valueFormat)? Die 3 Readings werden auch wie gewollt korrekt angezeigt. Da stehen numerische Werte drin. Nur im Reading Status natürlich nicht (String), aber das steht wie schon geschrieben nicht mehr drin in valueFormat.

rih

Sobald ich die 3 Readings wieder mittels valueFormat formatiere, erscheint die Fehlermeldung wieder. Das hat doch aber vor meinen Versuchen mit dem Reading "Status" einwandfrei funktioniert!?

TomLee

Das valueFormat wird für jede Zeile in der DEF ausgeführt. Man muss dafür sorgen das es nur bei bat0_minVol,bat0_maxVol und p_BatVolt greift, so wie Du das auch in valueStyle machst.

Vorschlag:

{($READING =~ /(bat0_minVol|bat0_maxVol|p_BatVolt)/ ? $VALUE / 100 : $VALUE)}