Ansage bei Müllabfuhr fehlerhaft nach Calendarupdate

Begonnen von raspklaus, 14 Februar 2016, 10:30:47

Vorheriges Thema - Nächstes Thema

raspklaus

Hallo zusammen,

das folgende Modul lief bis zum neuen Calendarmodul ohne Probleme und ich habe es deshalb auch nie verändert:

RemovalCheck {
my $RemovalBlack = "off";
my $RemovalBrown = "off";
my $RemovalBlue = "off";
my $RemovalYellow = "off";
my $RemovalToxic = "off";
my $RemovalPaper = "off";
my $RemovalGreen = "off";

my $rcal= fhem("get Abfall text all 4");
my @@events = split ("\n", $rcal);
my $tomorrow = strftime "%d.%m.%y", localtime(time + 86400);

foreach my $event (@events)
{
my @values = split(" ", $event);

if ($values[0] eq $tomorrow)
{
  if ($values[3] eq "Restmüll") {$RemovalBlack = "on"}
  elsif ($values[3] eq "Biomüllabfuhr") {$RemovalBrown = "on"}
  elsif ($values[3] eq "Papiertonne") {$RemovalBlue = "on"}
  elsif ($values[3] eq "Gelber") {$RemovalYellow = "on"}
  elsif ($values[3] eq "Schadstoffsammlung") {$RemovalToxic = "on"}
  elsif ($values[3] eq "Papiersammlung") {$RemovalPaper = "on"}
  elsif ($values[3] eq "Grünabfallsammlung") {$RemovalGreen = "on"}
}
}
fhem("set RemovalBlack $RemovalBlack");
fhem("set RemovalBrown $RemovalBrown");
fhem("set RemovalBlue $RemovalBlue");
fhem("set RemovalYellow $RemovalYellow");
fhem("set RemovalToxic $RemovalToxic");
fhem("set RemovalPaper $RemovalPaper");
fhem("set RemovalGreen $RemovalGreen");
return;
}


Problem ist das :

my $rcal= fhem("get Abfall text all 4");

das habe ich an das neue Calendarmodul angepasst:

get Abfall text next 4

Nun wird keine Auswertung mehr durchgeführt, mit folgender Fehlermeldung:

2016.02.14 10:22:17 3: RemovalCheck return value: No such class RemovalCheckevents at (eval 29576) line 11, near ";
my RemovalCheckevents"
syntax error at (eval 29576) line 11, near "my RemovalCheckevents ="
No such class RemovalCheckvalues at (eval 29576) line 16, near "{
my RemovalCheckvalues"
syntax error at (eval 29576) line 16, near "my RemovalCheckvalues ="
Global symbol "@values" requires explicit package name at (eval 29576) line 18.
Global symbol "@values" requires explicit package name at (eval 29576) line 20.
Global symbol "@values" requires explicit package name at (eval 29576) line 21.
Global symbol "@values" requires explicit package name at (eval 29576) line 22.
Global symbol "@values" requires explicit package name at (eval 29576) line 23.
Global symbol "@values" requires explicit package name at (eval 29576) line 24.
Global symbol "@values" requires explicit package name at (eval 29576) line 25.
Global symbol "@values" requires explicit package name at (eval 29576) line 26.
Bareword "RemovalCheckevents" not allowed while "strict subs" in use at (eval 29576) line 14.


Eingelesen werden die Einträge wie vorher:

15.02.16 06:00 Abfuhrtermin Biomüllabfuhr am 15.02.2016
22.02.16 06:00 Abfuhrtermin Restmüll am 22.02.2016
23.02.16 06:00 Abfuhrtermin Papiertonne am 23.02.2016
29.02.16 06:00 Abfuhrtermin Biomüllabfuhr am 29.02.2016


Ich habe leider keinen Ansatzpunkt weshalb das Ganze nun nicht mehr läuft und wäre euch sehr dankbar wenn ihr mich dabei unterstützen könntet

Danke


Icinger

