Abfallkalender auswerten

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

Vorheriges Thema - Nächstes Thema

RPi_Fhem_Fan

#120
Hallo,

ich erhalte keine Fehlermeldungen im Log, aber dafür leider eine große Anzahl an Statuseinträgen.
Hier mein Aufruf in der fhem.cfg (inklusive den Icons einen Tag vor dem Termin):
define Abfall Calendar ical file ./Muelltemine-2015-1420380451.ics 43200
attr Abfall room Kalender
attr Abfall verbose 2
define Abfall_Update notify Abfall:(modeUpcoming|modeAlarmOrStart).* {Abfalltermine("$EVENT")}
attr Abfall_Update room Kalender
define Papiertonne dummy
attr Papiertonne alias Blaue-Tonne
attr Papiertonne group Abfall Countdown
attr Papiertonne room Kalender
attr Papiertonne devStateIcon 1:message_garbage@blue
define Restmuell dummy
attr Restmuell alias Schwarze-Tonne
attr Restmuell group Abfall Countdown
attr Restmuell room Kalender
attr Restmuell devStateIcon 1:message_garbage@grey
define Gelbetonne dummy
attr Gelbetonne alias Gelbe-Tonne
attr Gelbetonne group Abfall Countdown
attr Gelbetonne room Kalender
attr Gelbetonne devStateIcon 1:message_garbage@yellow


Und hier mein 99_myUtils.pm Script:
package main;
use strict;
use warnings;
use POSIX;
use Time::Local;
sub myUtils_Initialize($$)
{
my ($hash) = @_;
}

sub Abfalltermine ($)
{
  my ($Ereignis) = @_;
  my @Ereignisarray = split(/.*:\s/,$Ereignis);
  my $Ereignisteil1 = $Ereignisarray[1];
  my @uids=split(/;/,$Ereignisteil1);
  my (undef,undef,undef,$mday,$mon,$year) = localtime;
  my $t  = timelocal(0,0,0,$mday,$mon,$year);
  my $dtPapier = 0;
  my $dtWertstoff = 0;
  my $dtRest = 0;

   foreach my $uid (@uids) {
    my $Kalendertext = fhem("get Abfall summary $uid");
    if ($Kalendertext =~ /Papier-Tonne/) {
        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 == 0 || ($eventDate < $dtPapier && $eventDate > $t))
        {
          $dtPapier = $eventDate;
        }
    };
if ($Kalendertext =~ /Gelbe Tonne/) {
        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 ($dtWertstoff == 0 || ($eventDate < $dtWertstoff && $eventDate > $t))
        {
          $dtWertstoff  = $eventDate;
        }
    };
    if ($Kalendertext =~ /Restmüll 14-tägig/) {
        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 == 0 || ($eventDate < $dtRest && $eventDate > $t))
        {
          $dtRest = $eventDate;
        }
    };

   
  my $dayDiffP = floor(($dtPapier - $t) / 60 / 60 / 24);
  if ($dayDiffP >= 0) {
    fhem("set Papiertonne $dayDiffP");
  }
  my $dayDiffG = floor(($dtWertstoff - $t) / 60 / 60 / 24);
  if ($dayDiffG >= 0) {
    fhem("set Gelbetonne $dayDiffG");
  }
  my $dayDiffR = floor(($dtRest - $t) / 60 / 60 / 24);
  if ($dayDiffR >= 0) {
    fhem("set Restmuell $dayDiffR");
  }
  }
}
1;


Gruß Martin

Dr. Boris Neubert

Zitat von: Tommy82 am 17 Januar 2015, 18:08:23
Hi, du musst in deinem Kalender das verbose Attribute 2 setzen, standartmässig ist das nicht gesetzt, und es greift das globale verbose.

Seltsammwer weisse hab ich aktuell auch mit gesetztem verbose 2 recht viele Log einträge, das war aber ursprünglich nicht so

Die Logeinträge kommen nicht vom Calendar-Modul sondern aus der sub fhem() in Zeile 2970 von fhem.pl durch den Aufruf von fhem() in Euren Skripten. In besagter Routine ist noch das alte Logging drin. Ich schlage vor, dass Ihr Rudi darauf aufmerksam macht.

Viele Grüße
Boris
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

Tommy82

Kann einer Rudi informieren, ich kann ihm leider keine PM schicken

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

betateilchen

Rudi hat aber unter seinen Profildaten bei jedem Beitrag nicht nur die Sprechblase (PN) sondern auch den Briefumschlag für email.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Dr. Boris Neubert

Guckt Ihr bitte hier: http://forum.fhem.de/index.php/topic,32384.0.html

