FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Gear am 09 Mai 2018, 01:12:09

Titel: [Gelöst] Problem mit AT in Verbundung foreach
Beitrag von: Gear am 09 Mai 2018, 01:12:09
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
Titel: Antw:Problem mit AT in Verbundung foreach
Beitrag von: CoolTux am 09 Mai 2018, 04:39:42
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.
Titel: Antw:Problem mit AT in Verbundung foreach
Beitrag 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?
Titel: Antw:Problem mit AT in Verbundung foreach
Beitrag von: CoolTux am 09 Mai 2018, 11:59:58
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.