Abfallkalender auswerten

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

Vorheriges Thema - Nächstes Thema

stromer-12

#60
Ich habe mal die subroutine etwas verkürzt und der Kalender wird beim Notiy mit übergeben

define Abfall_Update notify myCalendar:modeUpcoming.* {Abfalltermine($NAME,"$EVENT")}

#
#### Google Kalender auswerten
#
sub Abfalltermincheck($$$$$$$){
  my ($text,$art,$check,$uid,$t,$cal,$Kt) = @_;
  my ($dt,@SplitDt,@SplitDate,$eventDate,$daydiff);
#  Log 3, "Abfalltermincheck - $text,$art,$check,$uid,$t,$cal";
  if ($Kt =~ /$text/) {
    $dt = fhem("get $cal start $uid");
    @SplitDt = split(/ /,$dt);
    @SplitDate = split(/\./,$SplitDt[0]);
    $eventDate = timelocal(0,0,0,$SplitDate[0],$SplitDate[1]-1,$SplitDate[2]);
    if ($check eq '' || ($eventDate < $check && $eventDate > $t)){
          $check = $eventDate;
          $daydiff = floor(($eventDate - $t) / 60 / 60 / 24 + 1);
          fhem("set $art $daydiff");
        };
    };
    return ($check);
}

sub Abfalltermine($$){
  my ($cal,$Ereignis) = @_;
  my ($Kt);
  my @Ereignisarray = split(/.*:\s/,$Ereignis);
  my $Ereignisteil1 = $Ereignisarray[1];
  my @uids=split(/;/,$Ereignisteil1);
  my $t  = time;
# Prüfvariablen
  my $dtBio = '';
  my $dtYellow = '';
  my $dtRest = '';
  my $dtGlas = '';
  my $dtPapier = '';
  foreach my $uid (@uids) {
    $Kt = fhem("get $cal summary $uid");
#   Prüfvariable = Abfalltermincheck("Suchtext","Dummyname",Prüfvariable,UID,Zeit,Kalender,Kalendertext)
    $dtPapier = Abfalltermincheck("Blaue Tonne","Papiertonne",$dtPapier,$uid,$t,$cal,$Kt);
    $dtRest   = Abfalltermincheck("Schwarze Tonne","Restmuell",$dtRest,$uid,$t,$cal,$Kt);
  };
}


Angepasst an eigene Werte sollte mit ändern/einfügen von reichen:

  my $dtxxx = '';

bzw.

  $dtxxx   = Abfalltermincheck("Suchtext","Dummyname",$dtxxx,$uid,$t,$cal,$Kt);
FHEM (SVN) auf RPi1B mit HMser | ESPLink
FHEM (SVN) virtuell mit HMLAN | HMUSB | CUL

fh168

#61
Morgen kommt Restmüll.
Der Dummy Restmuell sollte eigentlich von 1 auf 0 morgen springen.

Heute morgen stand er noch auf 1. Jetzt kurz vor 11 uhr (warum auch immer) ist er auf  7 gesprungen.
Programmfehler? Falsche Konfiguration des Kalenders oder wo liegt der Fehler? Update / Reload wurden gemacht ... Angepasste Funktionen aus der stromer-12 - Source.

Biomuell
3
gelber_Sack
5
Papiertonne
18
Restmuell
7
Hue, Lacrosse, PCA301, MySensors, V 1.67 CUL 868 V3.4, Lacrosse-WLAN-Gateway, Tasmota RF-

stromer-12

Wie ist der Termin im Kalender konfiguriert?
FHEM (SVN) auf RPi1B mit HMser | ESPLink
FHEM (SVN) virtuell mit HMLAN | HMUSB | CUL

fh168

Hallo stromer-12

wie meinst du das?
ich habe einen speziellen Google Kalender gemacht "fhem" und dort habe ich zu den jeweiligen Terminen  "grau", "blau" "gelb" im Betreff und als ganztägigen Termin hineingeschrieben.

sieht also so aus

xxqfi7v9ea1j4padcjetequec0googlecom     new    alarm 02.01.2015 09:00:00 03.01.2015 00:00:00-04.01.2015 00:00:00 grau
xxpf0fpcvmk2ngtd2csochnrmkgooglecom     new upcoming                     05.01.2015 00:00:00-06.01.2015 00:00:00 braun
xxueoh604r8fm0n5oache57cccgooglecom     new upcoming                     07.01.2015 00:00:00-08.01.2015 00:00:00 gelb

usw.
Hue, Lacrosse, PCA301, MySensors, V 1.67 CUL 868 V3.4, Lacrosse-WLAN-Gateway, Tasmota RF-

stromer-12

wie lautet den dein notify zum triggern?
FHEM (SVN) auf RPi1B mit HMser | ESPLink
FHEM (SVN) virtuell mit HMLAN | HMUSB | CUL

fh168

