Abfall-Modul: keine Readings für "now und "now_text"?

Begonnen von freddie, 06 Mai 2018, 21:01:17

Vorheriges Thema - Nächstes Thema

CoolTux

@ValleBL
Nils hat Recht. Ohne ein list kann man Dir nicht helfen. Das Modul wird ausserhalb des FHEM Cores gepflegt und scheint schon länger nicht mehr verändert worden zu sein. Im Code kann ich aber zu mindest das setzen eines Reading now und now_text finden. Voraussetzung ist das bis zum Termin 0 Tage sind.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

ValleBL

#16
Mein doif:
([6:30] and [Muelltonnen:now_text] ne "")
( set teleBot _msg Heute wird [Muelltonnen:now_text] abgeholt)


Readings vom Abfall Modul
Biomuell_date
14.06.2019
2019-06-05 11:21:34
Biomuell_days
9
2019-06-05 11:21:34
Biomuell_description
Leerungserinnerung
2019-06-05 11:21:34
Biomuell_location
REUTHSTRASSE
2019-06-05 11:21:34
Biomuell_text
Biomuell
2019-06-05 11:21:34
Biomuell_uid
908432
2019-06-05 11:21:34
Biomuell_weekday
Samstag
2019-06-05 11:21:34
Papier_date
25.06.2019
2019-06-05 11:21:34
Papier_days
20
2019-06-05 11:21:34
Papier_description
Leerungserinnerung
2019-06-05 11:21:34
Papier_location
REUTHSTRASSE
2019-06-05 11:21:34
Papier_text
Papier
2019-06-05 11:21:34
Papier_uid
908455
2019-06-05 11:21:34
Papier_weekday
Mittwoch
2019-06-05 11:21:34
Restmuell_date
17.06.2019
2019-06-05 11:21:34
Restmuell_days
12
2019-06-05 11:21:34
Restmuell_description
Leerungserinnerung
2019-06-05 11:21:34
Restmuell_location
REUTHSTRASSE
2019-06-05 11:21:34
Restmuell_text
Restmuell
2019-06-05 11:21:34
Restmuell_uid
90846
2019-06-05 11:21:34
Restmuell_weekday
Dienstag
2019-06-05 11:21:34
ftui_datum
14.06.2019
2019-06-05 11:21:34
ftui_next
Biomuell_9
2019-06-05 11:21:34
next
Biomuell_9
2019-06-05 11:21:34
next_date
14.06.2019
2019-06-05 11:21:34
next_days
9
2019-06-05 11:21:34
next_description
Leerungserinnerung
2019-06-05 11:21:34
next_location
REUTHSTRASSE
2019-06-05 11:21:34
next_text
Biomuell
2019-06-05 11:21:34
next_weekday
Samstag
2019-06-05 11:21:34
state
9
2019-06-05 11:21:34


Ich hab am Tag der Abholung alle Readings überprüft und konnte nichts von einem now reading finden...
Die Benachrichtigung am Vorabend funktioniert einwandfrei.

Viele Grüße

CoolTux

Leider kann man so nichts erkennen

list ist ein FHEM Befehl welcher im FHEMWEB Konsole eingegeben werden kann

list DEVICENAME

Bitte noch einmal.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

nils_

so ist es nicht wirklich lesbar... //cooltux war schneller


wie oft bzw. wann aktualisierst du dein calender device??
viele Wege in FHEM es gibt!

ValleBL

Hi,

der Befehl war mir leider noch nicht bewusst.
Hier nun die listen vom Abfallmodul (Muelltonnen) und dem doif für die morgendliche Benachrichtigung:



