[gelöst]Perl bringt Fehlermeldungen bei at Funktion

Begonnen von wildea, 25 Januar 2017, 13:47:56

Vorheriges Thema - Nächstes Thema

wildea

Hallo Leute brauche mal eure Hilfe,

Ich habe diese Funktion für meine OWL im Internet gefunden und würde diese gerne bei mir umsetzen. Ich habe die Funktion in einen at eingefügt und bekomme leider eine Fehlermeldung und weiß nicht wo der Fehler liegt. Vielleicht scheut einer von euch Perl Spezies ja drauf und erkennt schnell den Fehler.

Hier der Code der im at drin steht:

define update_stromzaehler at +*00:00:05 {my $mode=InternalVal(,,OWL_energy","MODE",0);;;;\
if ( $mode eq ,,live data" ) {\
my $leistung_vorher=ReadingsVal(,,stromzaehler","leistung",0)+0;;;; my $leistung_jetzt=ReadingsVal(,,OWL_energy","W",0);;;; $leistung_jetzt =~ s/[^0-9\.]//g;;;; my $timestamp_jetzt=time();;;;my $differenz=$timestamp_jetzt-\
ReadingsVal(,,stromzaehler","zaehler_leistung_timestamp",$timestamp_jetzt);;;;\
my $energie_diff_kwh=($leistung_vorher*$differenz)/3600/1000;;;; my $energie_tag=$energie_diff_kwh+ReadingsVal(,,stromzaehler","energie_tag",0);;;;\
my $energie_gesamt=$energie_diff_kwh+ReadingsVal(,,stromzaehler","energie_gesamt",0);;;; my ($s, $mi, $h, $tag_jetzt, $mo, $y, $w, $yd, $st)=localtime(time);;;;\
my $zaehler_tag=ReadingsVal(,,stromzaehler","zaehler_tag",0);;;;\

if ( $tag_jetzt != $zaehler_tag ) {\\
fhem(,,setreading stromzaehler zaehler_tag $tag_jetzt");;;;fhem(,,setreading zusammenfassung_stromzaehler tag $energie_tag");;;;$energie_tag=0;;;;\
}\
fhem(,,setreading stromzaehler leistung $leistung_jetzt");;;;\
fhem(,,setreading stromzaehler energie_tag $energie_tag");;;;\
fhem(,,setreading stromzaehler energie_gesamt $energie_gesamt");;;;\
fhem(,,setreading stromzaehler zaehler_leistung_timestamp $timestamp_jetzt");;;;\
fhem(,,setreading stromzaehler state ,,.sprintf(,,%.3f",$energie_gesamt)." kWh");;;;}}



Hier die Fehlermeldung aus dem Log


2017.01.25 13:42:38 3: update_stromzaehler: Unknown command {my, try help.

betateilchen

In perl kenne ich doppelte Anführungszeichen oben "" und einfache Anführungszeichen oben ''

Aber Anführungszeichen unten und oben kenne ich nicht... wie um alles in der Welt bearbeitest Du Deine fhem Konfiguration, um das hinzubekommen?
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

wildea

Danke für die schnelle Antwort.

Hab die Funktion aus einem Blog Post kopiert und da ging die Formatierung kaputt. Ich hab den Wald vor lauter Bäumen nicht gesehen mit den "".
Das habe ich jetzt berichtigt bekomme jetzt aber diese Fehlermeldung:

2017.01.25 14:19:54 1: PERL WARNING: Useless use of reference constructor in void context at (eval 14341) line 2.
2017.01.25 14:19:54 3: eval: my $DEV='update_stromzaehler';{my $mode=InternalVal("OWL_energy","MODE",0);;;; if ( $mode eq "live data" ) { my $leistung_vorher=ReadingsVal("stromzaehler","leistung",0)+0;;;; my $leistung_jetzt=ReadingsVal("OWL_energy","W",0);;;; $leistung_jetzt =~ s/[^0-9\.]//g;;;; my $timestamp_jetzt=time();;;;my $differenz=$timestamp_jetzt- ReadingsVal("stromzaehler","zaehler_leistung_timestamp",$timestamp_jetzt);;;; my $energie_diff_kwh=($leistung_vorher*$differenz)/3600/1000;;;; my $energie_tag=$energie_diff_kwh+ReadingsVal("stromzaehler","energie_tag",0);;;; my $energie_gesamt=$energie_diff_kwh+ReadingsVal("stromzaehler","energie_gesamt",0);;;; my ($s, $mi, $h, $tag_jetzt, $mo, $y, $w, $yd, $st)=localtime(time);;;; my $zaehler_tag=ReadingsVal("stromzaehler","zaehler_tag",0);;;;
if ( $tag_jetzt != $zaehler_tag ) {\ fhem("setreading stromzaehler zaehler_tag $tag_jetzt");;;;fhem("setreading zusammenfassung_stromzaehler tag $energie_tag");;;;$energie_tag=0;;;; } fhem("setreading stromzaehler leistung $leistung_jetzt");;;; fhem("setreading stromzaehler energie_tag $energie_tag");;;; fhem("setreading stromzaehler energie_gesamt $energie_gesamt");;;; fhem("setreading stromzaehler zaehler_leistung_timestamp $timestamp_jetzt");;;; fhem("setreading stromzaehler state ".sprintf("%.3f",$energie_gesamt)." kWh");;;;}}

wildea

Hab den Fehler gefunden. War ein \ an einer Stelle wo er nicht hingehört hat.

Danke für dir Hilfe mit den ""

betateilchen

Ein solches Konstrukt gehört sowieso nicht in die Definition eines at, sondern in eine Funktion in der 99_myUtils.pm



sub werteUpdate {
my $mode=InternalVal("OWL_energy","MODE",0);
if ( $mode eq "live data" ) {
  my $leistung_vorher  = ReadingsNum("stromzaehler","leistung",0);
  my $leistung_jetzt   = ReadingsVal("OWL_energy","W",0);
  $leistung_jetzt      =~ s/[^0-9\.]//g;
  my $timestamp_jetzt  = time();
  my $differenz        = $timestamp_jetzt - ReadingsVal("stromzaehler","zaehler_leistung_timestamp",$timestamp_jetzt);
  my $energie_diff_kwh = $leistung_vorher*$differenz/3600/1000;
  my $energie_tag      = $energie_diff_kwh + ReadingsVal("stromzaehler","energie_tag",0);
  my $energie_gesamt   = $energie_diff_kwh + ReadingsVal("stromzaehler","energie_gesamt",0);
  my ($s, $mi, $h, $tag_jetzt, $mo, $y, $w, $yd, $st) = localtime(time);
  my $zaehler_tag      = ReadingsVal("stromzaehler","zaehler_tag",0);
  if ( $tag_jetzt != $zaehler_tag ) {
     fhem("setreading stromzaehler zaehler_tag $tag_jetzt");
fhem("setreading zusammenfassung_stromzaehler tag $energie_tag");
$energie_tag=0;
  }
  fhem("setreading stromzaehler leistung $leistung_jetzt");
  fhem("setreading stromzaehler energie_tag $energie_tag");
  fhem("setreading stromzaehler energie_gesamt $energie_gesamt");
  fhem("setreading stromzaehler zaehler_leistung_timestamp $timestamp_jetzt");
  fhem("setreading stromzaehler state ".sprintf("%.3f",$energie_gesamt)." kWh");}
}
return;
}



und dann wird im at einfach diese Funktion aufgerufen:


define update_stromzaehler at +*00:00:05 { werteUpdate() }


Davon abgesehen macht ein solches at im 5-Sekunden-Abstand ohnehin nicht viel Sinn, sondern belastet nur (unnötigerweise) fhem.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!