DEF   
Abfall:modeUpcoming.* {Abfalltermine($NAME,"$EVENT")}
Hue, Lacrosse, PCA301, MySensors, V 1.67 CUL 868 V3.4, Lacrosse-WLAN-Gateway, Tasmota RF-

stromer-12

habe bei mir noch "modeAlarmOrStart" eingefügt, damit kommt bei mir jetzt die 0, wenn heute Termin ist

myCalendar:(modeUpcoming|modeAlarmOrStart).* {Abfalltermine($NAME,"$EVENT")}

Bei mir war der Termin für morgen mit der 12:00 Aktuallisierung rausgeflogen.
FHEM (SVN) auf RPi1B mit HMser | ESPLink
FHEM (SVN) virtuell mit HMLAN | HMUSB | CUL

fh168

Probiere ich gleich mal, bin unterwegs
Hue, Lacrosse, PCA301, MySensors, V 1.67 CUL 868 V3.4, Lacrosse-WLAN-Gateway, Tasmota RF-

Tommy82

Hi,
ich wollte jetzt auch mal den Abfallkalender in Fhem einfügen, hab ihn dazu lokal auf meinen CT geladen und über ein

define Muellkalender Calendar ical file /home/thomas/limbach-hauptstrasse.ics 72000 eingebunden

wenn ich ein
Zitatget Muellkalender  full all
eingebe bekomme ich auch die Kalendertage angezeigt, also scheint das einbinden des Kalenders ja funktioniert zu haben.
Anschließend habe ich diese 4 Dummys definiert
define BiomuellIn dummy
define RestmuellIn dummy
define GelbeTonneIn dummy
define PapierIn dummy


