Eine einfache Counter Auswertung .... in Perl

Begonnen von AndiB, 01 Januar 2013, 20:09:49

Vorheriges Thema - Nächstes Thema

AndiB

Sali zusammen
in Perl bin ich eine Niete ... schlage mich aber meist mit copy paste durch. Leider stehe ich im Augenblick an. Bitte um Hilfe!

Definition in fhem.cfg:
define 1WireOWFS OWServer 127.0.0.1:4304

#Dies ist der IntegerCounter, welcher den Stromverbrauch in kwh/100 zählt -funktioniert
define S0Stromzaehler OWDevice 1D.02D50D000000 120
attr S0Stromzaehler room Strommanagment

#Ein dummy Device, welches mir den alten Wert des Counters sichern soll
define S0old dummy  
set S0old 0

#Ein dummy Device, welches mir den Verbrauch der letzten 4 Minuten zeigen soll
define S0dif dummy
set S0dif 0

# Die Berechnung und das setzen der Dummydevices alle 4 Minuten
define BerechnungStromverbrauch at *00:04:00 { my $a = ReadingsVal("S0Stromzaehler","counters.A",0);; my $b = ($a - ReadingsVal("S0old","state",1))/100 ;; fhem "set S0dif $b" ;; fhem "set S0old $a" ;; Log 1, "HelloA $a";; Log 1, "HelloB $b" }


Leider zeigt sich im Log und in den Dummy Devices absolut keine Änderung.
Kann mir jemand auf die Sprünge helfen. Vermutlich geht das ganze auch viel eleganter. Ich habe leider bei meiner Suche im Forum und in Google Groups nichts gefunden.

Jede Hilfe willkommen!

Gruss Andi

FHEM 5.7 development auf Ubuntu 14.04 LTS auf intelnuc i3 installiert. ca.20x1Wire, Solarview, VantagPro2, KNX-EIB, S0 Stromzähler, etc

AndiB

naja .... ich hab noch etwas rumgespielt und auf folgenden funktionierenden skript gekommen.

#Dies ist der IntegerCounter, welcher den Stromverbrauch in kwh/100 zählt -funktioniert
define S0Stromzaehler OWDevice 1D.02D50D000000 120
attr S0Stromzaehler room Strommanagment

#Ein dummy Device, welches mir den Tagesnullpunkt sichert
define S0tag dummy
set S0tag 0

#Ein dummy Device, welches mir den alten Wert des Counters sichern soll
define S0old dummy
set S0old 0

#Ein dummy Device, welches mir den Verbrauch der letzten 4 Minuten zeigen soll
define S0dif dummy
set S0dif 0


#Ein dummy Device, welches mir den Verbrauch des letzten Tagesn zeigen soll
define S0TagesZ dummy
set S0TagesZ 0

#initialisieren von S0tag
define InitS0tagumMitternacht at *00:00:30 { my $d= ReadingsVal("S0Stromzaehler","counters.A",0);; fhem("set S0tag $d");; Log 1, "HelloD-tag $d";;}
define InitS0tagnachStart at +00:00:22 { my $e= ReadingsVal("S0Stromzaehler","counters.A",0);; fhem("set S0tag $e");; Log 1, "HelloE-tag $e";;}

#initialisieren von S0old
define InitS0old at +00:00:20 { my $c= ReadingsVal("S0Stromzaehler","counters.A",0);; fhem("set S0old $c");; Log 1, "HelloC-old $c";;}

#alle 2min den aktuellen und Tages-Stromverbrauch berechnen
define BerechnungStromverbrauch at +*00:02:00 { my $a= ReadingsVal("S0Stromzaehler","counters.A",0);; my $b= ($a - ReadingsVal("S0old","state",1))/100 ;; fhem("set S0dif $b");; fhem("set S0old $a");; Log 1, "HelloA $a";; Log 1, "HelloB $b";; my $f= ($a - ReadingsVal("S0tag","state",1))/100 ;; fhem("set S0TagesZ $f");; Log 1, "HelloF $f";; }

#define BerechnungStromverbrauch notify S0Stromzaehler:counters\.A { my $a= ReadingsVal("S0Stromzaehler","counters.A",0);; my $b= ($a - ReadingsVal("S0old","state",1))/100 ;; fhem("set S0dif $b");; fhem("set S0old $a");; Log 1, "HelloA $a";; Log 1, "HelloB $b";; }



Das "notify" auf der letzten Zeile habe ich nicht zum laufen gebracht, da ein . im Attributnamen mit drin ist. Deshalb der unschöne Ausweg über "at"

Irgendwann wird schöner :)
Gruss Andi
FHEM 5.7 development auf Ubuntu 14.04 LTS auf intelnuc i3 installiert. ca.20x1Wire, Solarview, VantagPro2, KNX-EIB, S0 Stromzähler, etc