In RG ein Userreading in ein anderes desselben Gerätes kopieren

Begonnen von locodriver, 10 Januar 2017, 10:48:52

Vorheriges Thema - Nächstes Thema

locodriver

Hallo, ich hab' nichts passendes für mein Problem gefunden (oder die Suche falsch gefüttert) und bin mit meinen eigenen Versuchen "am Ende".

Ich habe in batteriebetriebenen Geräten u.a. die Tage seit dem letzten Batteriewechsel und die Dauer des Zeitraums davor als Userreading angelegt. Nun soll bei Batteriewechsel nach Klick auf "Batteriewechsel" die akt. Laufzeit in die vorherige kopiert werden und dann die aktuelle auf Null gesetzt werden. Das Rücksetzten auf Null funzt, aber mit dem Kopieren will es nichts werden...
Vielleicht könnt ihr mir den richtigen Tipp geben!?



define Batteriestati readingsGroup <%measure_battery_75>,<Aktiv>,<Batterie (Spannung)>,<akt. Laufzeit>,<vorher>,<Batteriewechsel>
<>,<>,<>,<>,<>,<>,<>,<>,<>,<>
<Kontakte>,<>,<>,<>,<>,<>,<>,<>,<>,<>
WZ_Balkon:Activity,battery,Batteriewechsel,Batteriedauer_alt,<Batteriewechsel>
BD_Fenster:Activity,battery,Batteriewechsel,Batteriedauer_alt,<Batteriewechsel>
...

attr Batteriestati commands {"battery.low"=>"set $DEVICE replaceBatteryForSec 60",'Batteriestati.Batteriewechsel'=>'{ fhem("setreading $DEVICE Batteriedauer_alt".(ReadingsNum($DEVICE,"Batteriewechsel",0))}','Batteriestati.Batteriewechsel'=>'setreading $DEVICE Batteriewechsel 0'}


Die Userreadings lauten z.B.:

Batteriedauer_alt 0

Batteriewechsel 613


Die tägliche Aktualisierung erfolgt nachts mit einem umfangreicheren DOIF:



([04:05])(
{fhem("setreading KU_Sensor Batteriewechsel ". (ReadingsVal("KU_Sensor","Batteriewechsel","")+1))}
{fhem("setreading WZ_Sensor Batteriewechsel ". (ReadingsVal("WZ_Sensor","Batteriewechsel","")+1))}
{fhem("setreading AZ_Sensor Batteriewechsel ". (ReadingsVal("AZ_Sensor","Batteriewechsel","")+1))}
{fhem("setreading BK_Sensor Batteriewechsel ". (ReadingsVal("BK_Sensor","Batteriewechsel","")+1))}
{fhem("setreading BD_Fenster Batteriewechsel ". (ReadingsVal("BD_Fenster","Batteriewechsel","")+1))}
{fhem("setreading BD_Hk4 Batteriewechsel ". (ReadingsVal("BD_Hk4","Batteriewechsel","")+1))}
{fhem("setreading BD_Regler Batteriewechsel ". (ReadingsVal("BD_Regler","Batteriewechsel","")+1))}
{fhem("setreading BD_T6 Batteriewechsel ". (ReadingsVal("BD_T6","Batteriewechsel","")+1))}
{fhem("setreading FL_T6 Batteriewechsel ". (ReadingsVal("FL_T6","Batteriewechsel","")+1))}
{fhem("setreading WZ_Balkon Batteriewechsel ". (ReadingsVal("WZ_Balkon","Batteriewechsel","")+1))}
{fhem("setreading WZ_Hk0 Batteriewechsel ". (ReadingsVal("WZ_Hk0","Batteriewechsel","")+1))}
{fhem("setreading WZ_Hk1 Batteriewechsel ". (ReadingsVal("WZ_Hk1","Batteriewechsel","")+1))}
)


Danke für zielführende Ideen.

Uwe
fhem 6.0 auf Rpi3 Bookworm
HM-LAN-CFG (FW 0.965), HM-MOD-UART, 2x HM-TC-IT-WM-W-EU, 4x HM-Sec-RHS und 3x HM-CC-RT-DN, 6x HM-LC-Bl1-FM mit je 1x Somfy-Motor,
2x HM-LC-SW2-FM für Licht und Lüfter, 2x HM-PB-6-WM55, Alexa, Jeelinkcross, CUL, CUNO2, IR-Blaster

