Guten Morgen.
Ich möchte gerne damit beginnen, ein Modul für FHEM zu entwickeln.
Die Idee ist, via Web eine JSON-Liste mit Terminen von MyMüll herunterzuladen. Dabei sind drei Parameter
- City- und AreaID für myMüll
- Aktualisierungsintervall
bei der Definition des Moduls anzugeben. Dieses JSON-File wird in einen ICalendar konvertiert und in eine ics-Datei geschrieben. Soweit sollte es meiner Ansicht nach in FHEM kein Problem sein.
Nun zu meinen Fragen:
1. Anschließend möchte ich aus dem Modul heraus einen FHEM-Calendar (das bestehende Modul) in Verbindung mit dem erzeugten File automatisiert erstellen.
2. Bei jeder Aktualisierung wird Frage 1 bereinigt und neu durchgeführt.
3. Rechtlich: Da ich den Webservice eines Anbieters nutze: Benötige ich eine Genehmigung, wenn ich solch ein Modul für FHEM bereitstelle?
Zu 1. und 2.: Wird dieser Workflow in FHEM umsetzbar sein oder gibt es Beschränkungen?
Vielen Dank für Eure Unterstützung.
LuckyApo
Bist du mit deinem Vorhaben weitergekommen?
Meine Gemeinde ist letztes Jahr auf MyMüll umgestiegen, was ansich ganz nett ist (zumindest die App) - allerdings ist die ical-Verfügbarkeit ein Graus. Zurzeit importiere ich einmal im Jahr die zur Verfügung gestellte ical-Datei (https://mymuell.jumomind.com/webmodul/wegberg/) in einen privaten Kalender, welche dann FHEM zur Verfügung gestellt wird. Das nervt mich trotzdem, auch weil die Daten im Internet vorliegen und man von Aktualisierungen -außer in der App selbst- nichts mitbekommt.
Aus dem ioBroker (https://github.com/ioBroker/AdapterRequests/issues/246) und HomeKit (https://forum.smartapfel.de/forum/thread/7309-abfallkalender-einrichten-my-muell-ical/) Bereich habe ich dann etwas gefunden, wie man zumindest eine JSON Struktur erhält - und die kann man mit dem JsonMod-Modul auslesen.
Dazu benötigt man zunächst die ID der Gemeinde - die sucht man sich in diesem JSON-String raus:
https://mymuell.jumomind.com/mmapp/api.php?r=cities
Wegberg hat die id 66005 (wichtig ist auch auf das attribut has_streets = true zu achten; nur dann gibt es imho noch Straßen die in Abfuhrbezirke unterteilt sind; ansonsten ist der Abfuhrbezirk hier unter area_id hinterlegt).
Mit der (city_) id ruft man das Straßenverzeichnis auf:
https://mymuell.jumomind.com/mmapp/api.php?r=streets&city_id=66005
und sucht nach der Straße und notiert sich die area_id. Die Straße Am Gaskessel hat die area_id 2734.
Mit city_id und area_id kann man dann den Link generieren für das JsonMod Modul:
https://mymuell.jumomind.com/webservice.php?idx=termins&city_id=66005&area_id=2734&ws=3
Basierend auf den Link kann man das JsonMod-Device anlegen. Man filtert hierbei auf die Müllarten, die einen Interessieren.
Die Müllarten haben eigene IDs welche man unter Angabe der city_id unter diesem link findet:
https://mymuell.jumomind.com/mmapp/api.php?r=trash&city_id=66005
Über die readingsList generiert man sich die Readings:
multi(jsonPath("\$.._data[?(\@.cal_garbage_type in ['WEG_PAP', 'WEG_BIOTON', 'WEG_REST', 'WEG_LEICHT'])]"), concat(property('cal_garbage_type'), "_", property('cal_date')), property('cal_date_normal'));
das ganze Device als raw
defmod mymuelltest JsonMod https://mymuell.jumomind.com/webservice.php?idx=termins&city_id=66005&area_id=2734&ws=3
attr mymuelltest interval 0 8 * * *
attr mymuelltest readingList multi(jsonPath("\$.._data[?(\@.cal_garbage_type in ['WEG_PAP', 'WEG_BIOTON', 'WEG_REST', 'WEG_LEICHT'])]"), concat(property('cal_garbage_type'), "_", property('cal_date')), property('cal_date_normal'));;
attr mymuelltest update-on-start 0
attr mymuelltest webCmd reread
Generiert folgende Readings:
READINGS:
2022-01-25 15:59:18 .computedReadings WEG_LEICHT_2022-06-13,WEG_BIOTON_2022-06-01,WEG_LEICHT_2022-10-17,WEG_BIOTON_2022-01-12,WEG_LEICHT_2022-09-05,WEG_REST_2022-11-28,WEG_BIOTON_2022-03-09,WEG_BIOTON_2022-05-04,WEG_BIOTON_2022-11-16,WEG_BIOTON_2022-05-18,WEG_BIOTON_2022-09-21,WEG_LEICHT_2022-11-14,WEG_REST_2022-10-31,WEG_BIOTON_2022-09-07,WEG_REST_2022-05-02,WEG_LEICHT_2022-12-27,WEG_PAP_2022-10-10,WEG_LEICHT_2022-09-19,WEG_BIOTON_2022-07-27,WEG_LEICHT_2022-05-30,WEG_REST_2022-03-21,WEG_PAP_2022-08-15,WEG_REST_2022-07-11,WEG_LEICHT_2022-11-28,WEG_PAP_2022-07-18,WEG_BIOTON_2022-03-23,WEG_REST_2022-12-12,WEG_LEICHT_2022-07-25,WEG_LEICHT_2022-01-10,WEG_REST_2022-10-17,WEG_REST_2022-11-14,WEG_BIOTON_2022-04-21,WEG_BIOTON_2022-08-24,WEG_BIOTON_2022-11-30,WEG_LEICHT_2022-04-04,WEG_BIOTON_2022-04-06,WEG_LEICHT_2022-03-07,WEG_REST_2022-09-05,WEG_LEICHT_2022-03-21,WEG_BIOTON_2022-10-19,WEG_REST_2022-08-08,WEG_PAP_2022-05-24,WEG_REST_2022-03-07,WEG_REST_2022-09-19,WEG_LEICHT_2022-10-31,WEG_REST_2022-01-10,WEG_LEICHT_2022-04-19,WEG_LEICHT_2022-05-16,WEG_PAP_2022-06-20,WEG_BIOTON_2022-12-14,WEG_REST_2022-06-13,WEG_BIOTON_2022-12-29,WEG_REST_2022-06-27,WEG_REST_2022-10-04,WEG_BIOTON_2022-08-10,WEG_REST_2022-01-24,WEG_LEICHT_2022-06-27,WEG_LEICHT_2022-08-08,WEG_REST_2022-02-07,WEG_PAP_2022-01-03,WEG_LEICHT_2022-05-02,WEG_LEICHT_2022-02-21,WEG_REST_2022-08-22,WEG_LEICHT_2022-02-07,WEG_REST_2022-04-04,WEG_REST_2022-05-30,WEG_BIOTON_2022-11-03,WEG_BIOTON_2022-07-13,WEG_REST_2022-07-25,WEG_PAP_2022-03-28,WEG_BIOTON_2022-06-29,WEG_LEICHT_2022-12-12,WEG_BIOTON_2022-06-15,WEG_PAP_2022-04-25,WEG_BIOTON_2022-02-23,WEG_PAP_2022-09-12,WEG_PAP_2022-12-05,WEG_REST_2022-05-16,WEG_LEICHT_2022-07-11,WEG_LEICHT_2022-10-04,WEG_BIOTON_2022-10-06,WEG_REST_2022-04-19,WEG_PAP_2022-01-31,WEG_REST_2022-02-21,WEG_PAP_2022-03-02,WEG_PAP_2022-11-07,WEG_BIOTON_2022-02-09,WEG_LEICHT_2022-08-22,WEG_REST_2022-12-27,WEG_LEICHT_2022-01-24,WEG_BIOTON_2022-01-26
2022-01-25 15:59:18 WEG_BIOTON_2022-01-12 12.01.2022
2022-01-25 15:59:18 WEG_BIOTON_2022-01-26 26.01.2022
2022-01-25 15:59:18 WEG_BIOTON_2022-02-09 09.02.2022
2022-01-25 15:59:18 WEG_BIOTON_2022-02-23 23.02.2022
2022-01-25 15:59:18 WEG_BIOTON_2022-03-09 09.03.2022
2022-01-25 15:59:18 WEG_BIOTON_2022-03-23 23.03.2022
2022-01-25 15:59:18 WEG_BIOTON_2022-04-06 06.04.2022
2022-01-25 15:59:18 WEG_BIOTON_2022-04-21 21.04.2022
2022-01-25 15:59:18 WEG_BIOTON_2022-05-04 04.05.2022
2022-01-25 15:59:18 WEG_BIOTON_2022-05-18 18.05.2022
2022-01-25 15:59:18 WEG_BIOTON_2022-06-01 01.06.2022
2022-01-25 15:59:18 WEG_BIOTON_2022-06-15 15.06.2022
2022-01-25 15:59:18 WEG_BIOTON_2022-06-29 29.06.2022
2022-01-25 15:59:18 WEG_BIOTON_2022-07-13 13.07.2022
2022-01-25 15:59:18 WEG_BIOTON_2022-07-27 27.07.2022
2022-01-25 15:59:18 WEG_BIOTON_2022-08-10 10.08.2022
2022-01-25 15:59:18 WEG_BIOTON_2022-08-24 24.08.2022
2022-01-25 15:59:18 WEG_BIOTON_2022-09-07 07.09.2022
2022-01-25 15:59:18 WEG_BIOTON_2022-09-21 21.09.2022
2022-01-25 15:59:18 WEG_BIOTON_2022-10-06 06.10.2022
2022-01-25 15:59:18 WEG_BIOTON_2022-10-19 19.10.2022
2022-01-25 15:59:18 WEG_BIOTON_2022-11-03 03.11.2022
2022-01-25 15:59:18 WEG_BIOTON_2022-11-16 16.11.2022
2022-01-25 15:59:18 WEG_BIOTON_2022-11-30 30.11.2022
2022-01-25 15:59:18 WEG_BIOTON_2022-12-14 14.12.2022
2022-01-25 15:59:18 WEG_BIOTON_2022-12-29 29.12.2022
2022-01-25 15:59:18 WEG_LEICHT_2022-01-10 10.01.2022
2022-01-25 15:59:18 WEG_LEICHT_2022-01-24 24.01.2022
2022-01-25 15:59:18 WEG_LEICHT_2022-02-07 07.02.2022
2022-01-25 15:59:18 WEG_LEICHT_2022-02-21 21.02.2022
2022-01-25 15:59:18 WEG_LEICHT_2022-03-07 07.03.2022
2022-01-25 15:59:18 WEG_LEICHT_2022-03-21 21.03.2022
2022-01-25 15:59:18 WEG_LEICHT_2022-04-04 04.04.2022
2022-01-25 15:59:18 WEG_LEICHT_2022-04-19 19.04.2022
2022-01-25 15:59:18 WEG_LEICHT_2022-05-02 02.05.2022
2022-01-25 15:59:18 WEG_LEICHT_2022-05-16 16.05.2022
2022-01-25 15:59:18 WEG_LEICHT_2022-05-30 30.05.2022
2022-01-25 15:59:18 WEG_LEICHT_2022-06-13 13.06.2022
2022-01-25 15:59:18 WEG_LEICHT_2022-06-27 27.06.2022
2022-01-25 15:59:18 WEG_LEICHT_2022-07-11 11.07.2022
2022-01-25 15:59:18 WEG_LEICHT_2022-07-25 25.07.2022
2022-01-25 15:59:18 WEG_LEICHT_2022-08-08 08.08.2022
2022-01-25 15:59:18 WEG_LEICHT_2022-08-22 22.08.2022
2022-01-25 15:59:18 WEG_LEICHT_2022-09-05 05.09.2022
2022-01-25 15:59:18 WEG_LEICHT_2022-09-19 19.09.2022
2022-01-25 15:59:18 WEG_LEICHT_2022-10-04 04.10.2022
2022-01-25 15:59:18 WEG_LEICHT_2022-10-17 17.10.2022
2022-01-25 15:59:18 WEG_LEICHT_2022-10-31 31.10.2022
2022-01-25 15:59:18 WEG_LEICHT_2022-11-14 14.11.2022
2022-01-25 15:59:18 WEG_LEICHT_2022-11-28 28.11.2022
2022-01-25 15:59:18 WEG_LEICHT_2022-12-12 12.12.2022
2022-01-25 15:59:18 WEG_LEICHT_2022-12-27 27.12.2022
2022-01-25 15:59:18 WEG_PAP_2022-01-03 03.01.2022
2022-01-25 15:59:18 WEG_PAP_2022-01-31 31.01.2022
2022-01-25 15:59:18 WEG_PAP_2022-03-02 02.03.2022
2022-01-25 15:59:18 WEG_PAP_2022-03-28 28.03.2022
2022-01-25 15:59:18 WEG_PAP_2022-04-25 25.04.2022
2022-01-25 15:59:18 WEG_PAP_2022-05-24 24.05.2022
2022-01-25 15:59:18 WEG_PAP_2022-06-20 20.06.2022
2022-01-25 15:59:18 WEG_PAP_2022-07-18 18.07.2022
2022-01-25 15:59:18 WEG_PAP_2022-08-15 15.08.2022
2022-01-25 15:59:18 WEG_PAP_2022-09-12 12.09.2022
2022-01-25 15:59:18 WEG_PAP_2022-10-10 10.10.2022
2022-01-25 15:59:18 WEG_PAP_2022-11-07 07.11.2022
2022-01-25 15:59:18 WEG_PAP_2022-12-05 05.12.2022
2022-01-25 15:59:18 WEG_REST_2022-01-10 10.01.2022
2022-01-25 15:59:18 WEG_REST_2022-01-24 24.01.2022
2022-01-25 15:59:18 WEG_REST_2022-02-07 07.02.2022
2022-01-25 15:59:18 WEG_REST_2022-02-21 21.02.2022
2022-01-25 15:59:18 WEG_REST_2022-03-07 07.03.2022
2022-01-25 15:59:18 WEG_REST_2022-03-21 21.03.2022
2022-01-25 15:59:18 WEG_REST_2022-04-04 04.04.2022
2022-01-25 15:59:18 WEG_REST_2022-04-19 19.04.2022
2022-01-25 15:59:18 WEG_REST_2022-05-02 02.05.2022
2022-01-25 15:59:18 WEG_REST_2022-05-16 16.05.2022
2022-01-25 15:59:18 WEG_REST_2022-05-30 30.05.2022
2022-01-25 15:59:18 WEG_REST_2022-06-13 13.06.2022
2022-01-25 15:59:18 WEG_REST_2022-06-27 27.06.2022
2022-01-25 15:59:18 WEG_REST_2022-07-11 11.07.2022
2022-01-25 15:59:18 WEG_REST_2022-07-25 25.07.2022
2022-01-25 15:59:18 WEG_REST_2022-08-08 08.08.2022
2022-01-25 15:59:18 WEG_REST_2022-08-22 22.08.2022
2022-01-25 15:59:18 WEG_REST_2022-09-05 05.09.2022
2022-01-25 15:59:18 WEG_REST_2022-09-19 19.09.2022
2022-01-25 15:59:18 WEG_REST_2022-10-04 04.10.2022
2022-01-25 15:59:18 WEG_REST_2022-10-17 17.10.2022
2022-01-25 15:59:18 WEG_REST_2022-10-31 31.10.2022
2022-01-25 15:59:18 WEG_REST_2022-11-14 14.11.2022
2022-01-25 15:59:18 WEG_REST_2022-11-28 28.11.2022
2022-01-25 15:59:18 WEG_REST_2022-12-12 12.12.2022
2022-01-25 15:59:18 WEG_REST_2022-12-27 27.12.2022
Die Frage, welche sich mir nun stellt, ist wie es nun von hier weiter geht?
Ist es sinnvoll, das ganze via myUtils funktion in eine lokale ical-Datei zu gießen und dem ABFALL-Modul zur Verfügung zu stellen? Wenn ja, wie würde dies am besten aussehen? Wäre Data::ICal (https://metacpan.org/pod/Data::ICal) eine Option?
Wie müsste JsonMod die Readings aufbauen, damit es im nächsten Schritt besser zu Verarbeiten wäre.
Vielleicht hat noch jemand Ideen, wie man hier weiter machen könnte. Und kann sogar perl-code beisteuern!? ;)
Jetzt hab ich noch etwas rumgespielt und man kann über ein zweites JsonMod-Device die Abfallarten als Text bekommen.
defmod mymuell_trashtypes JsonMod https://mymuell.jumomind.com/mmapp/api.php?r=trash&city_id=66005
attr mymuell_trashtypes interval 0 10 15 * *
attr mymuell_trashtypes disable 1
attr mymuell_trashtypes readingList multi(jsonPath("\$[*]"), property('name'), property('title'));;
attr mymuell_trashtypes update-on-start 0
attr mymuell_trashtypes webCmd reread
Ich denke, das muss man nicht so oft aktualisieren - deswegen steht disable auf 1. Man kann aber über das reread die Daten manuell aktualisieren.
Das ganze ergibt readings wie
READINGS:
2022-01-25 16:47:03 .computedReadings WEG_REST,WEG_BIOTON,WEG_PAP,WEG_GLAS,WEG_SCHADMO,WEG_WEIH,WEG_BIO,WEG_SCHAD,WEG_LEICHT
2022-01-25 16:47:03 WEG_BIO pflanzliche Gartenabfälle
2022-01-25 16:47:03 WEG_BIOTON Biomüll
2022-01-25 16:47:03 WEG_GLAS Glasverpackungen
2022-01-25 16:47:03 WEG_LEICHT Leichtverpackungen
2022-01-25 16:47:03 WEG_PAP Altpapier
2022-01-25 16:47:03 WEG_REST Restabfall
2022-01-25 16:47:03 WEG_SCHAD Schadstoffe
2022-01-25 16:47:03 WEG_SCHADMO Schadstoffmobil
2022-01-25 16:47:03 WEG_WEIH Weihnachtsbaum
Dadurch kann man das readingList des mymuelltest Devices aufbohren. In diesem Beispiel habe ich auch schon auf die Event-id umgestellt. Die Bezeichnung wird sich über ReadingsVal aus dem anderen Device geholt. Sollte es nicht mymuell_trashtypes heissen, müsst ihr es anpassen.
readingsList:
multi(jsonPath("\$.._data[?(\@.cal_garbage_type in ['WEG_PAP', 'WEG_BIOTON', 'WEG_REST', 'WEG_LEICHT'])]"), concat(property('cal_id'), "_date"), property('cal_date_normal'));
multi(jsonPath("\$.._data[?(\@.cal_garbage_type in ['WEG_PAP', 'WEG_BIOTON', 'WEG_REST', 'WEG_LEICHT'])]"), concat(property('cal_id'), "_type"), property('cal_garbage_type'));
multi(jsonPath("\$.._data[?(\@.cal_garbage_type in ['WEG_PAP', 'WEG_BIOTON', 'WEG_REST', 'WEG_LEICHT'])]"), concat(property('cal_id'), "_name"), ReadingsVal("mymuell_trashtypes",property('cal_garbage_type'),property('cal_garbage_type')));
Man könnte den type weglasse (zweite Zeile), wenn die Umwandlung sauber funktioniert (dritte Zeile).
Die Readings sehen dann in etwa so aus:
READINGS:
2022-01-25 16:55:17 .computedReadings 105714835_name,105714768_type,105714773_date,105714766_name,105714767_name,105714772_name,105714815_date,105714786_name,105714787_name,105714774_type,105714745_name,105714825_type,105714788_type,105714820_type,105714732_type,105714734_name,105714838_date,105714713_type,105714752_date,105714719_name,105714723_date,105714827_date,105714826_date,105714818_name,105714731_date,105714714_date,105714816_type,105714817_type,105714751_type,105714748_date,105714753_name,105714830_name,105714722_name,105714724_type,105714772_type,105714786_type,105714774_name,105714787_type,105714825_name,105714788_name,105714745_type,105714780_date,105714835_type,105714768_name,105714771_date,105714779_date,105714766_type,105714767_type,105714747_date,105714746_date,105714818_type,105714733_date,105714753_type,105714722_type,105714830_type,105714724_name,105714817_name,105714816_name,105714785_date,105714828_date,105714751_name,105714729_date,105714765_date,105714713_name,105714820_name,105714732_name,105714734_type,105714836_date,105714719_type,105714837_date,105714754_date,105714721_date,105714783_type,105714770_name,105714755_date,105714781_name,105714735_type,105714764_date,105714784_date,105714769_name,105714725_name,105714778_date,105714763_type,105714821_date,105714819_type,105714737_date,105714736_date,105714757_type,105714720_name,105714832_name,105714756_type,105714834_type,105714829_date,105714728_date,105714717_name,105714716_name,105714822_type,105714730_type,105714824_name,105714718_type,105714833_date,105714750_date,105714775_name,105714769_type,105714725_type,105714776_date,105714777_date,105714782_date,105714715_date,105714763_name,105714781_type,105714783_name,105714770_type,105714735_name,105714822_name,105714730_name,105714824_type,105714839_date,105714717_type,105714716_type,105714775_type,105714814_date,105714831_date,105714718_name,105714726_date,105714727_date,105714823_date,105714819_name,105714738_date,105714832_type,105714756_name,105714757_name,105714720_type,105714834_name,105714749_date,105714778_type,105714715_name,105714763_date,105714784_type,105714776_name,105714777_name,105714782_name,105714735_date,105714764_type,105714783_date,105714755_type,105714718_date,105714833_type,105714726_name,105714750_type,105714727_name,105714814_name,105714831_name,105714728_type,105714839_name,105714730_date,105714822_date,105714756_date,105714757_date,105714834_date,105714749_name,105714738_name,105714829_type,105714821_type,105714823_name,105714736_type,105714819_date,105714737_type,105714764_name,105714755_name,105714781_date,105714770_date,105714715_type,105714778_name,105714769_date,105714725_date,105714784_name,105714777_type,105714776_type,105714782_type,105714738_type,105714829_name,105714832_date,105714720_date,105714749_type,105714823_type,105714737_name,105714736_name,105714821_name,105714775_date,105714814_type,105714831_type,105714833_name,105714750_name,105714726_type,105714727_type,105714824_date,105714728_name,105714839_type,105714716_date,105714717_date,105714825_date,105714788_date,105714815_type,105714774_date,105714779_name,105714768_date,105714771_name,105714773_type,105714780_name,105714817_date,105714816_date,105714785_name,105714828_name,105714751_date,105714748_type,105714724_date,105714827_type,105714826_type,105714733_name,105714731_type,105714746_name,105714714_type,105714747_name,105714721_name,105714836_name,105714837_name,105714752_type,105714754_name,105714723_type,105714732_date,105714820_date,105714729_name,105714765_name,105714838_type,105714713_date,105714779_type,105714766_date,105714767_date,105714773_name,105714780_type,105714835_date,105714771_type,105714745_date,105714772_date,105714815_name,105714786_date,105714787_date,105714752_name,105714719_date,105714836_type,105714837_type,105714754_type,105714723_name,105714721_type,105714729_type,105714765_type,105714838_name,105714734_date,105714748_name,105714753_date,105714722_date,105714830_date,105714785_type,105714828_type,105714731_name,tomorrow_name_0,105714746_type,105714714_name,105714747_type,105714826_name,105714827_name,105714818_date,105714733_type
2022-01-25 16:55:17 105714713_date 30.05.2022
2022-01-25 16:55:17 105714713_name Restabfall
2022-01-25 16:55:17 105714713_type WEG_REST
2022-01-25 16:55:17 105714714_date 31.10.2022
2022-01-25 16:55:17 105714714_name Restabfall
2022-01-25 16:55:17 105714714_type WEG_REST
2022-01-25 16:55:17 105714715_date 12.12.2022
2022-01-25 16:55:17 105714715_name Restabfall
2022-01-25 16:55:17 105714715_type WEG_REST
2022-01-25 16:55:17 105714716_date 19.04.2022
2022-01-25 16:55:17 105714716_name Restabfall
2022-01-25 16:55:17 105714716_type WEG_REST
2022-01-25 16:55:17 105714717_date 22.08.2022
2022-01-25 16:55:17 105714717_name Restabfall
2022-01-25 16:55:17 105714717_type WEG_REST
2022-01-25 16:55:17 105714718_date 28.11.2022
2022-01-25 16:55:17 105714718_name Restabfall
2022-01-25 16:55:17 105714718_type WEG_REST
2022-01-25 16:55:17 105714719_date 04.04.2022
2022-01-25 16:55:17 105714719_name Restabfall
2022-01-25 16:55:17 105714719_type WEG_REST
2022-01-25 16:55:17 105714720_date 27.12.2022
2022-01-25 16:55:17 105714720_name Restabfall
2022-01-25 16:55:17 105714720_type WEG_REST
2022-01-25 16:55:17 105714721_date 07.02.2022
2022-01-25 16:55:17 105714721_name Restabfall
2022-01-25 16:55:17 105714721_type WEG_REST
2022-01-25 16:55:17 105714722_date 19.09.2022
2022-01-25 16:55:17 105714722_name Restabfall
2022-01-25 16:55:17 105714722_type WEG_REST
2022-01-25 16:55:17 105714723_date 13.06.2022
2022-01-25 16:55:17 105714723_name Restabfall
2022-01-25 16:55:17 105714723_type WEG_REST
2022-01-25 16:55:17 105714724_date 16.05.2022
2022-01-25 16:55:17 105714724_name Restabfall
2022-01-25 16:55:17 105714724_type WEG_REST
2022-01-25 16:55:17 105714725_date 25.07.2022
2022-01-25 16:55:17 105714725_name Restabfall
2022-01-25 16:55:17 105714725_type WEG_REST
2022-01-25 16:55:17 105714726_date 21.02.2022
2022-01-25 16:55:17 105714726_name Restabfall
2022-01-25 16:55:17 105714726_type WEG_REST
2022-01-25 16:55:17 105714727_date 10.01.2022
2022-01-25 16:55:17 105714727_name Restabfall
2022-01-25 16:55:17 105714727_type WEG_REST
2022-01-25 16:55:17 105714728_date 07.03.2022
2022-01-25 16:55:17 105714728_name Restabfall
2022-01-25 16:55:17 105714728_type WEG_REST
2022-01-25 16:55:17 105714729_date 11.07.2022
2022-01-25 16:55:17 105714729_name Restabfall
2022-01-25 16:55:17 105714729_type WEG_REST
2022-01-25 16:55:17 105714730_date 02.05.2022
2022-01-25 16:55:17 105714730_name Restabfall
2022-01-25 16:55:17 105714730_type WEG_REST
2022-01-25 16:55:17 105714731_date 24.01.2022
2022-01-25 16:55:17 105714731_name Restabfall
2022-01-25 16:55:17 105714731_type WEG_REST
2022-01-25 16:55:17 105714732_date 14.11.2022
2022-01-25 16:55:17 105714732_name Restabfall
2022-01-25 16:55:17 105714732_type WEG_REST
2022-01-25 16:55:17 105714733_date 08.08.2022
2022-01-25 16:55:17 105714733_name Restabfall
2022-01-25 16:55:17 105714733_type WEG_REST
2022-01-25 16:55:17 105714734_date 17.10.2022
2022-01-25 16:55:17 105714734_name Restabfall
2022-01-25 16:55:17 105714734_type WEG_REST
2022-01-25 16:55:17 105714735_date 05.09.2022
2022-01-25 16:55:17 105714735_name Restabfall
2022-01-25 16:55:17 105714735_type WEG_REST
2022-01-25 16:55:17 105714736_date 27.06.2022
2022-01-25 16:55:17 105714736_name Restabfall
2022-01-25 16:55:17 105714736_type WEG_REST
2022-01-25 16:55:17 105714737_date 04.10.2022
2022-01-25 16:55:17 105714737_name Restabfall
2022-01-25 16:55:17 105714737_type WEG_REST
2022-01-25 16:55:17 105714738_date 21.03.2022
2022-01-25 16:55:17 105714738_name Restabfall
2022-01-25 16:55:17 105714738_type WEG_REST
2022-01-25 16:55:17 105714745_date 28.03.2022
2022-01-25 16:55:17 105714745_name Altpapier
2022-01-25 16:55:17 105714745_type WEG_PAP
2022-01-25 16:55:17 105714746_date 18.07.2022
2022-01-25 16:55:17 105714746_name Altpapier
2022-01-25 16:55:17 105714746_type WEG_PAP
2022-01-25 16:55:17 105714747_date 03.01.2022
2022-01-25 16:55:17 105714747_name Altpapier
2022-01-25 16:55:17 105714747_type WEG_PAP
2022-01-25 16:55:17 105714748_date 10.10.2022
2022-01-25 16:55:17 105714748_name Altpapier
2022-01-25 16:55:17 105714748_type WEG_PAP
2022-01-25 16:55:17 105714749_date 24.05.2022
2022-01-25 16:55:17 105714749_name Altpapier
2022-01-25 16:55:17 105714749_type WEG_PAP
2022-01-25 16:55:17 105714750_date 07.11.2022
2022-01-25 16:55:17 105714750_name Altpapier
2022-01-25 16:55:17 105714750_type WEG_PAP
2022-01-25 16:55:17 105714751_date 12.09.2022
2022-01-25 16:55:17 105714751_name Altpapier
2022-01-25 16:55:17 105714751_type WEG_PAP
2022-01-25 16:55:17 105714752_date 05.12.2022
2022-01-25 16:55:17 105714752_name Altpapier
2022-01-25 16:55:17 105714752_type WEG_PAP
2022-01-25 16:55:17 105714753_date 20.06.2022
2022-01-25 16:55:17 105714753_name Altpapier
2022-01-25 16:55:17 105714753_type WEG_PAP
2022-01-25 16:55:17 105714754_date 31.01.2022
2022-01-25 16:55:17 105714754_name Altpapier
2022-01-25 16:55:17 105714754_type WEG_PAP
2022-01-25 16:55:17 105714755_date 15.08.2022
2022-01-25 16:55:17 105714755_name Altpapier
2022-01-25 16:55:17 105714755_type WEG_PAP
2022-01-25 16:55:17 105714756_date 25.04.2022
2022-01-25 16:55:17 105714756_name Altpapier
2022-01-25 16:55:17 105714756_type WEG_PAP
2022-01-25 16:55:17 105714757_date 02.03.2022
2022-01-25 16:55:17 105714757_name Altpapier
2022-01-25 16:55:17 105714757_type WEG_PAP
2022-01-25 16:55:17 105714763_date 17.10.2022
2022-01-25 16:55:17 105714763_name Leichtverpackungen
2022-01-25 16:55:17 105714763_type WEG_LEICHT
2022-01-25 16:55:17 105714764_date 12.12.2022
2022-01-25 16:55:17 105714764_name Leichtverpackungen
2022-01-25 16:55:17 105714764_type WEG_LEICHT
2022-01-25 16:55:17 105714765_date 30.05.2022
2022-01-25 16:55:17 105714765_name Leichtverpackungen
2022-01-25 16:55:17 105714765_type WEG_LEICHT
2022-01-25 16:55:17 105714766_date 25.07.2022
2022-01-25 16:55:17 105714766_name Leichtverpackungen
2022-01-25 16:55:17 105714766_type WEG_LEICHT
2022-01-25 16:55:17 105714767_date 19.09.2022
2022-01-25 16:55:17 105714767_name Leichtverpackungen
2022-01-25 16:55:17 105714767_type WEG_LEICHT
2022-01-25 16:55:17 105714768_date 02.05.2022
2022-01-25 16:55:17 105714768_name Leichtverpackungen
2022-01-25 16:55:17 105714768_type WEG_LEICHT
2022-01-25 16:55:17 105714769_date 22.08.2022
2022-01-25 16:55:17 105714769_name Leichtverpackungen
2022-01-25 16:55:17 105714769_type WEG_LEICHT
2022-01-25 16:55:17 105714770_date 10.01.2022
2022-01-25 16:55:17 105714770_name Leichtverpackungen
2022-01-25 16:55:17 105714770_type WEG_LEICHT
2022-01-25 16:55:17 105714771_date 24.01.2022
2022-01-25 16:55:17 105714771_name Leichtverpackungen
2022-01-25 16:55:17 105714771_type WEG_LEICHT
2022-01-25 16:55:17 105714772_date 31.10.2022
2022-01-25 16:55:17 105714772_name Leichtverpackungen
2022-01-25 16:55:17 105714772_type WEG_LEICHT
2022-01-25 16:55:17 105714773_date 14.11.2022
2022-01-25 16:55:17 105714773_name Leichtverpackungen
2022-01-25 16:55:17 105714773_type WEG_LEICHT
2022-01-25 16:55:17 105714774_date 07.03.2022
2022-01-25 16:55:17 105714774_name Leichtverpackungen
2022-01-25 16:55:17 105714774_type WEG_LEICHT
2022-01-25 16:55:17 105714775_date 21.03.2022
2022-01-25 16:55:17 105714775_name Leichtverpackungen
2022-01-25 16:55:17 105714775_type WEG_LEICHT
2022-01-25 16:55:17 105714776_date 28.11.2022
2022-01-25 16:55:17 105714776_name Leichtverpackungen
2022-01-25 16:55:17 105714776_type WEG_LEICHT
2022-01-25 16:55:17 105714777_date 08.08.2022
2022-01-25 16:55:17 105714777_name Leichtverpackungen
2022-01-25 16:55:17 105714777_type WEG_LEICHT
2022-01-25 16:55:17 105714778_date 27.12.2022
2022-01-25 16:55:17 105714778_name Leichtverpackungen
2022-01-25 16:55:17 105714778_type WEG_LEICHT
2022-01-25 16:55:17 105714779_date 04.10.2022
2022-01-25 16:55:17 105714779_name Leichtverpackungen
2022-01-25 16:55:17 105714779_type WEG_LEICHT
2022-01-25 16:55:17 105714780_date 21.02.2022
2022-01-25 16:55:17 105714780_name Leichtverpackungen
2022-01-25 16:55:17 105714780_type WEG_LEICHT
2022-01-25 16:55:17 105714781_date 05.09.2022
2022-01-25 16:55:17 105714781_name Leichtverpackungen
2022-01-25 16:55:17 105714781_type WEG_LEICHT
2022-01-25 16:55:17 105714782_date 11.07.2022
2022-01-25 16:55:17 105714782_name Leichtverpackungen
2022-01-25 16:55:17 105714782_type WEG_LEICHT
2022-01-25 16:55:17 105714783_date 04.04.2022
2022-01-25 16:55:17 105714783_name Leichtverpackungen
2022-01-25 16:55:17 105714783_type WEG_LEICHT
2022-01-25 16:55:17 105714784_date 19.04.2022
2022-01-25 16:55:17 105714784_name Leichtverpackungen
2022-01-25 16:55:17 105714784_type WEG_LEICHT
2022-01-25 16:55:17 105714785_date 13.06.2022
2022-01-25 16:55:17 105714785_name Leichtverpackungen
2022-01-25 16:55:17 105714785_type WEG_LEICHT
2022-01-25 16:55:17 105714786_date 16.05.2022
2022-01-25 16:55:17 105714786_name Leichtverpackungen
2022-01-25 16:55:17 105714786_type WEG_LEICHT
2022-01-25 16:55:17 105714787_date 07.02.2022
2022-01-25 16:55:17 105714787_name Leichtverpackungen
2022-01-25 16:55:17 105714787_type WEG_LEICHT
2022-01-25 16:55:17 105714788_date 27.06.2022
2022-01-25 16:55:17 105714788_name Leichtverpackungen
2022-01-25 16:55:17 105714788_type WEG_LEICHT
2022-01-25 16:55:17 105714814_date 29.06.2022
2022-01-25 16:55:17 105714814_name Biomüll
2022-01-25 16:55:17 105714814_type WEG_BIOTON
2022-01-25 16:55:17 105714815_date 27.07.2022
2022-01-25 16:55:17 105714815_name Biomüll
2022-01-25 16:55:17 105714815_type WEG_BIOTON
2022-01-25 16:55:17 105714816_date 04.05.2022
2022-01-25 16:55:17 105714816_name Biomüll
2022-01-25 16:55:17 105714816_type WEG_BIOTON
2022-01-25 16:55:17 105714817_date 14.12.2022
2022-01-25 16:55:17 105714817_name Biomüll
2022-01-25 16:55:17 105714817_type WEG_BIOTON
2022-01-25 16:55:17 105714818_date 21.04.2022
2022-01-25 16:55:17 105714818_name Biomüll
2022-01-25 16:55:17 105714818_type WEG_BIOTON
2022-01-25 16:55:17 105714819_date 23.02.2022
2022-01-25 16:55:17 105714819_name Biomüll
2022-01-25 16:55:17 105714819_type WEG_BIOTON
2022-01-25 16:55:17 105714820_date 19.10.2022
2022-01-25 16:55:17 105714820_name Biomüll
2022-01-25 16:55:17 105714820_type WEG_BIOTON
2022-01-25 16:55:17 105714821_date 26.01.2022
2022-01-25 16:55:17 105714821_name Biomüll
2022-01-25 16:55:17 105714821_type WEG_BIOTON
2022-01-25 16:55:17 105714822_date 12.01.2022
2022-01-25 16:55:17 105714822_name Biomüll
2022-01-25 16:55:17 105714822_type WEG_BIOTON
2022-01-25 16:55:17 105714823_date 09.02.2022
2022-01-25 16:55:17 105714823_name Biomüll
2022-01-25 16:55:17 105714823_type WEG_BIOTON
2022-01-25 16:55:17 105714824_date 06.04.2022
2022-01-25 16:55:17 105714824_name Biomüll
2022-01-25 16:55:17 105714824_type WEG_BIOTON
2022-01-25 16:55:17 105714825_date 18.05.2022
2022-01-25 16:55:17 105714825_name Biomüll
2022-01-25 16:55:17 105714825_type WEG_BIOTON
2022-01-25 16:55:17 105714826_date 10.08.2022
2022-01-25 16:55:17 105714826_name Biomüll
2022-01-25 16:55:17 105714826_type WEG_BIOTON
2022-01-25 16:55:17 105714827_date 13.07.2022
2022-01-25 16:55:17 105714827_name Biomüll
2022-01-25 16:55:17 105714827_type WEG_BIOTON
2022-01-25 16:55:17 105714828_date 06.10.2022
2022-01-25 16:55:17 105714828_name Biomüll
2022-01-25 16:55:17 105714828_type WEG_BIOTON
2022-01-25 16:55:17 105714829_date 07.09.2022
2022-01-25 16:55:17 105714829_name Biomüll
2022-01-25 16:55:17 105714829_type WEG_BIOTON
2022-01-25 16:55:17 105714830_date 29.12.2022
2022-01-25 16:55:17 105714830_name Biomüll
2022-01-25 16:55:17 105714830_type WEG_BIOTON
2022-01-25 16:55:17 105714831_date 30.11.2022
2022-01-25 16:55:17 105714831_name Biomüll
2022-01-25 16:55:17 105714831_type WEG_BIOTON
2022-01-25 16:55:17 105714832_date 16.11.2022
2022-01-25 16:55:17 105714832_name Biomüll
2022-01-25 16:55:17 105714832_type WEG_BIOTON
2022-01-25 16:55:17 105714833_date 03.11.2022
2022-01-25 16:55:17 105714833_name Biomüll
2022-01-25 16:55:17 105714833_type WEG_BIOTON
2022-01-25 16:55:17 105714834_date 09.03.2022
2022-01-25 16:55:17 105714834_name Biomüll
2022-01-25 16:55:17 105714834_type WEG_BIOTON
2022-01-25 16:55:17 105714835_date 24.08.2022
2022-01-25 16:55:17 105714835_name Biomüll
2022-01-25 16:55:17 105714835_type WEG_BIOTON
2022-01-25 16:55:17 105714836_date 21.09.2022
2022-01-25 16:55:17 105714836_name Biomüll
2022-01-25 16:55:17 105714836_type WEG_BIOTON
2022-01-25 16:55:17 105714837_date 15.06.2022
2022-01-25 16:55:17 105714837_name Biomüll
2022-01-25 16:55:17 105714837_type WEG_BIOTON
2022-01-25 16:55:17 105714838_date 01.06.2022
2022-01-25 16:55:17 105714838_name Biomüll
2022-01-25 16:55:17 105714838_type WEG_BIOTON
2022-01-25 16:55:17 105714839_date 23.03.2022
2022-01-25 16:55:17 105714839_name Biomüll
2022-01-25 16:55:17 105714839_type WEG_BIOTON
Man kann sogar nach Datum suchen - also um für heute oder morgen Termine zu finden. Dafür nutze ich eine Perl-sub in der myUtils, die mir das Datum als YYYY-MM-DD zurück gibt.
Zitat von: yersinia am 06 Dezember 2021, 09:10:41
Hier ein Update um die letzten drei Tage zu bekommen. Geänderte mydividate() in 99_myUtils.pm:
sub mydividate {
use DateTime qw( );
my $offset = shift // 0;
if(!looks_like_number($offset)) {
$offset = 0;
}
my $dateYMD =
DateTime
->now( time_zone => 'local' )
->set_time_zone('floating')
->truncate( to => 'day' )
->add( days => $offset )
->strftime('%Y-%m-%d');
return $dateYMD;
}
Aufruf dann entweder für heute:
mydividate()
für gestern (offset = -1 Tage):
mydividate(-1)
oder morgen (+1 Tag):
mydividate(1)
Das readingList
ergänze ich in der
mymuelltest dann entsprechend:
multi(jsonPath("\$.._data[?(\@.cal_date in ['".mydividate()."'])]"), concat("today_name_", count()), ReadingsVal("mymuell_trashtypes",property('cal_garbage_type'),property('cal_garbage_type')));
multi(jsonPath("\$.._data[?(\@.cal_date in ['".mydividate(1)."'])]"), concat("tomorrow_name_", count()), ReadingsVal("mymuell_trashtypes",property('cal_garbage_type'),property('cal_garbage_type')));
ergibt dann als reading für morgen:
2022-01-25 16:55:17 tomorrow_name_0 Biomüll
(da es für heute keinen Termin gibt, gibt es auch kein reading)
Ich denke ich hab jetzt eine recht passable Lösung gefunden. Ist zwar irgendwie durch den Rücken übers Knie ins Auge, aber es funktioniert. Da man dies aber eher selten Aktualisiert, sollte das machbar sein.
1. wir brauchen zwei JsonMod Devices wie oben beschrieben: eines um Abfallarten zu erhalten und eines für die Termine
2. ein bisschen perl-code in der myUtils kippt das in eine ical-datei und legt diese unter /tmp ab
optional:
3. ein Calendar-Device (https://wiki.fhem.de/wiki/Calendar) um diese ical-Datei einzulesen
4. ein ABFALL-Device (https://wiki.fhem.de/wiki/ABFALL) um das ganze aufzubereiten
Hinweis: ein regelmäßiges Update der Daten macht imho wenig Sinn - 1x/Monat reicht, denke ich. Deswegen sind alle JsonMod Devices disabled und können manuell aktualisiert werden (via reread). Wer möchte kann dies alles über ein at o.ä. regeln. (siehe auch DOIF-Vorschlag im Update vom 27.01. unten)
Ein seltener Datenabruf kann auch dafür Sorgen, dass man beim Anbieter unterm Radar fliegt und wenig auffällt (zum Bsp dann durch häufige Abfragen).
Vorgehen:
1. sucht euch wie oben beschrieben (https://forum.fhem.de/index.php/topic,114898.msg1203360.html#msg1203360) euren Abfuhrbezirk raus und erstellt das erste JsonMod Device für die Abfallarten:
defmod mymuell_trashtypes JsonMod https://mymuell.jumomind.com/mmapp/api.php?r=trash&city_id=66005
attr mymuell_trashtypes disable 1
attr mymuell_trashtypes group MyMüll
attr mymuell_trashtypes interval 0 10 15 * *
attr mymuell_trashtypes readingList multi(jsonPath("\$[*]"), property('name'), property('title'));;
attr mymuell_trashtypes room MyMüll
attr mymuell_trashtypes stateFormat { my $ret = "last Update: ";;\
$ret .= POSIX::strftime("%d.%m. %H:%M",localtime(time_str2num(ReadingsTimestamp($name,".computedReadings","2000-01-01 00:00:00"))));;\
return $ret;;\
}
attr mymuell_trashtypes update-on-start 0
attr mymuell_trashtypes webCmd reread
Wichtig: einmalig ein reread durchführen!
2. das Device mit den Abfallarten wird für das zweite JsonMod Device benötigt - siehe dort das userAttribut trashTypeDevice: dies muss den Devicenamen aus Punkt 1 enthalten, da readingList darauf zurückgreift und die Beschreibung entsprechend ergänzt. Mit den gefunden Abfuhrbezirken (oben beschrieben (https://forum.fhem.de/index.php/topic,114898.msg1203360.html#msg1203360)) erstellt ihr das JsonMod Device für die Termine:
defmod mymuell_trash JsonMod https://mymuell.jumomind.com/webservice.php?idx=termins&city_id=66005&area_id=2734&ws=3
attr mymuell_trash userattr trashTypeDevice
attr mymuell_trash disable 1
attr mymuell_trash group MyMüll
attr mymuell_trash interval 0 11 15 * *
attr mymuell_trash readingList multi(jsonPath("\$.._data[?(\@.cal_garbage_type in ['WEG_PAP', 'WEG_BIOTON', 'WEG_REST', 'WEG_LEICHT'])]"), concat(property('cal_id'), "_date"), property('cal_date_normal'));;\
multi(jsonPath("\$.._data[?(\@.cal_garbage_type in ['WEG_PAP', 'WEG_BIOTON', 'WEG_REST', 'WEG_LEICHT'])]"), concat(property('cal_id'), "_name"), ReadingsVal("mymuell_trashtypes",property('cal_garbage_type'),property('cal_garbage_type')));;
attr mymuell_trash room MyMüll
attr mymuell_trash stateFormat { my $ret = "last Update: ";;\
$ret .= POSIX::strftime("%d.%m. %H:%M",localtime(time_str2num(ReadingsTimestamp($name,".computedReadings","2000-01-01 00:00:00"))));;\
return $ret;;\
}
attr mymuell_trash trashTypeDevice mymuell_trashtypes
attr mymuell_trash update-on-start 0
attr mymuell_trash webCmd reread
Adaptiert das readingList ('WEG_PAP', 'WEG_BIOTON', 'WEG_REST', 'WEG_LEICHT') nach euren Wünschen bzw. den Abfallarten, die euch interessieren. Die zur Verfügung stehenden Arten findet ihr im ersten JsonMod Device (mymuell_trashtypes):
READINGS:
2022-01-26 16:53:28 WEG_BIO pflanzliche Gartenabfälle
2022-01-26 16:53:28 WEG_BIOTON Biomüll
2022-01-26 16:53:28 WEG_GLAS Glasverpackungen
2022-01-26 16:53:28 WEG_LEICHT Leichtverpackungen
2022-01-26 16:53:28 WEG_PAP Altpapier
2022-01-26 16:53:28 WEG_REST Restabfall
2022-01-26 16:53:28 WEG_SCHAD Schadstoffe
2022-01-26 16:53:28 WEG_SCHADMO Schadstoffmobil
2022-01-26 16:53:28 WEG_WEIH Weihnachtsbaum
Wichtig: einmalig ein reread durchführen!
3. öffnet das Terminal eurer FHEM Installation und installiert die Pakete libdata-ical-perl und libdatetime-format-ical-perl (und notiert euch die ggfs für eure recovery Dokumentation)
sudo apt update && sudo apt install libdatetime-format-ical-perl libdata-ical-perl
4. in FHEM navigiert ihr zu der 99_myUtils.pm (https://wiki.fhem.de/wiki/99_myUtils_anlegen) und fügt folgenden perl code hinzu:
sub mymuell_trash {
# created by yersinia - version 2022-01-27
# https://forum.fhem.de/index.php/topic,114898.msg1091233.html#msg1091233
#
use Data::ICal qw( ); #requires libdata-ical-perl
use Data::ICal::Entry::Event qw( );
use Data::ICal::Entry::TimeZone qw( );
use DateTime qw( );
use DateTime::Format::ICal qw( ); #requires libdatetime-format-ical-perl
my $mymdev = shift // return "mymuell device not defined - call is mymueltrash(\"<DEVICE>\")";
my $todayYMD = DateTime
->now(time_zone => 'local')
->set_time_zone('floating')
->truncate(to => 'day')
->strftime('%Y-%m-%d');
if(defined($mymdev)) {
if(ReadingsVal($mymdev,".computedReadings","none") eq "none") {
#reading is not available - either device wrong or not yet reloaded
return "Reading .computedReadings is not available. Have you reloaded JsonMod device ".$mymdev."?";
}
#get readings from device
my @mymreadings = split(',',ReadingsVal($mymdev,".computedReadings",""));
# https://perlmaven.com/generate-calendar-in-ical-format
my $trashcalendar = Data::ICal->new();
# add timezone to Calendar https://manpages.debian.org/bullseye/libdata-ical-perl/Data::ICal::Entry::TimeZone.3pm.en.html
my $tz = "Europe/Berlin";
my $trashtimezone = Data::ICal::Entry::TimeZone->new();
$trashtimezone->add_properties(tzid => $tz);
$trashcalendar->add_entry($trashtimezone);
my $trashEvLastModified = POSIX::strftime("%Y%m%dT%H%M%S",localtime(time_str2num(ReadingsTimestamp($mymdev,".computedReadings",($todayYMD." 00:00:00")))));
foreach my $mymr (@mymreadings) {
if($mymr =~ m/_name/) {
my $trashevent = Data::ICal::Entry::Event->new;
my $trashEvId = substr($mymr,0,(length($mymr)-length("_date"))); #extract id by cutting off last characters
my $trashEvDesc = ReadingsVal($mymdev,$mymr,"");
my ($d,$m,$y) = split('\.',ReadingsVal($mymdev,($trashEvId."_date"),""));
my $trashEvBegin = DateTime->new(
year => $y,
month => $m,
day => $d,
);
$trashEvBegin = $trashEvBegin->ymd('');
my $trashEvEnd = DateTime->new(
year => $y,
month => $m,
day => $d,
);
# make an all-day-event by adding one day to date
$trashEvEnd->add(days => 1);
$trashEvEnd = $trashEvEnd->ymd('');
$trashevent->add_properties(
summary => $trashEvDesc,
description => $trashEvDesc,
comment => "generated by fhem script from MyMuell Device ".$mymdev." on ".$todayYMD,
dtstart => [$trashEvBegin, {TZID => $tz}],
dtend => [$trashEvEnd, {TZID => $tz}],
'last-modified' => [$trashEvLastModified, {TZID => $tz}],
uid => "fhem-mymuell-".$mymdev."-".$trashEvId,
);
$trashcalendar->add_entry($trashevent);
} else {
next;
}
}
my $trashIcalFilename = "/tmp/fhem_mymuell_".$mymdev.".ics";
my $trasherror = FileWrite($trashIcalFilename, $trashcalendar->as_string);
return $trasherror;
} else {
return "mymuell device not defined - call is mymueltrash(\"<DEVICE>\")";
}
}
4. führt die sub aus indem ihr in der FHEM Kommandozeile (wichtig ist, dass die JsonMode Devices unter Punkt 1 und 2 vorher zumindest einmal ein reload hatten und readings vorhanden sind):
{mymuell_trash("mymuell_trash")}
eingebt. die Funktion benötigt als Paramater den Devicenamen des zweiten JsonMod Devices (punkt 2). Es gibt keine aktive Rückmeldung - ihr solltet aber im Ordner /tmp eine ical Datei finden (bekommt ihr im Terminal mit ls -la /tmp raus:
-rw-r--r-- 1 fhem dialout 12459 26. Jan 17:39 fhem_mymuell_mymuell_trash.ics
Der Dateiname setzt sich zusammen aus fhem_mymuell_<devicename>.ics.
Passt den Pfad in der sub an, wenn ihr die ical-Datei woanders haben wollt/braucht.
Optional:
5. erstellt ein Calendar Device (https://wiki.fhem.de/wiki/Calendar), welches auf die Datei zugreift - achtet auf den korrekten Pfad im File-Parameter:
defmod mymuell_calendar Calendar ical file /tmp/fhem_mymuell_mymuell_trash.ics 43200
attr mymuell_calendar group MyMüll
attr mymuell_calendar hideLaterThan 43d
attr mymuell_calendar hideOlderThan 1d
attr mymuell_calendar room MyMüll
Das Interval ist mit 43200s (12h) angegeben - das sollte eigtl reichen. Am Besten wäre ein manuelles Update nachdem die ical-Datei neu geschrieben worden ist.
6. erstellt ein ABFALL-Device (https://wiki.fhem.de/wiki/ABFALL) - auch hier muss das korrekte KalenderDevice angeben werden.
defmod mymuell_abfall ABFALL mymuell_calendar
attr mymuell_abfall calendarname_praefix 0
attr mymuell_abfall date_style date
attr mymuell_abfall delimiter_reading |
attr mymuell_abfall delimiter_text_reading und
attr mymuell_abfall group MyMüll
attr mymuell_abfall room MyMüll
attr mymuell_abfall verbose 0
attr mymuell_abfall stateFormat next_text in next_days Tag(en)
attr mymuell_abfall weekday_mapping Sonntag Montag Dienstag Mittwoch Donnerstag Freitag Samstag
Ich hab das bei mir nun erfolgreich getestet - mein FHEM ist Stand Revision 25551 und läuft auf einem RasPi4 mit RaspiOS 11 (bullseye) und perl v5.32.1.
Ggf müssen weitere Pakete (JsonMod) oder Module (ABFALL) installiert werden bevor ihr anfangen könnt.
Da ich kein perl Programmierer bin, geht das Ganze sicher auch eleganter/besser/performanter. Vlt kann einer der perl-gurus hier ein prüfenden Blick drüber werfen und optimieren. Ich wäre dankbar. :)
Update 2022-01-27:
- das Abfall-Device ist mir zu geschwätzig -> verbose 0
- Interval von 43200(s) (= 12h) für das Calendar Device hinzugefügt
- Vorlage umbenannt von mymuelltest -> mymuell_trash
- Dateiendung der Kalenderdatei von .ical auf .ics korrigiert
- das perl script fügt der ical-Datei nun Zeitzone (Europe/Berlin), last-modified und Kommentar hinzu; andere uid für die events (bestehend aus fhem-mymuell-<device>-<id des Termins aus JsonMod Device>)
- die Termine sind jetzt ganztägig (vorher von 00:00:00 bis 23:59:59; jetzt von YYYYMMDD bis YYYYMM(DD+1))
- Vorschlag für ein DOIF, welches die Quellen zweimal im Monat aktualisiert (am 2. und 16.):
defmod mymuell_doif DOIF ([15:00:00] and\
(($mday == 2) or ($mday == 16)))\
({Log3 "mymuell_doif",3,"mymuell: update trashtype"}, set mymuell_trashtypes reread)\
({Log3 "mymuell_doif",3,"mymuell: update trash events"}, set mymuell_trash reread)\
({Log3 "mymuell_doif",3,"mymuell: call ical function"}, {mymuell_trash("mymuell_trash")})
attr mymuell_doif do always
attr mymuell_doif group MyMüll
attr mymuell_doif room MyMüll
attr mymuell_doif wait rand(900),30,60
Update 2022-01-28: neuer Thread myMüll Abfuhrtermine in FHEM und als ics-Datei (https://forum.fhem.de/index.php/topic,125789.0.html)