Internals:
   DEF        Muelltonnen_Kalender 3600
   FUUID      5c437226-f33f-c9fe-244c-29f017deec3f9b54
   KALENDER   Muelltonnen_Kalender
   NAME       Muelltonnen
   NOTIFYDEV  Muelltonnen_Kalender
   NR         38
   NTFY_ORDER 50-Muelltonnen
   STATE      Biomuell in 9 Tag(en)
   TYPE       ABFALL
   OLDREADINGS:
   READINGS:
     2019-06-05 13:21:34   Biomuell_date   14.06.2019
     2019-06-05 13:21:34   Biomuell_days   9
     2019-06-05 13:21:34   Biomuell_description Leerungserinnerung
     2019-06-05 13:21:34   Biomuell_location REUTHSTRASSE
     2019-06-05 13:21:34   Biomuell_text   Biomuell
     2019-06-05 13:21:34   Biomuell_uid    908432
     2019-06-05 13:21:34   Biomuell_weekday Samstag
     2019-06-05 13:21:34   Papier_date     25.06.2019
     2019-06-05 13:21:34   Papier_days     20
     2019-06-05 13:21:34   Papier_description Leerungserinnerung
     2019-06-05 13:21:34   Papier_location REUTHSTRASSE
     2019-06-05 13:21:34   Papier_text     Papier
     2019-06-05 13:21:34   Papier_uid      908455
     2019-06-05 13:21:34   Papier_weekday  Mittwoch
     2019-06-05 13:21:34   Restmuell_date  17.06.2019
     2019-06-05 13:21:34   Restmuell_days  12
     2019-06-05 13:21:34   Restmuell_description Leerungserinnerung
     2019-06-05 13:21:34   Restmuell_location REUTHSTRASSE
     2019-06-05 13:21:34   Restmuell_text  Restmuell
     2019-06-05 13:21:34   Restmuell_uid   90846
     2019-06-05 13:21:34   Restmuell_weekday Dienstag
     2019-06-05 13:21:34   ftui_datum      14.06.2019
     2019-06-05 13:21:34   ftui_next       Biomuell_9
     2019-06-05 13:21:34   next            Biomuell_9
     2019-06-05 13:21:34   next_date       14.06.2019
     2019-06-05 13:21:34   next_days       9
     2019-06-05 13:21:34   next_description Leerungserinnerung
     2019-06-05 13:21:34   next_location   REUTHSTRASSE
     2019-06-05 13:21:34   next_text       Biomuell
     2019-06-05 13:21:34   next_weekday    Samstag
     2019-06-05 13:21:34   state           9
Attributes:
   calendarname_praefix 0
   date_style date
   delimiter_reading |
   delimiter_text_reading und
   event-on-change-reading .*
   room       00_Outdoor
   stateFormat next_text in next_days Tag(en)
   userReadings ftui_datum {ReadingsVal("Muelltonnen","now_text","") eq "" ? datumHeuteMorgen(ReadingsVal("Muelltonnen","next_date","")) : "heute";},ftui_next {ReadingsVal("Muelltonnen","now_text","") eq "" ? ReadingsVal("Muelltonnen","next","") : ReadingsVal("Muelltonnen","now","")."_0";;}
   weekday_mapping Montag Dienstag Mittwoch Donnerstag Freitag Samstag Sonntag


Internals:
   DEF        ([6:30] and [Muelltonnen:now_text] ne "")
