Notdienst Apotheke

Begonnen von Vaddi, 24 April 2018, 01:39:35

Vorheriges Thema - Nächstes Thema

Vaddi

Hallo zusammen,

die Idee dazu kam mir, als meine Tochter 1,5 Jahre alt war und zum ersten mal
eine gute Freundin auf sie aufgepasst hat, damit meine Frau und ich einen netten
Abend verbringen können.
Also hab ich mich ans dran gesetzt und für mein Tablet UI eine "SOS" Seite erstellt, wo
z.B. alle wichtigen Telefonnummern drauf stehen (Notruf Giftzentrale, usw.).
Neben den wichtigen Nummern, habe ich auch eine Anzeige für die nächstegelegene
Notdienst Apotheke hinzugefügt und diesen Codeschnipsel möchte ich nun mit euch teilen.

Ich möchte noch anmerken, dass ich kein Profi in Sachen RegEx bin.
Bei mir funktioniert das ganze allerdings ohne Probleme.

Die Daten werden von https://www.aponet.de via HTTPMOD geholt.
Nun gibt es zwei Möglichkeiten:

Ihr wohnt in einem kleine Dorf/Gemeinte
Hier reicht die Eingabe der Postleitzahl eigentlich aus.
Ihr geht also auf https://www.aponet.de/ und gebt oben rechts
eure Postleitzahl ein. Den Link aus der Adresszeile kopiert ihr euch.
Der Link sollte so aussehen
https://www.aponet.de/service/notdienstapotheke-finden/suchergebnis/0/EURE-PLZ.html

Ihr wohnt in einer Großstadt
Hier macht eine Adresseingabe Sinn, da ja die nächstgelegene Apotheke angezeigt
wird.
Ihr geht auf https://www.aponet.de/service/notdienstapotheke-finden/erweiterte_suche.html
und tragt unten eure Daten ein.
GANZ WICHTIG: In dem Feld Datum tragt ihr eine 0 ein! Dadurch wird immer die aktuelle Notdienst
Apotheke angezeigt.
Dann auf Suche klicken und den Link aus der Adresszeile kopieren.
Dieser sollte ungefähr so aussehen
https://www.aponet.de/service/notdienstapotheke-finden/suchergebnis/0/EURE-PLZ/EURE-ADRESSE.html

