neues Modul zum Import eines Abfallkalenders

Begonnen von Tobias, 09 Juli 2014, 09:23:34

Vorheriges Thema - Nächstes Thema

Tobias

Hi,
da meine Stadt leider keine ics/iCal-Datei zur Verfügung stellt sondern ausschließlich über Webanwendung, musste ich mir mein persönliches kleines Modul stricken um die Entsorgungstermine der Restmüll-/Altpapier-/Bio- und gelben Tonne in FHEM zu haben.
Dabei vielen Dank an John bei dem ich viel beim KostalPiko-Modul bzgl HTML::Parser abschauen konnte.

ZurZeit wird nur Magdeburg bedient. Dieses Modul kann aber jeder mit ein bissl KnowHow auf seine Stadt umstricken wenn die benötigten Daten auf einer Seite gelistet sind.
Sind es mehrere Seiten mit unterschiedlichen URL´s  muss man mehrere Instanzen des Moduls definieren. (So war es ursprünglich geplant)

Als Beispiel:
http://sab.metageneric.de/app/sab_i_tp/index.php
http://sab.metageneric.de/app/sab_i_tp/index.php?r=getHausnummerInfo&strasse=Torplatz&hausnummer=1&stadtteil_id=1609&dsd_behaelter_value=b120_b240

Per Attribut "TrashCal_Link" wird obiger Link gesetzt und per "TrashCal_Interval" das Intervall mit die Seite neu eingelesen werden soll, Default ist 1h

Ich persönlich lasse mich per Text2Speech einen Tag vorher darauf hinweisen wenn ein Entsorgungstermin ansteht. Dafür gibt es die Readings "NextEvent*"
Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter

justme1968

sehr schöne idee.

habe gerade bei der avr (müllabfuhr im rhein neckar kreis) nachgefragt. leider gibt es da noch keine geeignete schnittstelle um an maschinenlesbare daten zu kommen. eventuell 2015.

wenn noch mehr daran interesse haben hilft es vielleicht wenn noch mehr anfragen danach kommen.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Tobias

Naja, hier in Magdeburg ist es auch keine "offizielle" Schnittstelle. Deswegen ja das Durchparsen der Webseite.....
Als offizielle Schnittstelle würde ich die Bereitstellung eines ics Files sehen....
Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter

no_Legend

Zitat von: justme1968 am 10 Juli 2014, 11:30:56
sehr schöne idee.

habe gerade bei der avr (müllabfuhr im rhein neckar kreis) nachgefragt. leider gibt es da noch keine geeignete schnittstelle um an maschinenlesbare daten zu kommen. eventuell 2015.

wenn noch mehr daran interesse haben hilft es vielleicht wenn noch mehr anfragen danach kommen.

gruss
  andre

Bin auch aus dem gleichen Kreis.
Ist ja schade.
Wo bekommt den die App für Android/iOS die Daten her?

Gruß Robert
IntelNUC mit Ubuntu mit FHEM immer aktuell,2x HMLAN, CUL443, CUL868 -homekit/siri -tablet ui -homebridge
Device, diverse:
HM-SEC-KEY,HM-LC-BL1-FM,HM-SEC-SD,HM-Sen-DB-PCB,HM-Sec-RHS,HM-Sec-SC-2,HM-WDS10-TH-O,Harmony,Netamo, 433MHz Steckdosen uvm.

justme1968

die it verät nichts. sondern sagt nur das es eventuell 2015 einen zugriff geben könnte.

wenn noch andere nachfragen wird die wahrscheinlichkeit vielleicht größer.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Rince