Ellert

Ich würde die Schreibweise erstmal aufräumen.

nicht so
{fhem("setreading KU_Sensor Batteriewechsel ". (ReadingsVal("KU_Sensor","Batteriewechsel","")+1))}
sondern so
setreading KU_Sensor Batteriewechsel {([KU_Sensor:Batteriewechsel]+1)}

und dann vermisse ich das Komma als Befehlstrenner.

locodriver

@Ellert: wo fehlt ein Komma, im "command"-Teil sind die einzelnen Befehle doch durch Kommata getrennt?

Die nächtliche Aktualisierung im DOIF funzt ja auch, werde deine Anregung aber morgen trotzdem mal mal testen, heute habe ich keine Möglichkeit.

OT: Das nächliche Incrementieren kann man sicher auch noch vereinfachen/in einer Anweisung zusammen fassen - aber es tut ja was es soll. ;-)

Uwe
fhem 6.0 auf Rpi3 Bookworm
HM-LAN-CFG (FW 0.965), HM-MOD-UART, 2x HM-TC-IT-WM-W-EU, 4x HM-Sec-RHS und 3x HM-CC-RT-DN, 6x HM-LC-Bl1-FM mit je 1x Somfy-Motor,
2x HM-LC-SW2-FM für Licht und Lüfter, 2x HM-PB-6-WM55, Alexa, Jeelinkcross, CUL, CUNO2, IR-Blaster

Ellert

#3
Zitat{fhem("setreading KU_Sensor Batteriewechsel ". (ReadingsVal("KU_Sensor","Batteriewechsel","")+1))}
{fhem("setreading WZ_Sensor Batteriewechsel ". (ReadingsVal("WZ_Sensor","Batteriewechsel","")+1))}
Das sind zwei FHEM-Befehle, die müssten lt. Doku durch Komma getrennt werden, so
Zitat{fhem("setreading KU_Sensor Batteriewechsel ". (ReadingsVal("KU_Sensor","Batteriewechsel","")+1))},
{fhem("setreading WZ_Sensor Batteriewechsel ". (ReadingsVal("WZ_Sensor","Batteriewechsel","")+1))}

Wenn es klappr ist's ja gut, sieht nur unproduktiv aus. Du wechselst von der FHEM-Ebene auf die Perl-Ebene ({...}) , dann wieder auf die FHEM-Ebene (fhem ...)

locodriver

Ah - jetzt weiß ich, was du meinst... Danke!

Das löst sber noch nicht das eigentliche Problem.

Uwe
fhem 6.0 auf Rpi3 Bookworm
HM-LAN-CFG (FW 0.965), HM-MOD-UART, 2x HM-TC-IT-WM-W-EU, 4x HM-Sec-RHS und 3x HM-CC-RT-DN, 6x HM-LC-Bl1-FM mit je 1x Somfy-Motor,
2x HM-LC-SW2-FM für Licht und Lüfter, 2x HM-PB-6-WM55, Alexa, Jeelinkcross, CUL, CUNO2, IR-Blaster

locodriver

@Ellert: habe jetzt meine "Spaghetticode" aufgeräumt - ist gleich viel übersichtlicher...

Die Sache mit den (angeblich) fehlenden Kommata erklärt sich daraus, dass ich jede Anweisung einzeln geklammert habe und so in einem DOIF-Ausführungsteil quasi einzelne Kommandos entstehen, die mit den Attributen dann einzeln gesteuert werden können (cmd1_1, 1_2, usw.). In dem Fall brauche ich das aber nicht, deshalb hat es auch ohne Kommata gefunzt  ;).

@all: Das eigentliche Problem besteht leider immer noch  :(. Hat jemand 'ne Idee?

Uwe

fhem 6.0 auf Rpi3 Bookworm
HM-LAN-CFG (FW 0.965), HM-MOD-UART, 2x HM-TC-IT-WM-W-EU, 4x HM-Sec-RHS und 3x HM-CC-RT-DN, 6x HM-LC-Bl1-FM mit je 1x Somfy-Motor,
2x HM-LC-SW2-FM für Licht und Lüfter, 2x HM-PB-6-WM55, Alexa, Jeelinkcross, CUL, CUNO2, IR-Blaster