Nochmals Abfallkalender auswerten mit neuem Calendarmodul

Begonnen von raspklaus, 11 Februar 2016, 11:05:39

Vorheriges Thema - Nächstes Thema

raspklaus

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.

Dr. Boris Neubert

define Abfall_Update notify Abfall:(alarm|start|end).* {Abfalltermine("$EVENT")}
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

raspklaus

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

raspklaus


octek0815

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

raspklaus

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

octek0815

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...

kvo1

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
RPi1: mit CUL: HM-CC-RT-DN,HM-ES-PMSw1-Pl,HM-LC-BL1-FM,HM-LC-Bl1PBU-FM,HM-LC-SW1-PL2,HM-SCI-3-FM,HM-SEC-SC-2,KFM-Sensor
RPi2: Viessmann(optolink) mit 99_VCONTROL.pm,
Cubietruck: Wheezy / Apache / Owncloud
Cubietruck: Armbian(Jessie) / fhem 5.7 / LMS 7.9
RPi3: (Test) mit 7" Touch  &  HM-MOD-RPI-PCB

octek0815

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>

raspklaus

Kannst Du bitte mal Deinen Code für das normale Webinterface posten ?

Danke

octek0815

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.

raspklaus

Mein Problem ist, dass ich einen Kalender habe und das wird durch die MyUtils ausgewertet

octek0815

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.

raspklaus

Ich sehe in der Group aber nur den nächsten Termin und nicht die weiteren

kvo1

RPi1: mit CUL: HM-CC-RT-DN,HM-ES-PMSw1-Pl,HM-LC-BL1-FM,HM-LC-Bl1PBU-FM,HM-LC-SW1-PL2,HM-SCI-3-FM,HM-SEC-SC-2,KFM-Sensor
RPi2: Viessmann(optolink) mit 99_VCONTROL.pm,
Cubietruck: Wheezy / Apache / Owncloud
Cubietruck: Armbian(Jessie) / fhem 5.7 / LMS 7.9
RPi3: (Test) mit 7" Touch  &  HM-MOD-RPI-PCB