Ihr habt wenigstens ne Website zum lesen.
Mein zukünftiges Abfallentsorgungsunternehmen generiert einen hübschen Kalender als PDF, wenn man per DropDown Menü die genaue Adresse eingegeben hat.
Aus dem PDF kann man noch nicht mal ein Datum auslesen :(
Nachfragen diesbezüglich bleiben schlicht unbeantwortet :(
Wer zu meinen Posts eine Frage schreibt und auf eine Antwort wartet, ist hiermit herzlich eingeladen mich per PN darauf aufmerksam zu machen. (Bitte mit Link zum betreffenden Thread)

Tobias

Kann man ein PDF nicht auch im sourcecode lesen? Ist das kein Standard? 
Mein Modul funktioniert problemlos. Frau ist begeistert.

Gesendet von meinem ALCATEL ONE TOUCH 997D mit Tapatalk

Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter

Deudi

Zitat von: Rince am 14 Juli 2014, 08:11:34
Ihr habt wenigstens ne Website zum lesen.
Mein zukünftiges Abfallentsorgungsunternehmen generiert einen hübschen Kalender als PDF, wenn man per DropDown Menü die genaue Adresse eingegeben hat.
So ist das bei uns auch und daher habe ich die Termine in ein holiday Modul eingetragen. Das muss man i.d.R. nur einmal machen und dann ist auch gut.
Gigabyte Brix, Ubuntu 16.04.3 LTS, Homematic, Z-Wave, EnOcean, Shelly@MQTT, SIGNALduino, JeeLink DAVIS-Sketch

kaizo

Hallo,

bei uns hat unsere Kommune (Lennestadt/Kreis Olpe) ein Modul gekauft, nachdem ich nachgefragt hatte. Damit ist der Export in ics möglich und diesen habe ich in meinen Kalender (hier Google) importiert. Damit wird das recht flexibel.

Ich habe einfach angefragt, in heutiger Zeit der Smartphones ist ein pdf-Kalender nicht mehr unbedingt zeitgemäß. Ging schnell und unkompliziert. Zumal die Daten eh' vorlagen und daraus ja auch das pdf generiert wird.

Gruß
Kai
FHEM 6.x  auf i3
1x Maplecun FS20, HM, 1x CUL f. WMbus
1x Arduino Nano für Lacrosse, 1x für Empfang WH1080,
1x Arduino Uno+Ethernet-Shield & Firmata für 1Wire
1x Raspberry Pi für Einbindung Junkers-Heizgerät mit HT3-Schnittstelle, div. Sonoff+EspEasy+Tasmota über MQTT

Rince

ZitatKann man ein PDF nicht auch im sourcecode lesen? Ist das kein Standard?

Hm, mein PDF ist eine Art Kalender, wo das jeweilige Feld mit einer entsprechenden Farbe gekennzeichnet ist.
Ich müsste also die Farbe heraussuchen, dann in der entsprechenden Spalte den Monat und in der Zeile den Tag...

Das erscheint mir schon arg komliziert zu sein. Da dürfte eine Holliday deutlich einfacher sein :)

Vielen Dank für die Antworten :)
Wer zu meinen Posts eine Frage schreibt und auf eine Antwort wartet, ist hiermit herzlich eingeladen mich per PN darauf aufmerksam zu machen. (Bitte mit Link zum betreffenden Thread)

FHEMAN

Hi Tobias,

da bin ich ja froh, Magdeburger zu sein - danke für das Modul!
Verstehe ich es richtig, dass im state der nächste Termin angezeigt wird? Und hier auch immer nur 1 Termin, auch wenn zwei Abholungen am selben Tag stattfinden?
NUC7i5 | PROXMOX | FHEM 6.2 | 1 HMLAND | 2 UART | HM | LMS | HIFIBERRY | DOORBIRD | BLINK | BUDERUS | HUE | ALEXA | MILIGHT | LUFTDATENINFO | MQTT| ZIGBEE2MQTT | INDEGO | ROBOROCK | SMA | APC | OPENWB

Tobias

Ups,
ist mir ja noch nie passiert das ich hier einen Magdeburg treffe ;)
Das Modul habe ich im contrib Ordner auch bereitgestellt.
Bei mir wird pro Tag nur eine Tonne abgeholt. Deswegen wird es  mit 2 Tonnen pro Tag nicht funktionieren, bzw wird nur eine angezeigt im "NextEvent"
Die Daten beinhalten ja nur einen Tag, und keine Uhrzeit, deswegen wäre es quase schwierig bei 2 Abholungen das exakte nextevent herauszubekommen.
Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter

