Abfallkalender auswerten

Begonnen von raspklaus, 17 Juni 2014, 17:45:34

Vorheriges Thema - Nächstes Thema

raspklaus

Da ich ein separates Testsystem habe hatte ich nun Deine Einträge in der FHEM.cfg uns utils komplett übernommen und meine gelöscht aberes funktioniert immer noch nicht. Ich bekomme die Fehlermeldung:

2014.06.26 08:40:15 3: get Abfall start 25a113bfdfb6e25baf9e290bf03c756b : 02.10.2014 06:00:00
2014.06.26 08:40:15 3: Abfall_Update return value: Undefined subroutine &main::timelocal called at ./FHEM/99_myUtilsm.pm line 53.


sch... dass ich mit Perl immer noch nicht so richtig uptodate bin

Spartacus

Moin raspklaus,
naja, ich bin alles andere als ein Perl Experte und ich komme selber kaum damit klar! Aber hier scheint irgendetwas mit Deiner Utils Datei nicht zu stimmen. Schau noch mal genau rein! in Zeile 53 stimmt was nicht! Name der SUB-Routine, Klammer vergessen oder irgendein Zeichen zu viel. Manchmal sieht man den Wald vor lauter Bäumen nicht....
Nimm doch mal meine Utils, lösche alles bis auf eine Abfalltonne und teste es noch mal. Das muss klappen! Das reload 99_myUtilsm.pm in fhem nicht vergessen!

Sparatcus
P.S. hast Du das mit den Schulferien und dem Berechnen des Kalenderjahrs mal verifiziert?
Fhem-System: 1 x raspberry PI Typ B, 1 x enOcean PI Typ B | Enocean: PTM210, FMS61NP, FAM14, 2 x FSR14-4x, FTS14-EM | LaCrosse: 2 x TX29D über Jeelink V3 | 1-Wire: 2 x DS18B20 über DS9490R

raspklaus

Zu den Ferien bin ich noch nicht gekommen.

Ich habe Deine Utils komplett übernommen, auch die Einträge in der FHEM.cfg
Damit tritt ja der Fehler auf

raspklaus

Ich habe den Fehler gefunden:

es fehlte im Header der Utils ein
use Time::Local;

Jetzt gehts.

Nun müssten eigentlich nur noch Icons einen Tag vor und am Tag der Leerung angezeigt werden

Spartacus

Hallo,
bei mir war das use Time nicht drin!.

Die Fehler kommen bei mir übrigens auch, wenn ich die Routine aufrufe:
Argument "" isn't numeric in subtraction (-) at ./FHEM/99_myFhemUtils.pm line 195.
liegt offenbar hier dran:
my $dayDiff = floor(($dtWeihnachten - $t) / 60 / 60 / 24 + 1);
und
"my" variable $dayDiff masks earlier declaration in same scope at ./FHEM/99_myFhemUtils.pm line 105.
und das liegt offenbar an der doppelten Variablendeklaration.
wie kann man das abstellen?
Spartacus.
Fhem-System: 1 x raspberry PI Typ B, 1 x enOcean PI Typ B | Enocean: PTM210, FMS61NP, FAM14, 2 x FSR14-4x, FTS14-EM | LaCrosse: 2 x TX29D über Jeelink V3 | 1-Wire: 2 x DS18B20 über DS9490R

raspklaus

Eine der beiden Variablen

$dtWeihnachten - $t

scheint kein nummerischer Ausdruck zu sein

fh168

Bei mir wird Abfall Countdown nicht aktualisiert. Wie kommt das?
Hue, Lacrosse, PCA301, MySensors, V 1.67 CUL 868 V3.4, Lacrosse-WLAN-Gateway, Tasmota RF-

Spartacus

Hallo,
Zitat von: raspklaus am 26 Juni 2014, 13:51:09
Eine der beiden Variablen

$dtWeihnachten - $t

scheint kein nummerischer Ausdruck zu sein
..zumindest ist dieser Fehler schon mal klar!
In der Variablendeklaration darf der Wert nicht auf ' ' , sondern muss auf "0" gesetzt werden.
falsch:
my $dtWeihnachten = '';
richtig
my $dtWeihnachten = 0;
Spartacus.
Fhem-System: 1 x raspberry PI Typ B, 1 x enOcean PI Typ B | Enocean: PTM210, FMS61NP, FAM14, 2 x FSR14-4x, FTS14-EM | LaCrosse: 2 x TX29D über Jeelink V3 | 1-Wire: 2 x DS18B20 über DS9490R

Priem

Hallo allerseits,