Hier folgt nun meine Raw definition
defmod NotdienstApotheke HTTPMOD !!!HIER-MUSS-EUER-LINK-HIN!!! 0
attr NotdienstApotheke userattr reading01Name reading01Regex reading02Name reading02Regex reading03Name reading03Regex reading04Name reading04Regex reading05-1Name reading05-2Name reading05Name reading05Regex
attr NotdienstApotheke enableControlSet 1
attr NotdienstApotheke reading01Name NotName
attr NotdienstApotheke reading01Regex <div class="box_adress"><h2>([a-zA-ZäöüÄÖÜ0-9.&#;;_-]+)<\/h2><p class="distance">
attr NotdienstApotheke reading02Name NotdienstVon
attr NotdienstApotheke reading02Regex <p>Notdienst.*\n([ a-zA-Z0-9.:&#;;_-]+)
attr NotdienstApotheke reading03Name NotdienstBis
attr NotdienstApotheke reading03Regex <span>([ a-zA-Z0-9.:&#;;_-]+)<\/span>
attr NotdienstApotheke reading04Name NotdienstTelefon
attr NotdienstApotheke reading04Regex Tel.:.*\n([ 0-9.:&#;;_-]+)<br
attr NotdienstApotheke reading05Name NotdienstAdresse
attr NotdienstApotheke reading05Regex <p class="adress">([ a-zA-Z0-9äöüÄÖÜß.&#;;_-]+)<br\/>([0-9a-zA-ZäöüÄÖÜ ]+)
attr NotdienstApotheke stateFormat NotName, NotdienstTelefon, NotdienstAdresse-1 in NotdienstAdresse-2
attr NotdienstApotheke userReadings NotName NotdienstVon NotdienstBis NotdienstTelefon NotdienstAdresse


Da der Notdienst in der Regel von 9:00 - 9:00 geht, habe ich noch ein AT definiert, welches
ein reread um 9:30 Uhr durchführt.
defmod AT.Apotheke at *09:30:00 set NotdienstApotheke reread

Ich hoffe der eine oder andere kann damit etwas anfangen.
Anbei noch zwei Screenshots, einmal die Anzeige in fhem und die Anzeige im Tablet UI.
fhem auf RPi 3
HM-MOD-RPI-PCB sowie 433mhz Sender
Mehrere HM und 433mhz Produkte

stefanpf

#1
Danke für's Teilen.

Gibt aktuell nur zwei Auffälligkeiten:
- aponet.de hat das Syntax Zertifikat nicht rechtzeitig ersetzt und HSTS aktiviert :(
- Die Ergebnisse werden beim Auftreten von Umlauten abgeschnitten (z.B. bei PLZ 32312 oder 32361)
  Durch ein bißchen basteln am Regex scheint das aber korrigierbar zu sein (bin selbst regex Dilettant)


attr NotdienstApotheke reading01Regex <div class="box_adress"><h2>([a-zA-ZäöüÄÖÜ0-9.&#;;_-]+)<\/h2><p class="distance">
attr NotdienstApotheke reading05Regex <p class="adress">([ a-zA-Z0-9äöüÄÖÜ.&#;;_-]+)<br\/>([0-9a-zA-ZäöüÄÖÜ ]+)


Vaddi

Vielen Dank für die Korrekturen.
Ich war mal so frei und habe diese beiden Einträge in meinem obigen Beitrag
aktualisiert.
fhem auf RPi 3
HM-MOD-RPI-PCB sowie 433mhz Sender
Mehrere HM und 433mhz Produkte

Ronny1979

#3
Hallo,

Irgendwie wird mir die falsche Apotheke angezeigt, wenn ich diesen Link in den Browser eingebe kommt das richtige.


https://www.aponet.de/service/notdienstapotheke-finden/suchergebnis/0/oschatz/Schulstrasse.html


Nehme ich den Link in Fhem wird mir eine Apotheke ca 30 km entfernt angezeigt.
Musste den Ortsnamen nehmen und nicht die plz. Da es bei uns viele Ortsteile mit der selben plz und Straße gibt.

define NotdienstApotheke HTTPMOD https://www.aponet.de/service/notdienstapotheke-finden/suchergebnis/0/oschatz/Schulstrasse.html 0
attr NotdienstApotheke userattr reading01Name reading01Regex reading02Name reading02Regex reading03Name reading03Regex reading04Name reading04Regex reading05-1Name reading05-2Name reading05Name reading05Regex
attr NotdienstApotheke enableControlSet 1
attr NotdienstApotheke reading01Name NotName
attr NotdienstApotheke reading01Regex <div class="box_adress"><h2>([a-zA-ZäöüÄÖÜ0-9.&#;;_-]+)<\/h2><p class="distance">
attr NotdienstApotheke reading02Name NotdienstVon
attr NotdienstApotheke reading02Regex <p>Notdienst.*\n([ a-zA-Z0-9.:&#;;_-]+)
attr NotdienstApotheke reading03Name NotdienstBis
attr NotdienstApotheke reading03Regex <span>([ a-zA-Z0-9.:&#;;_-]+)<\/span>
attr NotdienstApotheke reading04Name NotdienstTelefon
attr NotdienstApotheke reading04Regex Tel.:.*\n([ 0-9.:&#;;_-]+)<br
attr NotdienstApotheke reading05Name NotdienstAdresse
attr NotdienstApotheke reading05Regex <p class="adress">([ a-zA-Z0-9äöüÄÖÜ.&#;;_-]+)<br\/>([0-9a-zA-ZäöüÄÖÜ ]+)
attr NotdienstApotheke stateFormat NotName, NotdienstTelefon, NotdienstAdresse-1 in NotdienstAdresse-2
attr NotdienstApotheke userReadings NotName NotdienstVon NotdienstBis NotdienstTelefon NotdienstAdresse
define AT.Apotheke at *17:20:00 set NotdienstApotheke reread[\CODE]

Gruß
Ronny


Gesendet von iPhone mit Tapatalk

rischbiter123

Funktioniert bestens. Danke.
4*Raspi, Max Thermostate und Fensterkontakte, FB7590, Mysensors und NanoCUL, IT und Sonoff, zigbee2mqtt2

Deckoffizier

Hallo,

sieht schon fast gut aus, die Adresse wird richtig angezeigt aber die Telefonnummer leider von einer anderen Apotheke.
Kann mir bitte jemand einen Tipp zur Abhilfe geben.

Danke für die Umsetzung soweit und schön auf die Schnelle die richtige Apotheke zur Hand zu Haben.

Gruß
Hans-Jürgen
FHEM 5.8 auf "yakkaroo Emu A1FL.1" mit CUL 868MHz, SIGNALduino,2 1Wire USB Busmaster, diverse 1 Wire Sensoren,Landroid,Aeotec USB Dongle Z-Wave Plus

knopf_piano

#6
in die regex muss ein \s damit das Leerzeichen gefunden wird:
Habe noch die Entfernung ergänzt


defmod NotdienstApotheke HTTPMOD <url> 0
attr NotdienstApotheke userattr reading01Name reading01Regex reading02Name reading02Regex reading03Name reading03Regex reading04Name reading04Regex reading05-1Name reading05-2Name reading05Name reading05Regex reading06Name reading06Regex
attr NotdienstApotheke alias Notdienst-Apotheke
attr NotdienstApotheke enableControlSet 1
attr NotdienstApotheke reading01Name NotName
attr NotdienstApotheke reading01Regex <div class="box_adress"><h2>([\sa-zA-ZäöüÄÖÜ0-9.&#;;_-]+)<\/h2><p class="distance">
attr NotdienstApotheke reading02Name NotdienstVon
attr NotdienstApotheke reading02Regex <p>Notdienst.*\n([\sa-zA-Z0-9.:&#;;_-]+)
attr NotdienstApotheke reading03Name NotdienstBis
attr NotdienstApotheke reading03Regex <span>([\sa-zA-Z0-9.:&#;;_-]+)<\/span>
attr NotdienstApotheke reading04Name NotdienstTelefon
attr NotdienstApotheke reading04Regex Tel.:.*\n([\s0-9.:&#;;_-]+)<br
attr NotdienstApotheke reading05Name NotdienstAdresse
attr NotdienstApotheke reading05Regex <p class="adress">([\sa-zA-Z0-9äöüÄÖÜ.&#;;_-]+)<br\/>([\s0-9a-zA-ZäöüÄÖÜ]+)
attr NotdienstApotheke reading06Name NotdienstEntfernung
attr NotdienstApotheke reading06Regex <p class="distance">Entfernung:.*\n([\sa-zA-Z0-9,]+)
attr NotdienstApotheke room test
attr NotdienstApotheke stateFormat NotName, NotdienstTelefon, NotdienstAdresse-1 in NotdienstAdresse-2, NotdienstEntfernung
attr NotdienstApotheke userReadings NotName NotdienstVon NotdienstBis NotdienstTelefon NotdienstAdresse NotdienstEntfernung

zotac nano mit proxmox und ganz viel zeug drauf

Deckoffizier

Hallo knopf_piano,

habe Deinen geänderten Code soweit übernommen leider wird immer noch eine falsche Telefonnummer von einer anderen Apotheke
eingesetzt.

Was mir auffiel ist beim Codeimport sind nur jeweils ein Semikolon nach abspeichern,
anpassen hat aber auch nicht weiter etwas geändert am Problem der richtigen Telefonnummer Zuordnung.

Klappt es bei Euch wirklich richtig, irgendwie komisch wenn es nur bei mir nicht stimmig ist.

Gruß
Hans-Jürgen
FHEM 5.8 auf "yakkaroo Emu A1FL.1" mit CUL 868MHz, SIGNALduino,2 1Wire USB Busmaster, diverse 1 Wire Sensoren,Landroid,Aeotec USB Dongle Z-Wave Plus

Vaddi

Poste doch mal die von dir genutzte URL, dann kann
das jemand anderes mal testen und besser nachvollziehen.
fhem auf RPi 3
HM-MOD-RPI-PCB sowie 433mhz Sender
Mehrere HM und 433mhz Produkte

Deckoffizier

Hallo,

hier mal die URL https://www.aponet.de/service/notdienstapotheke-finden/suchergebnis/0/17235.html 0

ergibt Notdienst-Apotheke
   
Apotheke am Markt, 03307 2207, Am Markt 9 in 17235 Neustrelitz, 1,87 km


Rückwärtssuche bringt für  03307 2207    Markt Apotheke Zehdenik Klosterstr. 1, 16792 Zehdenick

richtig wäre 03981 206522 für die Neustrelitzer Apotheke etwas verwundert bleibt ;)

Gruß
Hans-Jürgen
FHEM 5.8 auf "yakkaroo Emu A1FL.1" mit CUL 868MHz, SIGNALduino,2 1Wire USB Busmaster, diverse 1 Wire Sensoren,Landroid,Aeotec USB Dongle Z-Wave Plus

Vaddi

Hey, ersetze mal bitte
attr NotdienstApotheke reading04Regex Tel.:.*\n([\s0-9.:&#;;_-]+)<br
durch
attr NotdienstApotheke reading04Regex Tel.:.*\n([\s0-9.:&#;;_-]+)
Dann sollte es funktionieren.
fhem auf RPi 3
HM-MOD-RPI-PCB sowie 433mhz Sender
Mehrere HM und 433mhz Produkte

Deckoffizier

Hallo Vaddi,

Perfekt haut jetzt hin.

Danke für Deine Mühe!
Hatte schon mal den Fall und den Notdienst der Apotheke benötigt und jetzt wo der kleine Enkel da ist, schön die
Information schnell zur Hand zu haben.

Gruß
Hans-Jürgen
FHEM 5.8 auf "yakkaroo Emu A1FL.1" mit CUL 868MHz, SIGNALduino,2 1Wire USB Busmaster, diverse 1 Wire Sensoren,Landroid,Aeotec USB Dongle Z-Wave Plus

Christoph Morrison

Ich hab mal ein paar der Regexp bei Regex101 getestet.

attr NotdienstApotheke reading01Regex <div class="box_adress"><h2>([\sa-zA-ZäöüÄÖÜ0-9.&#;;_-]+)<\/h2><p class="distance">


Könnte man durch <div class="box_adress"><h2>([^<]+)</h2><p class="distance"> vereinfachen. Gleicher Aufwand, aber kompakter zu lesen.

attr NotdienstApotheke reading05Regex <p class="adress">([\sa-zA-Z0-9äöüÄÖÜ.&#;;_-]+)<br\/>([\s0-9a-zA-ZäöüÄÖÜ]+)

Ich habe nur Adressen gefunden, in denen statt <br/> das Element <br> vorkam.

attr NotdienstApotheke reading06Regex <p class="distance">Entfernung:.*\n([\sa-zA-Z0-9,]+)
Hier müsste <p class="distance">Entfernung:\s*(.*) reichen.

attr NotdienstApotheke reading04Regex Tel.:.*\n([\s0-9.:&#;;_-]+)<br
Matcht auch nicht. Da kommt im Resultset von ApoNet </p> bei mir, kein <br
Mit Tel\.:\s*([\s0-9.:&#;;_-]+) funktioniert der bei mir aber ausreichend.


Aber Psst:
curl 'http://apothekenfinder.mobi/interface/json.php?device=web&source=not&search=33330' -H 'DNT: 1' -H 'Accept-Encoding: gzip, deflate' -H 'Accept-Language: de-DE,de;q=0.9,en-US;q=0.8,en;q=0.7,fr;q=0.6' -H 'User-Agent: whatever' -H 'Accept: */*' -H 'Referer: http://apothekenfinder.mobi/' -H 'X-Requested-With: XMLHttpRequest' -H 'Connection: keep-alive' --compressed

Und man bekommt eine JSON-kodierte Liste aller gerade aktuellen Notdienstapotheken um 33330 Gütersloh (durch eigene Daten ersetzen), ganz ohne nervige tag soup.

Aponet bezieht die Daten bei der Abda, sind also identisch.

Ronny1979

#13
Bei mir gehts jetzt auch, es fehle noch bei reading05Regex das "ß". Darum konnte er die Adresse nicht auslesen.

attr NotdienstApotheke reading05Regex <p class="adress">([\sa-zA-Z0-9äöüÄÖÜß.&#;;_-]+)<br\/>([\s0-9a-zA-ZäöüÄÖÜß]+)

Doch noch was in der Suche kam jetzt das:

<div class="box_adress premium_search_result"><h2><a href="service/apotheke/loewen-apotheke-04758.html">Löwen-Apotheke</a></h2><p class="distance">Entfernung: 1,89 km

Also ist das reading01Regex damit wieder hinfällig.

Michael

Moin Vaddi

Vielen Dank hier für.

Hätte einen Vorschlag bzw brauche eure Hilfe.  :o
Ich habe leider keine Ahnung von Regex.

Ich würde gern das von Datum und Uhrzeit sowie
das bis Datum und Uhrzeit in einzelne Readings haben.

Nur ich schaffe es nicht.
Könnt Ihr mir helfen.
Gruß, Michael

FHEM 6.0 auf RPi 3
CUL V3 868 Mhz | JeeLink LaCrosse & PCA301 | CCU3
BMP085(180) | 14x TX29DTH-IT | 5x PCA 301 | SMA Peripheries | MobileAlerts MA-10(100,120PRO,200,251,410,650,660,800) | HM IP