my @@events = split ("\n", $rcal);

Da gehört nur ein @, oder????

lg, Stefan
Verwende deine Zeit nicht mit Erklärungen. Die Menschen hören (lesen) nur, was sie hören (lesen) wollen. (c) Paulo Coelho

Icinger

Argh........Sag jetzt nicht, du arbeitest in der fhem.cfg mit sowas rum?
Jetzt ins gar kein @ mehr da und lauter doppelte ;;
Verwende deine Zeit nicht mit Erklärungen. Die Menschen hören (lesen) nur, was sie hören (lesen) wollen. (c) Paulo Coelho

raspklaus

#3
Nein, ich arbeite natürlich nicht in der cfg sondern über das Webinterface. In der Beziehung bin ich ja kein Änfanger mehr.

Im Webinterface siehrt es so aus:

RemovalCheck {
my $RemovalBlack = "off";
my $RemovalBrown = "off";
my $RemovalBlue = "off";
my $RemovalYellow = "off";
my $RemovalToxic = "off";
my $RemovalPaper = "off";
my $RemovalGreen = "off";

my $rcal= fhem("get Abfall text next 1");
my @events = split ("\n", $rcal);
my $tomorrow = strftime "%d.%m.%y", localtime(time + 86400);

my @values = split(" ", $event);

if ($values[0] eq $tomorrow)
{
  if ($values[3] eq "Restmüll") {$RemovalBlack = "on"}
  elsif ($values[3] eq "Biomüllabfuhr") {$RemovalBrown = "on"}
  elsif ($values[3] eq "Papiertonne") {$RemovalBlue = "on"}
  elsif ($values[3] eq "Gelber") {$RemovalYellow = "on"}
  elsif ($values[3] eq "Schadstoffsammlung") {$RemovalToxic = "on"}
  elsif ($values[3] eq "Papiersammlung") {$RemovalPaper = "on"}
  elsif ($values[3] eq "Grünabfallsammlung") {$RemovalGreen = "on"}
}

fhem("set RemovalBlack $RemovalBlack");
fhem("set RemovalBrown $RemovalBrown");
fhem("set RemovalBlue $RemovalBlue");
fhem("set RemovalYellow $RemovalYellow");
fhem("set RemovalToxic $RemovalToxic");
fhem("set RemovalPaper $RemovalPaper");
fhem("set RemovalGreen $RemovalGreen");
return;
}


Das @ wird doch durch den Namen des Notifys ersetzt, deshalb die Logausgabe

In der cfg stehen zwei ;;

Sorry, merke gerade, der letzte Logauszug war aus der Testumgebung. War noch im Buffer

Hier die aktuelle Logausgabe:

2016.02.14 14:16:02 4: RemovalCheck exec {
my $RemovalBlack = "off";;
my $RemovalBrown = "off";;
my $RemovalBlue = "off";;
my $RemovalYellow = "off";;
my $RemovalToxic = "off";;
my $RemovalPaper = "off";;
my $RemovalGreen = "off";;

my $rcal= fhem("get Abfall text next 4");;
my RemovalCheckevents = split ("\n", $rcal);;
my $tomorrow = strftime "d.m.y", localtime(time + 86400);;

foreach my $event (RemovalCheckevents)
{
my RemovalCheckvalues = split(" ", $event);;

if ($values[0] eq $tomorrow)
{
  if ($values[3] eq "Restmüll") {$RemovalBlack = "on"}
  elsif ($values[3] eq "Biomüllabfuhr") {$RemovalBrown = "on"}
  elsif ($values[3] eq "Papiertonne") {$RemovalBlue = "on"}
  elsif ($values[3] eq "Gelber") {$RemovalYellow = "on"}
  elsif ($values[3] eq "Schadstoffsammlung") {$RemovalToxic = "on"}
  elsif ($values[3] eq "Papiersammlung") {$RemovalPaper = "on"}
  elsif ($values[3] eq "Grünabfallsammlung") {$RemovalGreen = "on"}
}
}
fhem("set RemovalBlack $RemovalBlack");;
fhem("set RemovalBrown $RemovalBrown");;
fhem("set RemovalBlue $RemovalBlue");;
fhem("set RemovalYellow $RemovalYellow");;
fhem("set RemovalToxic $RemovalToxic");;
fhem("set RemovalPaper $RemovalPaper");;
fhem("set RemovalGreen $RemovalGreen");;
return;;
}
2016.02.14 14:16:02 3: RemovalCheck return value: No such class RemovalCheckevents at (eval 1499) line 11, near ";
my RemovalCheckevents"
syntax error at (eval 1499) line 11, near "my RemovalCheckevents ="
No such class RemovalCheckvalues at (eval 1499) line 16, near "{
my RemovalCheckvalues"
syntax error at (eval 1499) line 16, near "my RemovalCheckvalues ="
Global symbol "@values" requires explicit package name at (eval 1499) line 18.
Global symbol "@values" requires explicit package name at (eval 1499) line 20.
Global symbol "@values" requires explicit package name at (eval 1499) line 21.
Global symbol "@values" requires explicit package name at (eval 1499) line 22.
Global symbol "@values" requires explicit package name at (eval 1499) line 23.
Global symbol "@values" requires explicit package name at (eval 1499) line 24.
Global symbol "@values" requires explicit package name at (eval 1499) line 25.
Global symbol "@values" requires explicit package name at (eval 1499) line 26.
Bareword "RemovalCheckevents" not allowed while "strict subs" in use at (eval 1499) line 14.

raspklaus

Habe jetzt mal versucht wenigstens den ersten Eintrag ins Log zu bringen