Ich habe die Prüfung der Abfallkalender über einen at-Befehl gelöst. So wird jeden Tag um 14:00 Uhr geprüft, ob am nächsten Tag eine Abholung ansteht. Wenn das der Fall ist, wird das Mülltonnen-Icon durch ein Achtung-Icon ersetzt, eine Nachricht über Prowl auf das Smartphone geschickt und bei Anwesenheit auch noch eine Sprachausgabe über das Text2Speech-Modul vorgenommen. Ich bin mir bewusst, dass der Code nicht der schönste ist und der Code für die Prüfung der drei Abholkalender (Restmüll, Bio, Papier) redunant ist und deshalb in eine separate Perl-Funktion ausgelagert werden sollte, aber bisher habe ich noch nicht die Zeit und die Lust dazu gehabt.

define Restabfall Calendar ical file ./FHEM/include/Restabfall.ics
attr Restabfall icon message_garbage
attr Restabfall room Haustechnik

define Biotonne Calendar ical file ./FHEM/include/Biotonne.ics
attr Biotonne icon message_garbage
attr Biotonne room Haustechnik

define Papiertonne Calendar ical file ./FHEM/include/Papiertonne.ics
attr Papiertonne icon message_garbage
attr Papiertonne room Haustechnik

define CheckMuellabfuhr at *14:00:00 {\
  my $today = (sprintf("%02d.%02d.%d",$mday,$month,$year));;\
  Log 3, "Prüfung der Müllabfuhrtermine am $today";;\
  my $papiertonne = "";;\
  $papiertonne = fhem("get Papiertonne alarm modeAlarm");;\
  my $biotonne = "";;\
  $biotonne  = fhem("get Biotonne alarm modeAlarm");;\
  my $restmuell = "";;\
  $restmuell = fhem("get Restabfall alarm modeAlarm");;\
  my $abholdatumPapiertonne = "";;\
  my $abholdatumBiotonne = "";;\
  my $abholdatumRestmuell = "";;\
  my $abholungBio = "false";;\
  my $abholungPapier = "false";;\
  my $abholungRest = "false";;\
  fhem "deleteattr Papiertonne icon";;\
  fhem "deleteattr Biotonne icon";;\
  fhem "deleteattr Restabfall icon";;\
  fhem "attr Papiertonne icon message_garbage";;\
  fhem "attr Biotonne icon message_garbage";;\
  fhem "attr Restabfall icon message_garbage";;\
  if ($papiertonne ne "") {\
    $abholdatumPapiertonne = substr($papiertonne,0,10);;\
    if ($abholdatumPapiertonne eq $today) {\
      $abholungPapier = "true";;\
      Log 3, "Leerung der Altpapiertonne steht bevor.";;\
      fhem "deleteattr Papiertonne icon";;\
      fhem "attr Papiertonne icon message_attention";;\
      system "sh /var/InternerSpeicher/fhem/mail_altpapier.sh";;\
      if (ReadingsVal("myMobile","state","absent") eq "present" && Value("Sprachausgabe") eq "on") {\
        fhem "set ttsSpeaker tts Hallo Thorsten! Morgen wird die Altpapiertonne geleert.";;\
      }\
    }\
  }\
  if ($biotonne ne "") {\
    $abholdatumBiotonne = substr($biotonne,0,10);;\
    if ($abholdatumBiotonne eq $today) {\
      $abholungBio = "true";;\
      Log 3, "Leerung der Biotonne steht bevor.";;\
      fhem "deleteattr Biotonne icon";;\
      fhem "attr Biotonne icon message_attention";;\
      system "sh /var/InternerSpeicher/fhem/mail_biotonne.sh";;\
      if (ReadingsVal("myMobile","state","absent") eq "present" && Value("Sprachausgabe") eq "on") {\
        fhem "set ttsSpeaker tts Hallo Thorsten! Morgen wird die Biotonne geleert.";;\
      }\
    }\
  }\
  if ($restmuell ne "") {\
    $abholdatumRestmuell = substr($restmuell,0,10);;\
    if ($abholdatumRestmuell eq $today) {\
      $abholungRest = "true";;\
      Log 3, "Leerung der Restmülltonne steht bevor.";;\
      fhem "deleteattr Restabfall icon";;\
      fhem "attr Restabfall icon message_attention";;\
      system "sh /var/InternerSpeicher/fhem/mail_restmuell.sh";;\
      if (ReadingsVal("myMobile","state","absent") eq "present" && Value("Sprachausgabe") eq "on") {\
        fhem "set ttsSpeaker tts Hallo Thorsten! Morgen wird die Restmuelltonne geleert.";;\
      }\
    }\
  }\
}

Die folgenden Zeilen im oben genannten Code schicken die Prowl-Nachricht und triggern die Sprachausgabe und können gefahrlos gelöscht werden:

      system "sh /var/InternerSpeicher/fhem/mail_xxxxxxxx.sh";;\
      if (ReadingsVal("myMobile","state","absent") eq "present" && Value("Sprachausgabe") eq "on") {\
        fhem "set ttsSpeaker tts Hallo Thorsten! Morgen wird die xxx geleert.";;\
      }\