Prof. Dr. Peter Henning

Wenn ich ehrlich bin, halte ich relativ wenig von solchen speziellen Parsern - mag Magdeburg noch so schön sein.

Mein Lösungsvorschlag ist, aus aus Webseiten zunächst die speziellen HTML-Tabellen direkt zu extrahieren, diese dann in sehr einfache generische Daten zu verwandeln, z.B.
<muell>
    <restmuell>
        <termin>Montag, 04. Januar 2016 *</termin>
        <termin>Samstag, 16. Januar 2016 *</termin>
...
        <termin>Donnerstag, 15. Dezember 2016</termin>
        <termin>Freitag, 30. Dezember 2016 *</termin>
    </restmuell>
    <wertstoffmuell>
        <termin>Montag, 11. Januar 2016 *</termin>
        <termin>Freitag, 22. Januar 2016 *</termin>
...
       <termin>Donnerstag, 08. Dezember 2016</termin>
        <termin>Donnerstag, 22. Dezember 2016</termin>
    </wertstoffmuell>
</muell>


Eine solche generische Tabelle lässt sich - auch das ein Vorteil - sogar schnell von Hand erstellen (hat meine Frau innerhalb von 20 Minuten geschafft...)

Mit Hilfe eines kleinen XSL-T Stylesheet lässt sie sich dann problemlos in eine ICS-Datei umwandeln. Wichtig für Euer Problem: Selbstverständlich kann man dem Stylesheet auch sagen, dass am gleichen Tag die Restmülltonne um 7:00 Uhr, die gelbe/blaue/weiße Tonne erst um 15:00 abgeholt wird.
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    exclude-result-prefixes="xs"
    version="2.0">
    <xsl:template match="/">
        BEGIN:VCALENDAR
        VERSION:2.0
        METHOD:PUBLISH
        PRODID:Prof. Dr. Peter A. Henning
        <xsl:apply-templates select="//restmuell">
            <xsl:with-param name="text">Restmüllabfuhr</xsl:with-param>
        </xsl:apply-templates>
        <xsl:apply-templates select="//wertstoffmuell">
            <xsl:with-param name="text">Wertstoffmüllabfuhr</xsl:with-param>
        </xsl:apply-templates>
        END:VCALENDAR
    </xsl:template>
    <xsl:template match="termin">
        <xsl:param name="text"/>
        <xsl:variable name="r1" select="substring-after(.,', ')"/>
        <xsl:variable name="d" select="substring-before($r1,'. ')"/>
        <xsl:variable name="r2" select="substring-after($r1,'. ')"/>
        <xsl:variable name="m" select="substring-before($r2,' ')"/>
        <xsl:variable name="mm">
            <xsl:choose>
                <xsl:when test="$m='Januar'">01</xsl:when>
                <xsl:when test="$m='Februar'">02</xsl:when>
                <xsl:when test="$m='März'">03</xsl:when>
                <xsl:when test="$m='April'">04</xsl:when>
                <xsl:when test="$m='Mai'">05</xsl:when>
                <xsl:when test="$m='Juni'">06</xsl:when>
                <xsl:when test="$m='Juli'">07</xsl:when>
                <xsl:when test="$m='August'">08</xsl:when>
                <xsl:when test="$m='September'">09</xsl:when>
                <xsl:when test="$m='Oktober'">10</xsl:when>
                <xsl:when test="$m='November'">11</xsl:when>
                <xsl:when test="$m='Dezember'">12</xsl:when>
            </xsl:choose>   
        </xsl:variable>
        BEGIN:VEVENT
        CREATED:20150418T210000Z
        LAST-MODIFIED:220150418T210000Z
        DTSTAMP:20150418T210000Z
        DTSTART;VALUE=DATE:2016<xsl:value-of select="$mm"/><xsl:value-of select="$d"/>T050000Z
        DTEND;VALUE=DATE:2016<xsl:value-of select="$mm"/><xsl:value-of select="$d"/>T160000Z
        SUMMARY:<xsl:value-of select="$text"/>
        TRANSP:TRANSPARENT
        UID:<xsl:text>M_2016</xsl:text><xsl:value-of select="$mm"/><xsl:value-of select="$d"/>
        BEGIN:VALARM
        TRIGGER:-PT12H
        ACTION:DISPLAY
        END:VALARM
        END:VEVENT
    </xsl:template>
