Müllabfuhr - Benachrichtigung am Vortag via Sonos

Begonnen von DerJens, 16 August 2014, 00:47:09

Vorheriges Thema - Nächstes Thema

DerJens

Ok, kleine Korrektur, versuch es mit $values[9]. Anpassen musst du natürlich auch wieder die Namen.

maseb

Hallo,

es tut sich etwas.
Im userReading der Tonnen, RemovalBlue kommt es zu einer Fehlermeldung

Error evaluating RemovalBlue userReading inDays: Undefined subroutine &main::Delta_Days called at (eval 4699) line 1.

Grüße
Rudi
CUL mit EM 1000 S/IR und EM 1000 HSM

DerJens

Zitat von: DerJens am 20 Januar 2015, 10:01:39
Ich bin mir nict mehr ganz sicher, aber ich glaube, dass ich für Date::Calc ein Modul mit sudo apt-get install libdate-calc-perl nachinstallieren musste.

maseb

Das Modul hatte ich bereits nachinstalliert. Ist die aktuelle Version installiert.



CUL mit EM 1000 S/IR und EM 1000 HSM

DerJens

Hmmm, als Idee:

  • FHEM schon neu gestartet?
  • use Date::Calc; beim Kopieren nicht vergessen?

maseb

habe ich beides gemacht.

Danke für alles, vielleicht ergibt sich noch etwas wenn man es sacken lässt.

Grüße
Rudi
CUL mit EM 1000 S/IR und EM 1000 HSM

hollyghost

Hallo Rudi,
ich hänge gerade an der gleichen Stelle:
Error evaluating RemovalBlue userReading inDays: Undefined subroutine &main::Delta_Days called at (eval 9068) line 1

libdate-calc-perl habe ich nachinstalliert (zuvor hat FHEM gemotzt, dass er Date::Calc nicht kennt  ;) )

Bist du irgendwie weitergekommen?

Aus irgendeinem Grund scheint er Delta_Days nicht zufinden

Perl ist bei mir in der Version <5.14.2> installiert

perl -MDate::Calc -le'print $Date::Calc::VERSION' liefert  <6.3>

Ich bin für jeden Tip dankbar  :D

Grüße
Holger

DerJens

Es tut mir sehr leid, dass ich hier gerade nicht helfen kann. Ich habe noch mal in meiner History geschaut und habe noch diesen Eintrag entdeckt:
sudo apt-get install libdatetime-perl
Ich MEINE mich zu erinnern, dass dies ein Modul für eine andere Zeitfunktion war, die ich zuvor benutzt habe...

hollyghost

Hi Jens -
Ich habe das empfohlene Modul nachinstalliert - hat allerdings erst mal nichts geändert.
Mit dem perl modul Date::Calc kommt es wohl auch außerhalb von FHEM ab und an zu Problemen -
ein Lösungsvorschlag hat mir bei meinem aktuellen Problem auch geholfen.

Wenn ich dein
use Date::Calc;
abändere in
use Date::Calc qw(Delta_Days);
läuft das Reading bei mir.

Prima - nun komm ich deiner Lösung wieder ein Stückchen näher - tolle Arbeit.

Jetzt muss ich mich mal um ein TTS Programm für Linux oder Windows kümmern, da ich die von dir verwendete Anna leider nicht verwenden kann.

Grüße
Holger

DerJens

Hallo Holger,

vielen Dank für deine Mithilfe. Ich habe meinen Beitrag entsprechend angepasst und zudem eine kleine Optimierung von mir gleich mit eingepflegt.

Liebe Grüße
DerJens

torte

#25
Hallo,

bei mir hat die Anzeige von "Heute" im Dummy nicht getan. Meiner Meinung nach lag  es daran das vom Kalender nur im "modeUpcoming"
die zukünftigen Termine anzeigt werden. Habe das dann mal so hier gelöst:

inDays { use Date::Calc qw(Delta_Days); my @today = (localtime)[5,4,3]; $today[0] += 1900; $today[1]++;my $rcal = fhem("get Kalender full all 8",1); my @events = split ("\n", $rcal); foreach my $event (@events) {my @values = split(" ", $event);my @d2 = (substr($values[3],6,4), substr($values[3],3,2), substr($values[3],0,2)); if (($values[6] =~ /Hausmüll/) && ( Delta_Days(@today, @d2 ) >= 0)) { return Delta_Days(@today, @d2 ); }}}

Musste das If dann noch um ein "and" erweitern:

if (($values[6] =~ /Hausmüll/) && ( Delta_Days(@today, @d2 ) >= 0)
(Wenn Text Hausmüll enthält und der unterschied größer gleich 0 ist)

weil er sonst in den minus bereich  mit den Tagen wandert. Bin noch FHEM Anfänger weiß nicht ganz
ob man das nicht auch hätte einfacher eleganter lösen können.

Grüße
Torsten

raspklaus

#26
Hallo Zusammen

Habe mich hier mal eingeklinkt da ich nun auch Sonos benutze. Die Lösung klingt gut, aber leider habe ich schon am Anfang Probleme:

Ich kann die Dummys nicht zu Leben erwecken

Hier die config:

define RemovalCalendar Calendar ical file ./Daten/Glattbach-2015.ics
attr RemovalCalendar room Kalender

define RemovalBlack dummy
attr RemovalBlack room Kalender
attr RemovalBlack setList on off

define RemovalBlue dummy
attr RemovalBlue room Kalender
attr RemovalBlue setList on off

define RemovalYellow dummy
attr RemovalYellow room Kalender
attr RemovalYellow setList on off

define RemovalBrown dummy
attr RemovalBrown room Kalender
attr RemovalBrown setList on off


define RemovalCheck notify RemovalCheck {\
my $RemovalBlack = "off";;\
my $RemovalBlue = "off";;\
my $RemovalBrown = "off";;\
my $RemovalYellow = "off";;\
\
my $rcal= fhem("get RemovalCalendar text all 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[3] eq "Restmülltonne") {$RemovalBlack = "on"}\
  elsif ($values[3] eq "Papiertonne") {$RemovalBlue = "on"}\
  elsif ($values[3] eq "Biomüllabfuhr") {$RemovalBrown = "on"}\
  elsif ($values[3] eq "Gelber") {$RemovalYellow = "on"}\
}\
}\
fhem("set RemovalBlack $RemovalBlack");;\
fhem("set RemovalBrown $RemovalBlue");;\
fhem("set RemovalBlue $RemovalBrown");;\
fhem("set RemovalYellow $RemovalYellow");;\
return;;\
}


Das Reading ist an meine ICAL Datei angepassst. get text all 4 ergibt bei mir:

22.07.15 06:00 Abfuhrtermin Biomüllabfuhr am 28.07.2015
23.07.15 06:00 Abfuhrtermin Restmüll am 27.07.2015
04.08.15 06:00 Abfuhrtermin Biomüllabfuhr am 04.08.2015
07.08.15 06:00 Abfuhrtermin Papiertonne am 07.08.2015


Im Log kommt der folgende Eintrag:

2015.07.22 11:29:47 1: PERL WARNING: "my" variable $rcal masks earlier declaration in same scope at (eval 29) line 8.
2015.07.22 11:29:47 3: eval: {
my $RemovalBlack = "off";
my $RemovalBlue = "off";
my $RemovalBrown = "off";
my $RemovalYellow = "off";
my $rcal = "";

my $rcal= fhem("get RemovalCalendar text all 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[3] eq "Restmülltonne") {$RemovalBlack = "on"}
  elsif ($values[3] eq "Papiertonne") {$RemovalBlue = "on"}
  elsif ($values[3] eq "Biomüllabfuhr") {$RemovalBrown = "on"}
  elsif ($values[3] eq "Gelber") {$RemovalYellow = "on"}
}
}
fhem("set RemovalBlack $RemovalBlack");
fhem("set RemovalBrown $RemovalBlue");
fhem("set RemovalBlue $RemovalBrown");
fhem("set RemovalYellow $RemovalYellow");
return;
}


und die Dummys werden nicht angepasst.

Ich hänge da fest und komme nicht recht weiter

Vize

Hallo zusammen,

ich habe mich auch mal an einem Müllkalender nach dieser Methode versucht und bleibe schon ziemlich am Anfang hängen...

Als erstes habe ich mir den Kalender als ics.-Datei von der Gemeinde mit den restlichen Leerungsdaten für dieses Jahr heruntergeladen und nach ./www kopiert.
Dann über define muellkalender Calendar ical file ./www/muellkalender1.ics in FHEMangelegt.
Siehe muellkalender1-1.jpg

Wenn ich nun get muellkalender text all 4 absetze, erhalte ich nur den allerletzten Leerungstermin aus der Datei.
Siehe muellkalender1-2.jpg

Ich hab dann mal analog zum ersten post mir eine neue Datei mit einem Auszug erstellt (muellkalender2.ics) und für die Termine händisch je ein DTEND eingefügt.
Dann den alten muellkalender gelöscht und den neuen mit dieser Datei in FHEM angelegt.
Siehe muellkalender2-1.jpg.

Auch hier erhalte ich nach get muellkalender text all 4 nur den letzten Termin des Auszuges.
Siehe muellkalender2-2.jpg.

Was mache ich hier falsch?

Danke schonmal für jegliche Hilfe!

Gruß
Andreas

Vize

Guten Morgen,

hat denn niemand eine Idee? Ich bin für jeden Tipp dankbar...

Gruß
Andreas

DerJens

Schnellschuss: Änder mal das Format der .ics von Windows um in Linux (Zeilenumbruch)...