Dann habe ich in die 99_myUtils.pm folgende Sub eingefügt:
sub
Muelltermine ($)
{
  my ($Ereignis) = @_;
  my @Ereignisarray = split(/.*:\s/,$Ereignis);
  my $Ereignisteil1 = $Ereignisarray[1];
  my @uids=split(/;/,$Ereignisteil1);
  my $t  = time;
  my $dtBio = '';
  my $dtYellow = '';
  my $dtRest = '';
  foreach my $uid (@uids) {
    my $Kalendertext = fhem("get Muellkalender summary $uid");
    if ($Kalendertext =~ /Biomüll/) {
        my $dt = fhem("get Muellkalender 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;
          Log(3, $dtBio);
        }
    };
    if ($Kalendertext =~ /Gelbe Tonne/) {
        my $dt = fhem("get Muellkalender 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 ($dtYellow eq '' || ($eventDate < $dtYellow && $eventDate > $t))
        {
          $dtYellow  = $eventDate;
        }
    };
    if ($Kalendertext =~ /Restmüll/) {
        my $dt = fhem("get Muellkalender 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 =~ /PapierIn/) {
        my $dt = fhem("get Muellkalender 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 < $dtPapier && $eventDate > $t))
        {
          $dtRest = $eventDate;
        }
    };
  };
  my $dayDiff = floor(($dtBio - $t) / 60 / 60 / 24 + 1);
  if ($dayDiff >= 0) {
    fhem("set BiomuellIn $dayDiff");
  }
  my $dayDiff = floor(($dtYellow - $t) / 60 / 60 / 24 + 1);
  if ($dayDiff >= 0) {
    fhem("set GelbeTonneIn $dayDiff");
  }
  my $dayDiff = floor(($dtRest - $t) / 60 / 60 / 24 + 1);
  if ($dayDiff >= 0) {
    fhem("set RestmuellIn $dayDiff");
  }
  my $dayDiff = floor(($dtPapier - $t) / 60 / 60 / 24 + 1);
  if ($dayDiff >= 0) {
    fhem("set PapierIn $dayDiff");
  }
}


und dann noch dieses notify um beim Kalender update die Buttons zu aktualisieren
define nf.Muellkalender.Update notify Muellkalender:mode.*abfallamtbautzende.* {Muelltermine("$EVENT");;}

Allerdings ist der Status der Buttons immer "???"

Was hab ich noch falsch gemacht, such schon den ganzen Tag, aber find den Fehler nichtt? IM Log erscheint kein Fehler

Danke
Fhem Cubitruck  Armbian Buster with Linux 5.3.9-sunxi
HM-CC_RT-DN, HM-Sec-RHS,HM-Sec-SD, HM-Sec-SCo,IT1500,1xIT GRR-3500 Fritz!Dect200,Powerline546E,Enigma2 Modul mit 3 Vu+,Wol Modul für WinServer2016 und WinServer 2019,FB6590
Allnetl Wandtablett mit FTUI

stromer-12

Zitat von: Tommy82 am 02 Januar 2015, 21:01:13
und dann noch dieses notify um beim Kalender update die Buttons zu aktualisieren
define nf.Muellkalender.Update notify Muellkalender:mode.*abfallamtbautzende.* {Muelltermine("$EVENT");;}

Allerdings ist der Status der Buttons immer "???"
Bist du dir sicher, das das notify greift?
FHEM (SVN) auf RPi1B mit HMser | ESPLink
FHEM (SVN) virtuell mit HMLAN | HMUSB | CUL

Franz Tenbrock

Hallo Thommy
hab ich dich heute beschäftigt ?
Warum hast du nicht meine def von oben komplett genommen und nur die Datei ausgetauscht.
Man kann das ja später etwas hübschen wenn es läuft.
du hast in der define Muellkalender genommen und nicht Abfall
in der utils steht auch was anderes.
Kann es dir zwar nicht genau erklären aber da ist was mir den Namen durcheinander.

Du musst dann natürlich in deiner ical Datei schauen wie eure Stadt die Bezeichnungen gewählt hat
muss mich jetzt leider abmelden, etwas smalltalk mit family
hab gerade ne Geburtstagsliste gebastelt :-)
n8
cubi3, Cul 868, ESA2000WZ, EM1000GZ,  FS20, dashboard, 1-Wire, Max Thermos, Max Wandthermo, Max Lan, Fritzbox callmonitor, , nanocul, HM Led16, HM Bewegungsmelder, HM Schalter, RPi, banana, ESP8266, DoorPi

fh168

Die 0 beim Restmuell-Dummy funktioniert jetzt, er zieht sich die Daten vom Google-Kalender jetzt rein. Ich möchte diesen Wert jedoch weiterverarbeiten, indem eine LED geschaltet wird.
Für jeden Dummy (Restmuell, gelber_Sack usw) habe ich ein Notify gemacht.

ZitatRestmuell:state.* {
  if ((ReadingsVal("Restmuell", "state", "99")) == 1) {
    myLEDSend("10101",1,1);
  } elsif ((ReadingsVal("Restmuell", "state", "99")) == 0) {
    myLEDSend("10101",2,1);
  } else {
    myLEDSend("10101",3,1);
  }
}

Jedoch springt er diese Routine nicht an.
Wenn ich in der Commandozeile:
trigger Restmuell state 0  (wenn der dummy Restmuell auf 0 steht), Leuchtet die externe LED (myLED bla).

Wenn ich aber das System neu starte mit shutdown restart  sollte doch eigentlich dieses Notify doch irgendwann wieder angesprungen werden... klappt aber nicht.

http://blog.moneybag.de/fhem-mit-led-statusanzeige-led-stripe-wd2812b-433-mhz-drahtlos-uebertragung/#more-11377

Irgendwelche ideen?

Hue, Lacrosse, PCA301, MySensors, V 1.67 CUL 868 V3.4, Lacrosse-WLAN-Gateway, Tasmota RF-

bobby1000

Hallo,
erst einmal ein gutes und gesundes neues Jahr.

Ich habe euren Tread bis hierhin aufmerksam verfolgt und auch das ein oder andere von dem hier vorgestellten Quellcode stibitzt.
Den stibitzten Code habe ich in die Datei 99_myUtilMüll geschrieben.

Grundsätzlich scheint auch alles zu funktionieren. Die Mülltermine werden angezeigt und runter gezählt. (Ob bis 1 oder 0 weiß ich noch nicht)
Nun habe ich aber im Logfile folgende Fehlermeldung gefunden:
2015.01.03 08:26:23 1: reload: Error:Modul 99_myUtilsMuell deactivated:

Kann mir jemand sagen woher der Fehler kommt?

Vielen Dank für diesen wirklich interessanten Tread

fh168

Hallo bobby1000,

mal über die Console Fhem gestartet und beobachtet, wo Fhem aussteigt?

Robin
Hue, Lacrosse, PCA301, MySensors, V 1.67 CUL 868 V3.4, Lacrosse-WLAN-Gateway, Tasmota RF-

stromer-12

Zitat von: fh168 am 03 Januar 2015, 01:02:34
Die 0 beim Restmuell-Dummy funktioniert jetzt, er zieht sich die Daten vom Google-Kalender jetzt rein. Ich möchte diesen Wert jedoch weiterverarbeiten, indem eine LED geschaltet wird.
Für jeden Dummy (Restmuell, gelber_Sack usw) habe ich ein Notify gemacht.

Restmuell:state.* {
  if ((ReadingsVal("Restmuell", "state", "99")) == 1) {
    myLEDSend("10101",1,1);
  } elsif ((ReadingsVal("Restmuell", "state", "99")) == 0) {
    myLEDSend("10101",2,1);
  } else {
    myLEDSend("10101",3,1);
  }
}


Irgendwelche ideen?

ja,

Restmuell:.* {

Es gibt kein Event Namens "state" sondern:

2015-01-03 10:38:55 dummy Restmuell 5
FHEM (SVN) auf RPi1B mit HMser | ESPLink
FHEM (SVN) virtuell mit HMLAN | HMUSB | CUL