</xsl:stylesheet>


LG

pah

FHEMAN

Hi Tobias,

ich habe Dein Modul seit einigen Wochen im Einsatz - und es funktioniert ziemlich gut - meistens :)
Wegen der Problematik des mehrfachen Abholens pro Tag habe ich mir eine Funktion, geschrieben, die ich täglich nachts per AT um 02:02 Uhr triggere. Dazu lese ich das Reading "NextEvent Tstamp" aus. Hierbei kam es nun ab und zu vor, dass dieser Timestamp falsch und inkl. Uhrzeit ausgelesen wird.

bspw. 1466983685.50984 anstelle von 1464645600

Demnach liegt das Datum in ferner Zukunft, die Mülltonnen bleiben stehen, und meine Liebste nimmt mein Smarthome nicht mehr ernst ;)

Außerdem ist mir aufgefallen, dass unser schöner Abfallwebdienst manchmal down ist. In dem Fall bleibt das o.g. Reading leer. Ich habe darauf reagiert, in dem ich dann alle vorhanden {MUELLEIMER}_Tstamp Datumswerte auslese, sortiere und den letzten nehme.
Hier mal mein Code
my $NextEventDateTimestamp = ReadingsVal("Abfallkalender", "NextEvent Tstamp", -1);
Log 1, "DEBUG Abfallkalender";
if (!$NextEventDateTimestamp) {
Log 1, "DEBUG Abfallkalender: ! NextEventDateTimestamp";
my @NextEventdates;
push @NextEventdates, ReadingsVal("Abfallkalender", "Altpapier_Tstamp", -1);
push @NextEventdates, ReadingsVal("Abfallkalender", "Bioabfall_Tstamp", -1);
push @NextEventdates, ReadingsVal("Abfallkalender", "Gelbe Tonne_Tstamp", -1);
push @NextEventdates, ReadingsVal("Abfallkalender", "Restabfall_Tstamp", -1);
@NextEventdates = sort @NextEventdates;
$NextEventDateTimestamp = $NextEventdates[0];
Log 1, "DEBUG Abfallkalender: NextEventDateTimestamp $NextEventDateTimestamp";
}


Hast Du eine Idee, woran das mit dem merkwürdigen Timestamp Wert liegen könnte?

Schöne Grüße
Ronny
NUC7i5 | PROXMOX | FHEM 6.2 | 1 HMLAND | 2 UART | HM | LMS | HIFIBERRY | DOORBIRD | BLINK | BUDERUS | HUE | ALEXA | MILIGHT | LUFTDATENINFO | MQTT| ZIGBEE2MQTT | INDEGO | ROBOROCK | SMA | APC | OPENWB

FHEMAN

Moin moin,

funktioniert der Abfallkalender noch bei Euch? Heute wurde die gelbe Tonne nicht gemeldet - und beim Check auf http://sab.metageneric.de/... sieht es für mich aus aus, als hätten die Jungs mit den URL Parametern gespielt?
NUC7i5 | PROXMOX | FHEM 6.2 | 1 HMLAND | 2 UART | HM | LMS | HIFIBERRY | DOORBIRD | BLINK | BUDERUS | HUE | ALEXA | MILIGHT | LUFTDATENINFO | MQTT| ZIGBEE2MQTT | INDEGO | ROBOROCK | SMA | APC | OPENWB