Und dann bitte erst wieder melden, wenn Ihr sicher seid, dass trotz globalem verbose 2 immer noch Meldungen mit Level 3 aus dem fhem()-Aufruf im Log stehen.

Viele Grüße
Boris
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

RPi_Fhem_Fan

Hallo Boris,

vielen herzlichen Dank. Du hast uns/mir einmal mehr weitergeholfen  ;)
Ich habe nun alle Aufrufe in 99_myUtils.pm Script für den Müllkalender angepasst:
fhem("get Abfall summary $uid",1);

Zitat von Rudi:
Zitatfhem() protokolliert im Log den Rueckgabewert, falls gesetzt, es sei denn, man ruft fhem() mit einem weiteren Parameter ($silent) auf, der wahr ist.
http://forum.fhem.de/index.php?topic=13309.0

Damit werden nun vom Abfallkalender keine Log-Einträge erzeugt.
Das attr global verbose 3 kann somit wieder in der fhem.cfg gesetzt werden.

Gruß Martin

Tommy82

mit dem globalen attribute verbose 2 gibts keine Meldungen im log.

Hab es jetzt auch mal so abgeändert fhem("get AbfallA summary $uid",1); und den globalen verbose wieder auf 3 gesetzt, mal sehen was passiert
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

Tommy82

Hi,
also ich habe heute mit globalem verbose 3 und verbose 1 im Kalander wieder jede Menge einträge im Log
2015.01.20 06:59:35.114 1: PERL WARNING: Argument "" isn't numeric in subtraction (-) at ./FHEM/99_myUtils.pm line 286.
2015.01.20 06:59:35.115 1: PERL WARNING: Argument "" isn't numeric in subtraction (-) at ./FHEM/99_myUtils.pm line 290.
2015.01.20 06:59:35.116 1: PERL WARNING: Argument "" isn't numeric in subtraction (-) at ./FHEM/99_myUtils.pm line 294.
2015.01.20 06:59:35.116 1: PERL WARNING: Argument "" isn't numeric in subtraction (-) at ./FHEM/99_myUtils.pm line 298.
2015.01.20 06:59:35.120 3: get AbfallA start 0f14492d8971e7b7e1c51882ad52aafa : 13.05.2015 00:00:00
2015.01.20 06:59:35.121 3: 1431468000
2015.01.20 06:59:35.163 3: get AbfallA start 17a646cb3e353fa16cacf52829c5f3d5 : 24.06.2015 00:00:00
2015.01.20 06:59:35.187 3: get AbfallA start 1c9ca202d5df6f39e2c6d8099bf9455e : 16.09.2015 00:00:00
2015.01.20 06:59:35.212 3: get AbfallA start 1d6a3fc8e6144cb5e970783f2893ec3d : 02.09.2015 00:00:00
2015.01.20 06:59:35.236 3: get AbfallA start 24fee0fb46f6565f90f3ff7c35547ab4 : 29.04.2015 00:00:00


Die Perl warnungen kommen aus diesen Zeilen
  my $dayDiffB = floor(($dtBio - $t) / 60 / 60 / 24 + 1);
my $dayDiffG = floor(($dtYellow - $t) / 60 / 60 / 24 + 1);
my $dayDiffR = floor(($dtRest - $t) / 60 / 60 / 24 + 1);
my $dayDiffP = floor(($dtPapier - $t) / 60 / 60 / 24 + 1);


Was ist da noch falsch?

Hab wie RPi_Fhem_Fan geschrieben hat die Einträeg so abgeändert:
fhem("get AbfallA summary $uid",1);

Wieso bekomme ich noch die Log einträge bei verbose 1 im Kalandermodul?

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

Dr. Boris Neubert

Die 3er-Meldungen kommen aus fhem() in fhem.pl und nicht aus dem Kalender-Modul, so dass global verbose 3 greift. Hast Du 99_myUtils.pm nach der Änderung auch neu geladen. Bitte prüfe zunächst, ob sowohl die Verbose-Level wie von Dir beschrieben greifen als auch die Änderung aktiv ist.

Viele Grüße
Boris
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

Tommy82

Hi, ja ich hab ein reload der 99_myUtils durchgeführt und auch einen fhem neustart, damit sollte ja auf jedenfall alles neugeladen sein.
Wie gesagt mit dem globalen verbose 2 bekomme ich auch keine einträge mehr im Log, aber mit dem globalen verbose 3 sind sie wieder da. Ich warte aber jetzt morgen nochmal ab, vieleicht ist doch noch irgendwas beim neustart schief gelaufen.
Ich meld mich dann morgen wieder
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

Dr. Boris Neubert

Hallo,

wenn Du alles richtig gemacht hast, sollte beispielsweise ein


{ fhem("list global",1) }


