Raw-Wert eines Counters in ein Reading ?

Begonnen von Bartimaus, 25 Februar 2016, 11:38:40

Vorheriges Thema - Nächstes Thema

CoolTux

Am besten Du gibst mal Dein komplettes DOIF und Deine komplette myUtils Sub
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Bartimaus

Hi,


Internals:
   DEF        ([+:01:00])
   NAME       CounterA
   NR         995
   NTFY_ORDER 50-CounterA
   STATE      initialized
   TYPE       DOIF
   Readings:
     2016-03-02 20:25:23   RAW             OWCOUNT: 1wire_Strom_Gesamt.raw A => 2062361
     2016-03-02 20:25:22   state           initialized
     2016-03-02 20:25:23   timer_1_c1      03.03.2016 20:25:33
   Condition:
     0          DOIF_time_once($hash,$hash->{timer}{0},$wday,"")
   Days:
   Devices:
   Do:
     0:
       0
   Helper:
     globalinit 1
     last_timer 1
     sleeptimer -1
   Itimer:
   Realtime:
     0          20:25:33
   State:
   Time:
     0          +01:00
   Timecond:
     0          0
   Timer:
     0          0
   Timerfunc:
   Timers:
     0           0
Attributes:
   room       Strom
   userReadings RAW { StromCounterA ($name) }


und der MyUtils-Auszug:

### Ermittlung des rohen Counterwertes
sub StromCounterA($)
{
my ($counterwert) = fhem "get 1wire_Strom_Gesamt raw A";
return $counterwert;
}

1;
LG
B.


FHEM@AMD-Ryzen7-5700U@Debian-LXC (ProxmoxHOST), CUL1101,FS20,IT,DS18B20,DS2413(Heizungslogger),DS2423(Stromlogger)Homematic,HM-LAN,ZWave,MiniCULs,Shelly

Bennemannc

Hallo,

warum übergibst Du der Funktion einen Wert ($name) ohne diesen in der Funktion zu nutzen ? Den Wert sollte man vor der Rückgabe mit regexp bearbeiten können - aber da bin ich nicht der Fachmann. Mit regexp breche ich mir auch immer einen ab.

Gruß Christoph
Cubietruck, Fhem 5.8
CC-RT-DN|LC-SW2-FM|RC-12|RC-19|LC-SW4-BA-PCB|LCp-SW1-BA-PCB|ES-PMSw1-Pl|LC-Bl1PBU-FM|PBI-4-FM|CC-VD|CC-TC|SEC-SC(2)|RC-KEY3-B|LC-Sw1PBU-FM|PB-2-FM|WDS100-C6-O|WDC7000|LC-Bl1-FM
Module: Dewpoint,FB_Callmonitor,HCS,Panstamp,at,notify,THRESHOLD,average,DOIF

Bartimaus

Moin,

was ich ehrlich gesagt nicht verstehe, ich übergebe in der MyUtils das Ergebnis aus der Abfrage in die Variable "$counterwert".
Frage ich allerdings diese Variable in dem Userreading ab, zB userReadings RAW { StromCounterA ($counterwert) } so bekomme ich folgende Fehlermeldung:

"Error evaluating CounterA userReading RAW: Global symbol "$counterwert" requires explicit package name at (eval 30327) line 1."

Trage ich aber im Userreading "$name" statt "$counterwert" ein, wird zumindest das unformatierte Ergebnis zurückgeliefert.

Formatiere ich gem. CoolTux Link das Ergebnis in der MyUtils wie folgt:

### Ermittlung des rohen Counterwertes
sub StromCounterA($)
{
my ($name) = fhem "get 1wire_Strom_Gesamt raw A";
return printf("(-?\d+(\.\d+)?)",$name);
}


Bekomme ich korrekterweise "1" als Ergebnis = Reading:RAW zurückgeliefert, weil die 1 aus dem Devicenamen herausgefiltert wird.
Jetzt brauche ich "nur" noch ein anderes regexp....
LG
B.


FHEM@AMD-Ryzen7-5700U@Debian-LXC (ProxmoxHOST), CUL1101,FS20,IT,DS18B20,DS2413(Heizungslogger),DS2423(Stromlogger)Homematic,HM-LAN,ZWave,MiniCULs,Shelly

marvin78

#19
userReadings RAW { StromCounterA ($counterwert) }

damit greifst du nicht auf die Variable zu, sondern du sendest ihren Inhalt (der in dem Fall nicht vorhanden ist - deshalb der Fehler) an die Funktion StromCounterA. Ich denke, du wirst dich ein wenig mit Perl und Programmierung im Allgemeinen auseinandersetzen müssen. Man ruft Funktionen mit Parametern (die einen Inhalt haben) auf und gibt in der Funktion dann Werte zurück (return).

$name enthält in userReadings übrigens den Devicenamen.