foreach my $event (@events)
{Log 1,"Zeile".$event;
my @values = split(" ", $event);


aber da kommt nichts

Icinger

WIE genau hast du das denn definiert?
Bei dieser Länge wäre es mAn sinnvoll, das ganze Konstrukt in die 99_myUtils zu legen.
Verwende deine Zeit nicht mit Erklärungen. Die Menschen hören (lesen) nur, was sie hören (lesen) wollen. (c) Paulo Coelho

raspklaus

#6
Du es hat aber bis letzte Woche funktioniert. Die letzte Müllabfuhr ist noch richtig angesagt worden und auch der Dummy gesetzt.

Durch das Notify werden ja nur die Dummys zur visuellen Kontrolle auf on gesetzt und der Befehl für die Sprachausgabe erzeugt

Ich komme mit dem angeblichen Syntaxerror nicht klar

Das Ganze in die 99_myUtils zu legen wäre zwar schön, aber das kann ich leider noch nicht

Gruss

Klaus

raspklaus


chris1284

schau dir mal das abfall-modul (http://forum.fhem.de/index.php?topic=48237.0) oder calview an. beide extrahieren aus dem calendar erfolgreich werte

dev0

1. Fehler: Arrays werden mit einem @ vor dem Namen deklariert.
2. Fehler: Wenn du Variablen umbenennst (values), dann bitte auch an allen Stellen im Code.
3. Fehler: Du hast kein einziges Kapitel eines x-beliebigen Perl-Buchs gelesen oder verstanden, fragst stattdessen lieber im Forum nach...

raspklaus

Hallo Dev0,

Dann er klär mir doch aber bitte war ich nicht verstanden habe:

zu Fehler 1:

Mit dem Array meinst Du sicherlich my @events
Das ist mit einem @ deklariert

Die vormals als test eingebenen doppel @ stammen aus der Befehlsreferenz  unter Perl Spezials

zu Fehler 2:

Wo benenne ich Variablen um ?

Meinst Du $values[0) und $values[3)
Das ist keine Umbenennung sondern die Position in der Variablen

Bei

15.02.16 06:00 Abfuhrtermin Biomüllabfuhr am 15.02.2016

ist $values[0]  gleich 15.02.2016                         
und
$values[3)  gleich Biomüllabfuhr

also wo liegt das der Fehler ?

Ich habe gelesen

DerJens

Hallo,

auf die Schnelle 3 Dinge:

- Ich hab vor wenigen Wochen mein FHEM auf eine aktuelle Version gebracht und die Abfuhrtermine aus 2016 eingepflegt. Der folgende Codeschnipsel funktioniert bislang problemlos in einem Notify:
RemovalCheck {
my $RemovalBlack = "off";
my $RemovalBrown = "off";
my $RemovalGreen = "off";
my $RemovalYellow = "off";
my $rcal = "";

$rcal = fhem("get RemovalCalendar text modeUpcoming 4",1);
my @events = split ("\n", $rcal);
my $tomorrow = strftime "%d.%m.%y", localtime(time + 86400);

foreach my $event (@events)
{
my @values = split(" ", $event);

if ($values[0] eq $tomorrow)
{
  if ($values[2] eq "Restmülltonne") {$RemovalBlack = "on"}
  elsif ($values[2] eq "Biotonne") {$RemovalBrown = "on"}
  elsif ($values[2] eq "Papiertonne") {$RemovalGreen = "on"}
  elsif ($values[2] eq "Gelber") {$RemovalYellow = "on"}
}
}
fhem("set RemovalBlack $RemovalBlack");
fhem("set RemovalBrown $RemovalBrown");
fhem("set RemovalGreen $RemovalGreen");
fhem("set RemovalYellow $RemovalYellow");
return;
}


- Das neue Calendarmodul hab ich wohl verpasst - was ist denn da anders?

- Deine Ausgabe vom Log sieht anders aus als dein Code im Notify. Woher kommt z.B. foreach my $event (RemovalCheckevents)??

Lass mal 1. dein Code aus dem Notify sehen und 2. die PASSENDE Logausgabe, wenn du das Notify triggerst. Vielleicht kann ich ja helfen.

Liebe Grüße
DerJens

dev0

Zitat von: raspklaus am 14 Februar 2016, 19:48:49
zu Fehler 1:
Mit dem Array meinst Du sicherlich my @events
Nein, sondern:

my RemovalCheckevents
my RemovalCheckvalues


Zitat von: raspklaus am 14 Februar 2016, 19:48:49
zu Fehler 2:
Wo benenne ich Variablen um ?

my RemovalCheckvalues

Das war ursprünglich @values und darauf wird später mit $values[] zugegriffen.

raspklaus

#13
Hallo Dev0,

Du verwechselst die Logausgabe  mit den Einträgen in der FHEM Config:

Hier die Logausgabe:

2016.02.14 14:16:02 4: RemovalCheck exec {
my $RemovalBlack = "off";;
my $RemovalBrown = "off";;
my $RemovalBlue = "off";;
my $RemovalYellow = "off";;
my $RemovalToxic = "off";;
my $RemovalPaper = "off";;
my $RemovalGreen = "off";;
my $rcal = "";;

my $rcal= fhem("get Abfall text next 4");;
my RemovalCheckevents = split ("\n", $rcal);;
my $tomorrow = strftime "d.m.y", localtime(time + 86400);;

foreach my $event (RemovalCheckevents)
{
my RemovalCheckvalues = split(" ", $event);;

if ($values[0] eq $tomorrow)
{
  if ($values[3] eq "Restmüll") {$RemovalBlack = "on"}
  elsif ($values[3] eq "Biomüllabfuhr") {$RemovalBrown = "on"}
  elsif ($values[3] eq "Papiertonne") {$RemovalBlue = "on"}
  elsif ($values[3] eq "Gelber") {$RemovalYellow = "on"}
  elsif ($values[3] eq "Schadstoffsammlung") {$RemovalToxic = "on"}
  elsif ($values[3] eq "Papiersammlung") {$RemovalPaper = "on"}
  elsif ($values[3] eq "Grünabfallsammlung") {$RemovalGreen = "on"}
}
}
fhem("set RemovalBlack $RemovalBlack");;
fhem("set RemovalBrown $RemovalBrown");;
fhem("set RemovalBlue $RemovalBlue");;
fhem("set RemovalYellow $RemovalYellow");;
fhem("set RemovalToxic $RemovalToxic");;
fhem("set RemovalPaper $RemovalPaper");;
fhem("set RemovalGreen $RemovalGreen");;
return;;
}
2016.02.14 14:16:02 3: RemovalCheck return value: No such class RemovalCheckevents at (eval 1499) line 11, near ";
my RemovalCheckevents"
syntax error at (eval 1499) line 11, near "my RemovalCheckevents ="
No such class RemovalCheckvalues at (eval 1499) line 16, near "{
my RemovalCheckvalues"
syntax error at (eval 1499) line 16, near "my RemovalCheckvalues ="
Global symbol "@values" requires explicit package name at (eval 1499) line 18.
Global symbol "@values" requires explicit package name at (eval 1499) line 20.
Global symbol "@values" requires explicit package name at (eval 1499) line 21.
Global symbol "@values" requires explicit package name at (eval 1499) line 22.
Global symbol "@values" requires explicit package name at (eval 1499) line 23.
Global symbol "@values" requires explicit package name at (eval 1499) line 24.
Global symbol "@values" requires explicit package name at (eval 1499) line 25.
Global symbol "@values" requires explicit package name at (eval 1499) line 26.
Bareword "RemovalCheckevents" not allowed while "strict subs" in use at (eval 1499) line 14.


und hier das Notify aus dem Webinterface:

RemovalCheck {
my $RemovalBlack = "off";
my $RemovalBrown = "off";
my $RemovalBlue = "off";
my $RemovalYellow = "off";
my $RemovalToxic = "off";
my $RemovalPaper = "off";
my $RemovalGreen = "off";
my $rcal = "";

my $rcal= fhem("get Abfall text next 1");
my @events = split ("\n", $rcal);
my $tomorrow = strftime "%d.%m.%y", localtime(time + 86400);

my @values = split(" ", $event);

if ($values[0] eq $tomorrow)
{
  if ($values[3] eq "Restmüll") {$RemovalBlack = "on"}
  elsif ($values[3] eq "Biomüllabfuhr") {$RemovalBrown = "on"}
  elsif ($values[3] eq "Papiertonne") {$RemovalBlue = "on"}
  elsif ($values[3] eq "Gelber") {$RemovalYellow = "on"}
  elsif ($values[3] eq "Schadstoffsammlung") {$RemovalToxic = "on"}
  elsif ($values[3] eq "Papiersammlung") {$RemovalPaper = "on"}
  elsif ($values[3] eq "Grünabfallsammlung") {$RemovalGreen = "on"}
}

fhem("set RemovalBlack $RemovalBlack");
fhem("set RemovalBrown $RemovalBrown");
fhem("set RemovalBlue $RemovalBlue");
fhem("set RemovalYellow $RemovalYellow");
fhem("set RemovalToxic $RemovalToxic");
fhem("set RemovalPaper $RemovalPaper");
fhem("set RemovalGreen $RemovalGreen");
return;
}


Die Logausgabe bezieht sich auf verbose 5

Puschel74

Das gezeigte Log bezieht sich NICHT auf das gezeigte notify.

Diese 2 Zeilen
foreach my $event (RemovalCheckevents)
{
my RemovalCheckvalues = split(" ", $event);;

fehlen im gezeigten notify und sind in der Logausgabe aber vorhanden.

Weiters ist auch diese Zeile im Log
my $rcal= fhem("get Abfall text next 4");;
und diese im notify
my $rcal= fhem("get Abfall text next 1");
unterschiedlich.

Es wäre für die helfenden mit Sicherheit einfacher wenn du selbst die Logausgaben dem richtigen notify zuordnen könntest.
Ratespiele machen mit der Zeit nämlich keinen Spaß mehr.
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.