(set teleBot _msg Heute wird [Muelltonnen:now_text] abgeholt)
   FUUID      5cae3f46-f33f-c9fe-d9f4-4b5d8a37b715e521
   MODEL      FHEM
   NAME       di_AbfallHeute
   NR         116
   NTFY_ORDER 50-di_AbfallHeute
   STATE      cmd_1
   TYPE       DOIF
   VERSION    19303 2019-05-01 08:47:16
   READINGS:
     2019-06-05 13:21:34   Device          Muelltonnen
     2019-06-05 12:25:34   cmd             1
     2019-06-05 12:25:34   cmd_event       set_cmd_1
     2019-06-05 12:25:34   cmd_nr          1
     2019-06-05 12:21:30   mode            enabled
     2019-06-05 12:25:34   state           cmd_1
     2019-06-05 12:21:30   timer_01_c01    06.06.2019 06:30:00
   Regex:
     accu:
   attr:
     cmdState:
   condition:
     0          ::DOIF_time_once($hash,0,$wday) and ::ReadingValDoIf($hash,'Muelltonnen','now_text') ne ""
   days:
   devices:
     0           Muelltonnen
     all         Muelltonnen
   do:
     0:
       0          set teleBot _msg Heute wird [Muelltonnen:now_text] abgeholt
     1:
   helper:
     event      Biomuell_days: 9,Biomuell_text: Biomuell,Biomuell_date: 14.06.2019,Biomuell_weekday: Samstag,Biomuell_location: REUTHSTRASSE,Biomuell_description: Leerungserinnerung,Biomuell_uid: 908432,next: Biomuell_9,next_days: 9,next_text: Biomuell,next_date: 14.06.2019,next_weekday: Samstag,next_location: REUTHSTRASSE,next_description: Leerungserinnerung,9,Papier_days: 20,Papier_text: Papier,Papier_date: 25.06.2019,Papier_weekday: Mittwoch,Papier_location: REUTHSTRASSE,Papier_description: Leerungserinnerung,Papier_uid: 908455,Restmuell_days: 12,Restmuell_text: Restmuell,Restmuell_date: 17.06.2019,Restmuell_weekday: Dienstag,Restmuell_location: REUTHSTRASSE,Restmuell_description: Leerungserinnerung,Restmuell_uid: 90846,ftui_datum: 14.06.2019
     globalinit 1
     last_timer 1
     sleeptimer -1
     triggerDev Muelltonnen
     DOIF_eventas:
       cmd_nr: 1
       cmd: 1
       cmd_event: set_cmd_1
       state: cmd_1
     triggerEvents:
       Biomuell_days: 9
       Biomuell_text: Biomuell
       Biomuell_date: 14.06.2019
       Biomuell_weekday: Samstag
       Biomuell_location: REUTHSTRASSE
       Biomuell_description: Leerungserinnerung
       Biomuell_uid: 908432
       next: Biomuell_9
       next_days: 9
       next_text: Biomuell
       next_date: 14.06.2019
       next_weekday: Samstag
       next_location: REUTHSTRASSE
       next_description: Leerungserinnerung
       9
       Papier_days: 20
       Papier_text: Papier
       Papier_date: 25.06.2019
       Papier_weekday: Mittwoch
       Papier_location: REUTHSTRASSE
       Papier_description: Leerungserinnerung
       Papier_uid: 908455
       Restmuell_days: 12
       Restmuell_text: Restmuell
       Restmuell_date: 17.06.2019
       Restmuell_weekday: Dienstag
       Restmuell_location: REUTHSTRASSE
       Restmuell_description: Leerungserinnerung
       Restmuell_uid: 90846
       ftui_datum: 14.06.2019
     triggerEventsState:
       Biomuell_days: 9
       Biomuell_text: Biomuell
       Biomuell_date: 14.06.2019
       Biomuell_weekday: Samstag
       Biomuell_location: REUTHSTRASSE
       Biomuell_description: Leerungserinnerung
       Biomuell_uid: 908432
       next: Biomuell_9
       next_days: 9
       next_text: Biomuell
       next_date: 14.06.2019
       next_weekday: Samstag
       next_location: REUTHSTRASSE
       next_description: Leerungserinnerung
       state: 9
       Papier_days: 20
       Papier_text: Papier
       Papier_date: 25.06.2019
       Papier_weekday: Mittwoch
       Papier_location: REUTHSTRASSE
       Papier_description: Leerungserinnerung
       Papier_uid: 908455
       Restmuell_days: 12
       Restmuell_text: Restmuell
       Restmuell_date: 17.06.2019
       Restmuell_weekday: Dienstag
       Restmuell_location: REUTHSTRASSE
       Restmuell_description: Leerungserinnerung
       Restmuell_uid: 90846
       ftui_datum: 14.06.2019
   internals:
   intervalfunc:
   itimer:
   localtime:
     0          1559795400
   readings:
     0           Muelltonnen:now_text
     all         Muelltonnen:now_text
   realtime:
     0          06:30:00
   time:
     0          6:30
   timeCond:
     0          0
   timer:
     0          0
   timers:
     0           0
   trigger:
   triggertime:
     1559795400:
       localtime  1559795400
       hash:
   uiState:
   uiTable:
Attributes:
   do         always
   room       92_System

Guddi

Guten Abend,

es wurde hier zwar lange nicht mehr über das Thema geschrieben, jedoch wurde es meiner Meinung nach auch nie zufriedenstellend beantwortet. Ich stand neulich vor dem gleichen Problem und meine, im Code des Moduls den Grund für das Fehlverhalten gefunden zu haben.

Zunächst einmal: Das Modul funktioniert wie gewünscht, solange die Abholzeiten der Mülltonnen eine zeitliche Ausdehnung haben, also zum Beispiel 21.02.2021 - 6-9 Uhr. "*_days" springt dann auf 0, sobald der Startzeitpunkt des Termins überschritten wird. Das steht in Modul "ABFALL_getEvents.pm" in den Zeilen 259, 514, 546 und 619:

my $dayDiff = floor(($eventDate - time) / 60 / 60 / 24 + 1);

Solange $eventDate weniger als einen Tag in der Vergangenheit liegt, bleibt der Wert in Klammern zwischen Null und eins und floormacht daraus dann eine Null.

Das Problem beginnt, wenn die Abholzeiten der Mülltonnen keine zeitliche Ausdehnung kennen. In meinem Kalender sieht das beispielsweise so aus:

BEGIN:VEVENT
[b]DTSTART;VALUE=DATE:20210211[/b]
SUMMARY:Biotonne
PRIORITY:0
[b]DTEND;VALUE=DATE:20210211[/b]
UID:44a010cdc602e50800699afea14b0389
X-ID:900011054
DTSTAMP:20210211T010000Z
CLASS:PUBLIC
TRANSP:TRANSPARENT
STATUS:CONFIRMED
X-NOLISEXPORT:1
X-EXTRAKATEGORIE-ID:
X-EXTRAKATEGORIE:
BEGIN:VALARM
ACTION:DISPLAY
DESCRIPTION:Erinnerung Biotonne
TRIGGER:-PT720M
END:VALARM
END:VEVENT


Die Code-Zeile weiter oben würde damit zurechtkommen, aber das Problem liegt daran, dass das Modul Termine, die in der Vergangenheit liegen, nicht mehr aus dem Kalender abruft. Das erkennt man in Zeile 111:

# Action A04: get next uids for events
@termine = split(/\n/,CallFn($calendername, "GetFn", $defs{$calendername},("-", 'events', 'format:custom="$U"', 'series:next')));


"series:next" sorgt nämlich dafür, dass nur das jeweils nächste und in der Zukunft liegende Element einer Terminserie aus dem Kalender abgerufen wird. Das lässt sich in der Dokumentation des Kalender-Moduls nachlesen.

In meinem Fall ist es also so, dass der Code bis zum 10.02.2021 um 23:59:59 Uhr eine "1" für $dayDiff errechnet und danach ab dem 11.02.2021 00:00:01 Uhr diesen Eintrag Kalendereintrag nicht mehr abruft, weil er in der Vergangenheit liegt. Stattdessen wird nur der nächste Eintrag der Serie abgerufen, der wiederum vier Wochen in der Zukunft liegt. Als Konsequenz springt der Wert direkt von 1 auf 28, ohne dass er über 0 gegangen wäre.

Als "dirty hack" für mich privat habe ich Zeile 111 also einfach entsprechend angepasst:

@termine = split(/\n/,CallFn($calendername, "GetFn", $defs{$calendername},("-", 'events', 'format:custom="$U")));

Das führt zwar dazu, dass das Modul nun immer alle im Kalender eingetragenen Termine einer Serie abruft und abarbeitet, doch das hat keine nennenswerten Geschwindigkeitseinbußen zur Folge. Außerdem werden in der Vergangenheit liegende Termine, d.h. solche mit "$dayDiff < 0" im Code nicht weiter berücksichtigt und beeinflussen daher das Ergebnis nicht weiter (Zeile 263ff).

# Condition C06: is start time in the past
if (
$dayDiff < 0
)
{
   # Rule R07 ---->
   
   # Trace ---->
   Log3 $name, 5, "ABFALL_getEvents($name) - ABFALL_getEvents, 20180613.123304, 7, 19";
   # Trace <----
   
   # Action A13/03: step / 3 / start time step
   $step =  3
   
   # Rule R07 <----
}


Die saubere Lösung wäre es, beispielsweise mithilfe eines Attributs zwischen diesen beiden Abrufmethoden aus dem Kalender zu unterscheiden. Dann könnten User mit Kalendern ohne zeitliche Ausdehnung der Termine einfach durch setzen eines Attributs die Logik anpassen. Ich verstehe dazu zu wenig von FHEM, Perl und GitHub, aber vielleicht liest ja der Autor von ABFALL.pm diesen Beitrag oder jemand anders fühlt sich berufen.

maddhin

Ich habe jetzt nicht den ganze Thread im Detail gelesen, aber gerade das gleiche Problem gehabt:

Die Lösung scheint zu sein, den Kalender (mindestens?) täglich zu updaten (3600). Ich hatte den Kalender davor nur jede Woche geupdatet (86400), da sich die Termine ja quasi 12 Monate nicht ändern.

Scheinbar wir das "now" Reading vom Abfallmodul nur bei Update des Kalenders getriggert! Eigentlich kurios, weil es dann ja wirklich fast sinnlos ist ein eigenes Abfallmodul zu haben...

Mal sehen, ob das bei mir jetzt funkt..:)


Nobbynews

Zitat von: maddhin am 11 März 2021, 08:50:22
Die Lösung scheint zu sein, den Kalender (mindestens?) täglich zu updaten (3600). Ich hatte den Kalender davor nur jede Woche geupdatet (86400), da sich die Termine ja quasi 12 Monate nicht ändern.
Beim Calender-Device bedeutet die Angabe des Intervalls:
86400 Sekunden sind 1 Tag
3600 Sekunden sind 1 Stunde

Die Readings now und now_text werden nur dann erzeugt, wenn es ein Ereignis an dem Tag gibt. Gibt es kein Ereignis, dass sind bei mir diese Readings nicht vorhanden.

maddhin

Zitat von: Nobbynews am 11 März 2021, 09:48:25
86400 Sekunden sind 1 Tag
3600 Sekunden sind 1 Stunde

stimmt  :-[

Aber irgendwie muss der Kalender (an dem Tag "0") wohl vor dem DOIF einmal geupdatet werden, damit das Abfallmodul funktioniert. 3600 wird ja im Wiki auch so angegeben und empfohlen.

Jedenfalls wurden bei mir die now Readings sofort erstellt, als ich ein Update des Kalenders durchgeführt habe. Wahrscheinlich war meine tägliches Update irgendwann am Nachmittag o.ä. und das 0700 DOIF wurde deswegen nicht getriggert.

Sind jetzt leider 19 Tage bis zum nächsten Event. Hoffe es funktioniert dann jetzt :)

Jorche

Hallo maddhin,
hat sich deine Lösung als gut erwiesen?
Ich habe gerade genau das Problem, dass bei mir nie 0 Tage kommen und damit auch nie das "now" Reading.
Leider zeigt es bei mir keinen Erfolg das Update auf 3600 ode 10800 ff zu stellen.
Bin für alle Tipps dankbar.
Grüße

maddhin

Hm, kann ich jetzt leider im Detail nicht mehr nachvollziehen- im Moment steht es bei mir immer noch bei 3600.
Ich kann mich dunkel daran erinnern, dass es da irgendwie ein Timing Problem gab - dh wenn das Kalenderupdate nach der doif-Zeit kam ging es nicht.
Update jede Stunde ist eigentlich total übertrieben, aber bei mir geht es und stellt sicher, dass doif geht.
Ggf nochmal die ganze Konfig prüfen.