salvadore

@raspklaus
war bei mir auch so mit use Time, ergänzt und schon klappt es.

Gibt es schon eine Erweiterung um die Icons entsprechend dem Leerungstag anzuzeigen? Habe mir zwar jetzt eine Erweiterung für die Utils "gebastelt" aber hier muss sicher noch nachgebessert werden.
ein kurzer Auszug:
....
  my $dayDiff = floor(($dtPapier - $t) / 60 / 60 / 24 + 1);
  if ($dayDiff >= 0) {
    fhem("set Papiertonne $dayDiff");
    if ($dayDiff >= 28) {
      fhem("deleteattr Papiertonne icon");
      fhem("attr Papiertonne icon message_attention");
    }
    else {
      fhem("deleteattr Papiertonne icon");
      fhem("attr Papiertonne icon message_garbage");
    }
  }


....

Bei uns ist am 08.07. Leerung der Papiertonne; gestern wurden 2 Tage angezeigt, heute nach der Aktualisiesrung dann 29 Tage + deshalb z.Zt. die Abfrage >=28. Hier muss ich mir noch was überlegen oder hat jemand schon eine Lösung ?.

Salvadore
FHEM 5.6, APU-Board, CUNO 1.x, RFXtrx433, 8 FHT80B, diverse FS20 Aktoren, Rasperry, div. DS18x-Sensoren, KD101, AB400R, HE877, ESA2000, Beaglebone Black Rev.C, Jeelink, PCA 301, PT8005,

scooty

#40
Zitat von: salvadore am 07 Juli 2014, 21:02:01
Gibt es schon eine Erweiterung um die Icons entsprechend dem Leerungstag anzuzeigen?

Habe es mit drei Icons und über das Attribut devStateIcon gelöst, z.B.
{my $w=ReadingsVal("$name","state",100);if($w==0){'.*:garbage_rest'}else{if($w==1){'.*:garbage_rest_morgen'}else{'.*:garbage_rest_no'}}}

Wenn state=0 Tage, normales Müllicon garbage _rest
Wenn state=1 Tage (also Leerung morgen), Müllicon mit Ausrufezeichen garbage _rest_morgen
Bei jedem anderen state (also Leerung irgenwann in der Zukunft > 1 Tag), durchgestrichenes Müllicon garbage_rest_no

Andreas
PS. Abgeschaut bei der Anzeige eines Jalousienstatus nach Prozent der Öffnung
Fhem auf Gigabyte Brix
CUL V3 HM / CUL V3 MAX / MaxCube aFW Homematic&MAX / ZWave.me ZME_UZB1 / SDuino 433 / Velux KLF200
Homematic / MAX / Logitech Hub / ZWave / Wifi LED / div. 433 Temperatursensoren / pywws WH10880 / IO Homecontrol

raspklaus

Kannst Du mal alle betroffenen Einträge posten ?

Danke

raspklaus

Also dann so ?

attr GelberSack devStateIcon {my $w=ReadingsVal("$name","state",100);if($w==0){'.*:GelberSackIn.0'}else{if($w==1){'.*:GelberSackIn.1'}else{'.*:NoMuell'}}}


scooty

#43
Ich gebe zu, mit dem attr Befehl habe ich es auch nicht geschafft.
;)

Aber wenn Du
{my $w=ReadingsVal("$name","state",100);if($w==0){'.*:GelberSackIn.0'}else{if($w==1){'.*:GelberSackIn.1'}else{'.*:NoMuell'}}}
in das "attr"-Eingabefeld des Devices schreibst, sollte es funktionieren.

(http://forum.fhem.de/index.php?action=dlattach;topic=24646.0;attach=17160)
Fhem auf Gigabyte Brix
CUL V3 HM / CUL V3 MAX / MaxCube aFW Homematic&MAX / ZWave.me ZME_UZB1 / SDuino 433 / Velux KLF200
Homematic / MAX / Logitech Hub / ZWave / Wifi LED / div. 433 Temperatursensoren / pywws WH10880 / IO Homecontrol

raspklaus

ok, so funktioniert es. Allerdings muss

define Abfall_Update notify Abfall:modeUpcoming.* {Abfalltermine("$EVENT")}

in

define Abfall_Update notify Abfall:modeAlarmOrStart.* {Abfalltermine("$EVENT")}

geändert werden und dann auch noch

{my $w=ReadingsVal("$name","state",100);;if($w==1){'.*:BioMuellIn.0'}else{if($w==2){'.*:BioMuellIn.1'}else{'.*:NoMuell'}}}


für devstateicon angepasst werden.