Die folgende Routine zum Auswerten des Abfallkalenders ist bis zum Update des Calendarmoduls immer problemlos gelaufen:
sub
Abfalltermine ($)
{
my ($Ereignis) = @_;
my @Ereignisarray = split(/.*:\s/,$Ereignis);
my $Ereignisteil1 = $Ereignisarray[1];
my @uids=split(/;/,$Ereignisteil1);
my $t = time;
my $dtPapier = '';
my $dtGelberSack = '';
my $dtRest = '';
my $dtBio = '';
my $dayDiff = 0;
my $dtBeda = '';
foreach my $uid (@uids) {
my $Kalendertext = fhem("get Abfall summary $uid");
if ($Kalendertext =~ /Papiertonne/) {
my $dt = fhem("get Abfall start $uid");
my @SplitDt = split(/ /,$dt);
my @SplitDate = split(/\./,$SplitDt[0]);
my $eventDate = timelocal(0,0,0,$SplitDate[0],$SplitDate[1]-1,$SplitDate[2]);
if ($dtPapier eq '' || ($eventDate < $dtPapier && $eventDate > $t))
{
$dtPapier = $eventDate;
Log(3, $dtPapier);
}
};
if ($Kalendertext =~ /Gelber Sack/) {
my $dt = fhem("get Abfall start $uid");
my @SplitDt = split(/ /,$dt);
my @SplitDate = split(/\./,$SplitDt[0]);
my $eventDate = timelocal(0,0,0,$SplitDate[0],$SplitDate[1]-1,$SplitDate[2]);
if ($dtGelberSack eq '' || ($eventDate < $dtGelberSack && $eventDate > $t))
{
$dtGelberSack = $eventDate;
}
};
if ($Kalendertext =~ /Restmüll/) {
my $dt = fhem("get Abfall start $uid");
my @SplitDt = split(/ /,$dt);
my @SplitDate = split(/\./,$SplitDt[0]);
my $eventDate = timelocal(0,0,0,$SplitDate[0],$SplitDate[1]-1,$SplitDate[2]);
if ($dtRest eq '' || ($eventDate < $dtRest && $eventDate > $t))
{
$dtRest = $eventDate;
}
};
if ($Kalendertext =~ /Bio/) {
my $dt = fhem("get Abfall start $uid");
my @SplitDt = split(/ /,$dt);
my @SplitDate = split(/\./,$SplitDt[0]);
my $eventDate = timelocal(0,0,0,$SplitDate[0],$SplitDate[1]-1,$SplitDate[2]);
if ($dtBio eq '' || ($eventDate < $dtBio && $eventDate > $t))
{
$dtBio = $eventDate;
}
};
if ($Kalendertext =~ /Pater Beda/) {
my $dt = fhem("get Abfall start $uid");
my @SplitDt = split(/ /,$dt);
my @SplitDate = split(/\./,$SplitDt[0]);
my $eventDate = timelocal(0,0,0,$SplitDate[0],$SplitDate[1]-1,$SplitDate[2]);
if ($dtBeda eq '' || ($eventDate < $dtBeda && $eventDate > $t))
{
$dtBeda = $eventDate;
}
};
$dayDiff = floor(($dtPapier - $t) / 60 / 60 / 24 + 1);
if ($dayDiff >= 0) {
fhem("set Papiertonne $dayDiff");
}
$dayDiff = floor(($dtGelberSack - $t) / 60 / 60 / 24 + 1);
if ($dayDiff >= 0) {
fhem("set GelberSack $dayDiff");
}
$dayDiff = floor(($dtRest - $t) / 60 / 60 / 24 + 1);
if ($dayDiff >= 0) {
fhem("set Restmuell $dayDiff");
}
$dayDiff = floor(($dtBio - $t) / 60 / 60 / 24 + 1);
if ($dayDiff >= 0) {
fhem("set Bio $dayDiff");
}
$dayDiff = floor(($dtBeda - $t) / 60 / 60 / 24 + 1);
if ($dayDiff >= 0) {
fhem("set Pater_Beda $dayDiff");
}
}
}
# Müllkalender
define Papiertonne dummy
attr Papiertonne devStateIcon {my $w=ReadingsVal("$name","state",100);;if($w==1){'.*:PapierIn.0'}else{if($w==2){'.*:PapierIn.1'}else{'.*:NoMuell'}}}
attr Papiertonne group Abfall Kalender
attr Papiertonne room Abfall,Kalender
attr Papiertonne verbose 1
define Restmuell dummy
attr Restmuell devStateIcon {my $w=ReadingsVal("$name","state",100);;if($w==1){'.*:RestmuellIn.0'}else{if($w==2){'.*:RestmuellIn.1'}else{'.*:NoMuell'}}}
attr Restmuell group Abfall Kalender
attr Restmuell room Abfall,Kalender
define GelberSack dummy
attr GelberSack alias Gelber Sack
attr GelberSack devStateIcon {my $w=ReadingsVal("$name","state",100);;if($w==1){'.*:GelberSackIn.0'}else{if($w==2){'.*:GelberSackIn.1'}else{'.*:NoMuell'}}}
attr GelberSack group Abfall Kalender
attr GelberSack room Abfall,Kalender
attr GelberSack verbose 1
define Bio dummy
attr Bio alias Biotonne
attr Bio devStateIcon {my $w=ReadingsVal("$name","state",100);;if($w==1){'.*:BiomuellIn.0'}else{if($w==2){'.*:BiomuellIn.1'}else{'.*:NoMuell'}}}
attr Bio group Abfall Kalender
attr Bio room Abfall,Kalender
attr Bio verbose 1
define Abfall_Update notify Abfall:modeAlarmOrStart.* {Abfalltermine("$EVENT")}
attr Abfall_Update room Abfall
Die Dummys bei einer Abholung werden auch richtig auf 1 gesetzt, nur wenn der Termin vorbei ist werden sie nicht auf 0 zurückgesetzt.
Irgendwie ist da ein Wurm drin und ich kann ihn nicht finden.
define Abfall_Update notify Abfall:(alarm|start|end).* {Abfalltermine("$EVENT")}
Das mit
alarm|start
hatte ich schon geändert, allerdings ohne Klammern. Habe es jetzt wie vorgeschlagen eingetragen, aber der Gelbe Sack der gestern abgeholt wurde hat immer noch den Status 1. Auch nach einem shutdown restart
in einem list next wird der Termin nicht mehr angezeigt
Sonst keiner eine Idee ?
Zitat von: raspklaus am 11 Februar 2016, 14:21:34
Sonst keiner eine Idee ?
Hallo,
stell doch auf folgendes um: http://forum.fhem.de/index.php/topic,48237.0.html
Hatte das selbe Problem. Damit läuft es aber nun prima und du kannst dir den 99_myutils Teil sparen...
Grüße
Olli
Das ist aber mehr auf Tablets ausgelegt für FTUI aber nicht für das normale Webinterface. Ich finde nichts wie ich das im Webinterface integrieren kann
Zitat von: raspklaus am 11 Februar 2016, 15:43:13
Das ist aber mehr auf Tablets ausgelegt für FTUI aber nicht für das normale Webinterface. Ich finde nichts wie ich das im Webinterface integrieren kann
geht für alles...
Zitat von: octek0815 am 11 Februar 2016, 17:32:42
geht für alles...
Hi Olli,
Dann poste doch bitte mal den Code für fhem und FTUI
Danke
Zitat von: kvo1 am 11 Februar 2016, 17:42:19
Hi Olli,
Dann poste doch bitte mal den Code für fhem und FTUI
Danke
hier...
<!-- Ab hier Abfall -->
<li data-row="4" data-col="1" data-sizex="4" data-sizey="17">
<header><div data-type="label">Abfall</div></header>
<div style="padding-top: 5px"></div>
<div data-type="symbol"
data-device="abfallBioabfall"
data-get="next_tage"
data-icons='["oa-message_garbage fa-spin","oa-message_garbage warn blink","oa-message_garbage warn"]'
data-on-colors='["SaddleBrown","SaddleBrown","SaddleBrown"]'
data-get-on='["0","1","2"]'
data-background-icon="fa-circle-thin"
data-off-background-color="#7A7A7A"
data-on-background-color="#7A7A7A"
style="font-size:240%">
</div>
<div data-type="symbol"
data-device="abfallVerpackungen"
data-get="next_tage"
data-icons='["oa-message_garbage fa-spin","oa-message_garbage warn blink","oa-message_garbage warn"]'
data-on-colors='["yellow","yellow","yellow"]'
data-get-on='["0","1","2"]'
data-background-icon="fa-circle-thin"
data-off-background-color="#7A7A7A"
data-on-background-color="#7A7A7A"
style="font-size:250%">
</div>
<div data-type="symbol"
data-device="abfallPapier"
data-get="next_tage"
data-icons='["oa-message_garbage fa-spin","oa-message_garbage warn blink","oa-message_garbage warn"]'
data-on-colors='["#0040FF","#0040FF","#0040FF"]'
data-get-on='["0","1","2"]'
data-background-icon="fa-circle-thin"
data-off-background-color="#7A7A7A"
data-on-background-color="#7A7A7A"
style="font-size:240%">
</div>
<div data-type="symbol"
data-device="abfallRestmuell"
data-get="next_tage"
data-icons='["oa-message_garbage fa-spin","oa-message_garbage warn blink","oa-message_garbage warn"]'
data-on-colors='["black","black","black"]'
data-get-on='["0","1","2"]'
data-background-icon="fa-circle-thin"
data-off-background-color="#7A7A7A"
data-on-background-color="#7A7A7A"
style="font-size:240%">
</div>
</li>
Kannst Du bitte mal Deinen Code für das normale Webinterface posten ?
Danke
Zitat von: raspklaus am 11 Februar 2016, 17:48:31
Kannst Du bitte mal Deinen Code für das normale Webinterface posten ?
Danke
Mein Abfallentsorger hat nicht alles in einem Kalender deshalb vier Kalender.
Im Code sind sicherlich einiger Attribute enthalten du nicht brauchst, da ich das im Floorplan darstelle (bin noch nicht vollständig auf FTUI umgestiegen).
Die Kalender:
define calendarBioabfall Calendar ical url xxxKALENDER_URLxxx 86400
attr calendarBioabfall room System
define calendarPapier Calendar ical url xxxKALENDER_URLxxx 86400
attr calendarPapier room System
define calendarRestmuell Calendar ical url xxxKALENDER_URLxxx 86400
attr calendarRestmuell room System
define calendarVerpackungen Calendar ical url xxxKALENDER_URLxxx 86400
attr calendarRestmuell room System
Der Abfall:
define abfallBioabfall ABFALL calendarBioabfall 3600
attr abfallBioabfall room System
attr abfallBioabfall stateFormat Tage bis zur nächsten Leerung: next_tage
attr abfallBioabfall verbose 0
define abfallPapier ABFALL calendarPapier 3600
attr abfallPapier room System
attr abfallPapier stateFormat Tage bis zur nächsten Leerung: next_tage
attr abfallPapier verbose 0
define abfallRestmuell ABFALL calendarRestmuell 3600
attr abfallRestmuell room System
attr abfallRestmuell stateFormat Tage bis zur nächsten Leerung: next_tage
attr abfallRestmuell verbose 0
define abfallVerpackungen ABFALL calendarVerpackungen 3600
attr abfallVerpackungen room System
attr abfallVerpackungen stateFormat Tage bis zur nächsten Leerung: next_tage
attr abfallVerpackungen verbose 0
und schön anzeigen:
define rgAbfallkalender readingsGroup abfallRestmuell:<%dustbin_grau>,next_tage,<%dustbin_braun>,next_tage@abfallBioabfall\
abfallPapier:<%dustbin_blau>,next_tage,<%dustbin_gelb>,next_tage@abfallVerpackungen\
attr rgAbfallkalender alias Müllabfuhr
attr rgAbfallkalender fp_fpTablet1 650,447,1,Müllabfuhr
attr rgAbfallkalender noheading 1
attr rgAbfallkalender nonames 1
attr rgAbfallkalender room _FloorplanParts
attr rgAbfallkalender style style="height:115px;; width:243px;; text-align:center;; font-size: 16px;;"
attr rgAbfallkalender valueFormat {if($VALUE eq 1){$VALUE="Morgen"}elsif($VALUE eq 0){$VALUE="Heute"}else{$VALUE="in $VALUE Tagen"}}
Die Icons (sind eigentlich PNGs) habe ich selber gebaut. Musst Du also ersetzen.
Mein Problem ist, dass ich einen Kalender habe und das wird durch die MyUtils ausgewertet
Zitat von: raspklaus am 11 Februar 2016, 18:10:16
Mein Problem ist, dass ich einen Kalender habe und das wird durch die MyUtils ausgewertet
Das sollte trotzdem funktionieren. Auch mit einer lokalen Kalenderdatei.
Ich sehe in der Group aber nur den nächsten Termin und nicht die weiteren
Hi Olli, Danke !
Vielen Dank für das Modul.
Super Arbeit.
Das erste Mal, das bisher der Abfall Kalender einwandfrei und so schmerzfrei funktioniert!
Gruss
Ralf