auf der FHEM-Kommandozeile nichts ins Log schreiben. Gerade getestet.

Grüße
Boris
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

Tommy82

Die Ausgabe ist dann:
ZitatInternals:
   DEF        <no definition>
   NAME       global
   NR         1
   STATE      <no definition>
   TYPE       Global
   currentlogfile ./log/fhem-2015-01-20.log
   logfile    ./log/fhem-%Y-%m-%d.log
Attributes:
   autoload_undefined_devices 1
   configfile fhem.cfg
   logfile    ./log/fhem-%Y-%m-%d.log
   modpath    .
   motd       SecurityCheck:

WEBphone,WEBtablet has no basicAuth attribute.
telnetPort has no password/globalpassword attribute.

Restart FHEM for a new check if the problem is fixed,
or set the global attribute motd to none to supress this message.

   mseclog    1
   nrarchive  14
   sendStatistics never
   stacktrace 0
   statefile  ./log/fhem.save
   uniqueID   ./FHEM/FhemUtils/uniqueID
   userattr   devStateIcon devStateStyle fm_type fp_Badezimmer fp_Buero fp_Einbruchalarm fp_Fenster fp_Feueralarm fp_Flur_Erdgeschoss fp_Flur_Keller fp_Flur_Obergeschoss fp_Fritz fp_Gaeste_WC1 fp_Heizung fp_Home fp_Kellerbar fp_Kinderzimmer1 fp_Kueche1 fp_Reciever fp_Schlafzimmer fp_Server fp_Wohnzimmer icon sortby webCmd widgetOverride
   verbose    3
   version    $Id: fhem.pl 7542 2015-01-13 09:43:33Z rudolfkoenig $

und im Log gibts keinen eintrag
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

Dr. Boris Neubert

Sehr gut, so soll es sein.

Wenn Du ALLE Aufrufe von fhem() in Deinen Utils auch entsprechend mit dem optionalen zweiten Parameter 1 versehen hast, sollte auch (bis auf die PERL WARNINGs wegen Problemen im Skript) sonst kein Gespräch mehr im Log stehen.

Viele Grüße
Boris
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

Tommy82

Danke für deine Hilfe, dann guck ich morgen mal ob der Log keine Einträge mehr hat.
Ja die Perl Warnungen muss ich auch noch weg bekommen....
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

Tommy82

Leider ist auch heute Morgen der Log wieder voll mit
2015.01.21 00:00:00.034 3: get AbfallA start 0f14492d8971e7b7e1c51882ad52aafa : 13.05.2015 00:00:00
2015.01.21 00:00:00.038 3: 1431468000
2015.01.21 00:00:00.073 3: get AbfallA start 17a646cb3e353fa16cacf52829c5f3d5 : 24.06.2015 00:00:00
2015.01.21 00:00:00.096 3: get AbfallA start 1c9ca202d5df6f39e2c6d8099bf9455e : 16.09.2015 00:00:00
2015.01.21 00:00:00.118 3: get AbfallA start 1d6a3fc8e6144cb5e970783f2893ec3d : 02.09.2015 00:00:00
2015.01.21 00:00:00.141 3: get AbfallA start 24fee0fb46f6565f90f3ff7c35547ab4 : 29.04.2015 00:00:00
2015.01.21 00:00:00.142 3: 1430258400
2015.01.21 00:00:00.164 3: get AbfallA start 25b6ff2d1a3ac6f7b9c3d0f0e0343efa : 04.03.2015 00:00:00
2015.01.21 00:00:00.165 3: 1425423600
2015.01.21 00:00:00.187 3: get AbfallA start 2980cc66e6ccc6c7c2ddcb360f0a4569 : 19.08.2015 00:00:00
2015.01.21 00:00:00.252 3: get AbfallA start 323acfc40891e76af1d7e6e25569cbab : 19.02.2015 00:00:00


Also irgendwo gibts da leider doch noch ein Problem mit dem verbose,das globale verbose ist 3, und das des Calenders ist 1

Weiterhin steht heute MOrgen der Müllkalender für Bio wieder auf 14, obwohl er heute auf 0 stehen sollte, da er heute abgeholt wird, was könnte ich da noch falsch gemacht haben?
Die entsprechende Zeile im Kalender sieht so aus:
85799a7a8c7899a39b64fccf18b9e6a8   known    start                     21.01.2015 00:00:00-22.01.2015 00:00:00 Bioabfall Limbach Hauptstraße
und in der 99_myUtils so
  foreach my $uid (@uids) {
    my $Kalendertext = fhem("get AbfallA summary $uid",1);
    if ($Kalendertext =~ /Bioabfall/) {
        my $dt = fhem("get AbfallA 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);
        }


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