[Gelöst] Problem mit AT in Verbundung foreach

Begonnen von Gear, 09 Mai 2018, 01:12:09

Vorheriges Thema - Nächstes Thema

Gear

Guten Abend Zusammen,

ich habe ein Problem mit meinem AT.
Das AT soll meine Stromzähler auf 0 setzen und andere sachen.

Fehlermeldung LogFile:
2018.05.07 23:59:59 3: at.Leistungsmessung.SetNull: Unknown command foreach, try help.
Unknown command if($LmDatum, try help.
Unknown command my, try help.
Unknown command my, try help.
Unknown command my, try help.
Unknown command my, try help.
Unknown command if($AktYear, try help.
Unknown command fhem("setreading, try help.
Unknown command fhem("setreading, try help.
Unknown command fhem("set, try help.
Unknown command fhem("set, try help.
Unknown command }
, try help.
Unknown command fhem("setreading, try help.
Unknown command fhem("setreading, try help.
Unknown command fhem("set, try help.
Unknown command fhem("set, try help.
Unknown command }
, try help.
Unknown command fhem("setreading, try help.
Unknown command fhem("setreading, try help.
Unknown command fhem("set, try help.
Unknown command fhem("set, try help.
Unknown command }
, try help.


Hier mein AT:
Internals:
   COMMAND    foreach my $Dev (devspec2array("NAME=.*.Leistungsmessung..*"))
{
  my $LmDatum = ReadingsVal($Dev,'LmDatum',0);
 
  if($LmDatum ne 0)
  {
   my ($AktYear,$AktMonth,$AktDay) = split(/-/, $today);
   my ($OldYear,$OldMonth,$OldDay) = split(/-/, $LmDatum);
   
   my $LmHeute = ReadingsVal($Dev,'LmHeute',0);
   my $LmMonat = ReadingsVal($Dev,'LmMonat',0);
   my $LmJahr = ReadingsVal($Dev,'LmJahr',0);
   
   if($AktYear ne $OldYear)
   {
    fhem("setreading $Dev LmDatum $today");
    fhem("setreading $Dev LmVorJahr $LmJahr");
    fhem("setreading $Dev LmJahr 0");

fhem("set DBLogging addLog $Dev:LmVorJahr !useExcludes");
fhem("set DBLogging addLog $Dev:LmJahr !useExcludes");
   }
   
   if($AktMonth ne $OldMonth)
   {
    fhem("setreading $Dev LmDatum $today");
    fhem("setreading $Dev LmVorMonat $LmMonat");
    fhem("setreading $Dev LmMonat 0");

fhem("set DBLogging addLog $Dev:LmVorMonat !useExcludes");
fhem("set DBLogging addLog $Dev:LmMonat !useExcludes");
   }
   
   if($AktDay ne $OldDay)
   {
    fhem("setreading $Dev LmDatum $today");
    fhem("setreading $Dev LmGestern $LmHeute");
    fhem("setreading $Dev LmHeute 0");

fhem("set DBLogging addLog $Dev:LmGestern !useExcludes");
fhem("set DBLogging addLog $Dev:LmHeute !useExcludes");
   }
  }
}
}
   DEF        *23:59:59 foreach my $Dev (devspec2array("NAME=.*.Leistungsmessung..*"))
{
  my $LmDatum = ReadingsVal($Dev,'LmDatum',0);
 
  if($LmDatum ne 0)
  {
   my ($AktYear,$AktMonth,$AktDay) = split(/-/, $today);
   my ($OldYear,$OldMonth,$OldDay) = split(/-/, $LmDatum);
   
   my $LmHeute = ReadingsVal($Dev,'LmHeute',0);
   my $LmMonat = ReadingsVal($Dev,'LmMonat',0);
   my $LmJahr = ReadingsVal($Dev,'LmJahr',0);
   
   if($AktYear ne $OldYear)
   {
    fhem("setreading $Dev LmDatum $today");
    fhem("setreading $Dev LmVorJahr $LmJahr");
    fhem("setreading $Dev LmJahr 0");

fhem("set DBLogging addLog $Dev:LmVorJahr !useExcludes");
fhem("set DBLogging addLog $Dev:LmJahr !useExcludes");
   }
   
   if($AktMonth ne $OldMonth)
   {
    fhem("setreading $Dev LmDatum $today");
    fhem("setreading $Dev LmVorMonat $LmMonat");
    fhem("setreading $Dev LmMonat 0");

fhem("set DBLogging addLog $Dev:LmVorMonat !useExcludes");
fhem("set DBLogging addLog $Dev:LmMonat !useExcludes");
   }
   
   if($AktDay ne $OldDay)
   {
    fhem("setreading $Dev LmDatum $today");
    fhem("setreading $Dev LmGestern $LmHeute");
    fhem("setreading $Dev LmHeute 0");

fhem("set DBLogging addLog $Dev:LmGestern !useExcludes");
fhem("set DBLogging addLog $Dev:LmHeute !useExcludes");
   }
  }
}
}
   NAME       at.Leistungsmessung.SetNull
   NR         50
   PERIODIC   yes
   RELATIVE   no
   REP        -1
   STATE      Next: 23:59:59
   TIMESPEC   23:59:59
   TRIGGERTIME 1525903199
   TRIGGERTIME_FMT 2018-05-09 23:59:59
   TYPE       at
   READINGS:
     2018-05-09 01:02:24   state           Next: 23:59:59
Attributes:
   DbLogExclude .*



Ich hoffe Ihr könnt mir helfen.

Grüße und Danke
Gear
> ODroid H3 => OMV => Docker => FHEM <
Fritz!Box 7590, Fritz!Repeater 6000, MQTT, RaspberryMatic, Zigbee2MQTT, ESP32, ESP8266, Shelly, Grafana ...
> 3D-Druck <

CoolTux

Du führst Dein Perlcode als FHEM Befehl aus, das funktioniert nicht. Du musst auf die "Perlebene" wechseln.
Perlcode leitest Du mit { ein und beendest ihn mit }


DEF        *23:59:59 { foreach my $Dev (devspec2array("NAME=.*.Leistungsmessung..*"))
                                   ...
                                   }


Allerdings empfehle ich das ganze Konstrukt in eine myUtils zu stecken und dann diese auf zu rufen.
Desweiteren kann Dein Code FHEM blockieren, je nachdem wie lang Deine Schleife läuft. Alles über 1s ist als kritisch an zu sehen.
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

Gear

Ich hatte die { vergessen.... xD
Danke!!

Mit der myUtils hab ich mich bisher noch nicht auseinadergesetzt.
Bin gerade noch am testen und einrichten von FHEM.

Warum blockiert es FHEM nicht, wenn es in der myUtils ist?
> ODroid H3 => OMV => Docker => FHEM <
Fritz!Box 7590, Fritz!Repeater 6000, MQTT, RaspberryMatic, Zigbee2MQTT, ESP32, ESP8266, Shelly, Grafana ...
> 3D-Druck <

CoolTux

Zitat von: Gear am 09 Mai 2018, 11:56:49
Ich hatte die { vergessen.... xD
Danke!!

Mit der myUtils hab ich mich bisher noch nicht auseinadergesetzt.
Bin gerade noch am testen und einrichten von FHEM.

Warum blockiert es FHEM nicht, wenn es in der myUtils ist?

Das hast Du falsch verstanden. Die myUtils ist wegen der Ordnung. In ein at Device so einen riesen Schwalm rein zu schreiben ist eher unübersichtlich. Daher lieber richtig perl in eine Sub auslagern.
Blockieren KANN es so oder so. Das müsstest Du wenn es wirklich länger dauern kann dann an Subprocess auslagern.
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