Notdienst Apotheke

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

Vorheriges Thema - Nächstes Thema

yersinia

Zitat von: yersinia am 23 September 2021, 16:47:22
Für alle, die den Standort der Apotheke auf einer Karte angezeigt haben wollen, können sich mit OSM einen Kartenlink generieren (raw):
attr DEVICE userReadings OSMLink { my $ret = "https:\/\/www.openstreetmap.org\/?";;\
$ret .= "mlat=".ReadingsVal($name,"Breitengrad","0");;\
$ret .= "&mlon=".ReadingsVal($name,"Laengengrad","0");;\
$ret .= "#map=18";;\
$ret .= "\/".ReadingsVal($name,"Breitengrad","0");;\
$ret .= "\/".ReadingsVal($name,"Laengengrad","0");;\
return $ret;; }

erzeugt ein userReading OSMLink wie diesen:
   2021-09-23 16:45:17   OSMLink         https://www.openstreetmap.org/?mlat=51.1873547&mlon=10.0575891#map=18/51.1873547/10.0575891
Entspricht diesem link: https://www.openstreetmap.org/?mlat=51.1873547&mlon=10.0575891#map=18/51.1873547/10.0575891
Und für diejenigen, die auch noch eine Routenbeschreibung über OSM haben möchten und den eigenen Standord als lat/long im global Device gepflegt haben (bzw. irgendwo im FHEM gepflegt haben), können sich über ein weiteres userReading einen solchen Link generieren (raw zum Kopieren; der Vollständigkeit-halber ist das userReading OSMLink mit enthalten):
attr DEVICE userReadings OSMLink { my $ret = "https:\/\/www.openstreetmap.org\/?";;\
$ret .= "mlat=".ReadingsVal($name,"Breitengrad","0");;\
$ret .= "&mlon=".ReadingsVal($name,"Laengengrad","0");;\
$ret .= "#map=18";;\
$ret .= "\/".ReadingsVal($name,"Breitengrad","0");;\
$ret .= "\/".ReadingsVal($name,"Laengengrad","0");;\
return $ret;; },\
OSMRoute { my $ret = "https:\/\/www.openstreetmap.org\/directions?";;\
$ret .= "engine=graphhopper_car";;\
$ret .= "&from=".AttrVal("global","latitude","0");;\
$ret .= "%2C".AttrVal("global","longitude","0");;\
$ret .= "&to=".ReadingsVal($name,"Breitengrad","0");;\
$ret .= "%2C".ReadingsVal($name,"Laengengrad","0");;\
return $ret;; }

Generiert ein userReading OSMRoute mit einen Link wie https://www.openstreetmap.org/directions?engine=graphhopper_car&from=51.18668%2C10.00639&to=51.1873547%2C10.0575891.

Die engine kann beliebig gewechselt werden (einfach den Teil $ret .= "engine=graphhopper_car";;\ entsprechend ersetzen):
Auto (GraphHopper) => graphhopper_car
Auto (OSRM) => fossgis_osrm_car
Fahrrad (GraphHopper) => graphhopper_bicycle
Fahrrad (OSRM) => fossgis_osrm_bike
Fuß (GraphHopper) => graphhopper_foot
Fuß (OSRM) => fossgis_osrm_foot
viele Grüße, yersinia
----
FHEM 6.3 (SVN) on RPi 4B with RasPi OS Bullseye (perl 5.32.1) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@Sduino | MQTT2 | Tasmota | ESPEasy
VCCU->14xSEC-SCo, 7xCC-RT-DN, 5xLC-Bl1PBU-FM, 3xTC-IT-WM-W-EU, 1xPB-2-WM55, 1xLC-Sw1PBU-FM, 1xES-PMSw1-Pl

yersinia

Mir düngt, dass seit dem 10.1.23 die Schnittstelle nicht mehr funktioniert. Hat schon jemand eine Alternative aufgetan?
viele Grüße, yersinia
----
FHEM 6.3 (SVN) on RPi 4B with RasPi OS Bullseye (perl 5.32.1) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@Sduino | MQTT2 | Tasmota | ESPEasy
VCCU->14xSEC-SCo, 7xCC-RT-DN, 5xLC-Bl1PBU-FM, 3xTC-IT-WM-W-EU, 1xPB-2-WM55, 1xLC-Sw1PBU-FM, 1xES-PMSw1-Pl

Wolle02

Ja, die neue URL ist jetzt https://www.aponet.de/apotheke/notdienstsuche. Grundsätzlich funktioniert das alles schon noch wie vorher auch. Man müsste jetzt nur die Attribute entsprechend anpassen. Leider bin ich aufgrund der schlechten Bedienbarkeit des HTTPMOD-Moduls und der ausschließlich englischen Dokumentation völlig überfordert.

OdfFhem

Ich habe ein Test-Device für den Apotheken-Notdienst angelegt - basierend auf attrTemplate "aponet_pharmacy_emergency_service_germany" (20201202).

Es liefert nach wie vor Daten und erzeugt die gewünschten Readings ...

War es nur ein temporäres Problem ?

Wolle02

Super Tip. Habe auch ein neues Device mit dem attr-Template angelegt. Damit funktionierts wieder. Nur die Koordinaten für den Google-Link kommen nicht. Mal schauen, ob man da noch was drehen kann.
Vielen Dank.

OdfFhem

Zitat von: Wolle02 am 18 Januar 2023, 06:43:17
Nur die Koordinaten für den Google-Link kommen nicht. Mal schauen, ob man da noch was drehen kann.

Da hätte ich eine gute Nachricht für Dich
... "könnte man auf andere Datenbasis umbauen und hat dann auch Koordinaten"
aber auch eine schlechte
... "mit dem Wechsel der Datenbasis würden die von-bis-Zeiten verlorengehen"

oder

man versucht den auf der jetzigen Seite integrierten Kartenlink zu "zerlegen" ...

Wolle02

Zitat von: OdfFhem am 18 Januar 2023, 08:43:44

man versucht den auf der jetzigen Seite integrierten Kartenlink zu "zerlegen" ...

Das versuche ich grade schon seit einer Weile, aber ich scheitere mal wieder am Thema Regex, da ich es nicht schaffe einen Ausdruck zu kreieren, der die URL zurückgibt bzw. findet.

Wolle02

So, nach viel rumprobieren habe ich nun folgende Attribute bei mir noch eingefügt:

reading11Name Entfernung
reading11Regex Entfernung: </span>(.?)

reading12Name GoogleLink
reading12Regex href="(http:\/\/.*?)"


Damit wird die Entfernungsangabe noch anzeigt und der Link zu Google funktioniert auch wieder.

OdfFhem

Zitat von: Wolle02 am 18 Januar 2023, 15:28:31
Damit wird die Entfernungsangabe noch anzeigt und der Link zu Google funktioniert auch wieder.

Angenommen, es geht um aponet.de ... dann kann ich Dein Ergebnis nicht nachvollziehen:

- die nächstgelegene Apotheke ist 12.36 km entfernt ... im Reading steht nur eine 1
- die nächstgelegene Apotheke hat auch eine Webseite ... im Reading steht nicht der Link zur Karte, sondern zur Webseite der Apotheke

DeeSPe

#114
Zitat von: OdfFhem am 18 Januar 2023, 18:02:11
Angenommen, es geht um aponet.de ... dann kann ich Dein Ergebnis nicht nachvollziehen:

- die nächstgelegene Apotheke ist 12.36 km entfernt ... im Reading steht nur eine 1
- die nächstgelegene Apotheke hat auch eine Webseite ... im Reading steht nicht der Link zur Karte, sondern zur Webseite der Apotheke

Probier mal:
reading11Name Entfernung
reading11Regex (\d{1,}\.?\d{1,2}?\skm)

reading12Name GoogleLink
reading12Regex "showapo".*?"(http:\/\/.*?)"


Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

Wolle02

#115
Tja, da sieht man halt, dass ich von Regex nicht wirklich viel Ahnung habe und mit Try and Error mein Glück versuche.

Zitatdie nächstgelegene Apotheke ist 12.36 km entfernt ... im Reading steht nur eine 1

Das liegt daran, dass bei mir in der Stadt keine Apotheke mehr als 10 Kilometer weg ist. Deshalb wird nur nach einer Stelle gesucht. Bei mir hat das halt zum gewünschten Ergebnis geführt.
Aber diese leichte Modifikation gibt wohl auch 2 Stellen zurück. Mehr als 100 km wird wohl keiner zu einer Notdienstapotheke fahren müssen.
Entfernung: <\/span>(..?)

Zitatdie nächstgelegene Apotheke hat auch eine Webseite ... im Reading steht nicht der Link zur Karte, sondern zur Webseite der Apotheke

Ja, hab ich jetzt auch gesehen, dass manche Apotheken noch einen Link vor dem Googlelink haben. Das ist blöd. Weiß ich gerade nicht wie man da besser sucht. Ich probier mal weiter.
Wenn da aber jemand den entscheidenden Tip hat wär das toll.


EDIT:
Ahhh, da hat DeeSPe ein paar Sekunden vor mir gepostet. Ja das mit dem Googlelink sieht so wohl besser aus. Vielen Dank.

JoWiemann

Hallo,

falls noch jemand direkt in Fhem auf den Link zur Route klicken möchte:


attr <DeviceName> userReadings GoogleMaps {return("<html><a href='" . ReadingsVal("<DeviceName>", "GoogleLink", ""). "/' target='_blank'>Route zur Apotheke</a></html>") }


Grüße Jörg

PS: Ich habe das Template mal testweise auf folgendes erweitert:


par:SEARCHZIPCODE;Zip code of the city you want to search around;
par:SEARCHCITY;city you want to search around;
par:SEARCHSTREET;Street in the city you want to search around;
par:SEARCHNUMBER;Building nummber you want to search around;
par:SEARCHRADIUS;Radius in km for the search;
par:WHICHROOM;Actual room of the device, defaults to HTTPMOD; {AttrVal("DEVICE","room","HTTPMOD" )}
defmod DEVICE HTTPMOD https://www.aponet.de/apotheke/notdienstsuche?tx_aponetpharmacy_search[action]=result&tx_aponetpharmacy_search[controller]=Search&tx_aponetpharmacy_search[search][plzort]=SEARCHZIPCODE%20SEARCHCITY&tx_aponetpharmacy_search[search][date]=&tx_aponetpharmacy_search[search][street]=SEARCHSTREET%20SEARCHNUMBER&tx_aponetpharmacy_search[search][radius]=SEARCHRADIUS&tx_aponetpharmacy_search[search][lat]=&tx_aponetpharmacy_search[search][lng]=&type=1982 0
...
attr DEVICE reading07Name NotdienstEntfernung
attr DEVICE reading07Regex Entfernung:.<\/span>(\d{1,}\.?\d?\d?\skm)
attr DEVICE reading08Name GoogleLink
attr DEVICE reading08Regex href="(http:\/\/maps\.google\.de\/maps.*?)">Google Navigation
attr DEVICE stateFormat NotName, NotdienstTelefon, NotdienstAdresse-1 in NotdienstAdresse-2 NotdienstAdresse-3
attr DEVICE userReadings GoogleMaps {return("<html><a href='" . ReadingsVal("DEVICE", "GoogleLink", ""). "/' target='_blank'>Route zur Apotheke</a></html>") }


Bei Flächengemeinden ist die Straße schon wichtig. Da sind dann einige Kilometer relevant.
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

DeeSPe

Zitat von: JoWiemann am 18 Januar 2023, 20:38:28
falls noch jemand direkt in Fhem auf den Link zur Route klicken möchte:

Ich habe das über stateFormat gelöst, inklusive anklickbarer Telefonnummer:
attr DEVICE stateFormat NotName (ca. Entfernung entfernt)<br>\
<a target="_blank" href="GoogleLink">NotdienstAdresse-1</a><br>\
NotdienstAdresse-2 NotdienstAdresse-3<br>\
Tel.: <a href="tel:NotdienstTelefon">NotdienstTelefon</a><br>\
<b>Bereitschaft</b><br>\
von NotdienstVon<br>\
bis NotdienstBis


Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

JoWiemann

Hallo,

hier noch etwas "verfeinert"


GoogleMaps {
my $street = "Strasse";
my $number = "Hausnummer";
my $city = "Stadt";
my $plz = "PLZ";
my $oLink = ReadingsVal("NotdienstApotheke", "GoogleLink", "");
my $mLink .= "<html><a href='https://www.google.de/maps/dir/?api=1&origin=";
$mLink .= $street . "+" . $number . ",+" . $plz . "+" . $city . "&destination=" . substr($oLink,index($oLink, "?", 0) + 3);
$mLink .= "&travelmode=driving/' target='_blank'>Route zur Apotheke</a></html>";
return $mLink;;
}
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

OdfFhem

... da war man wohl zu langsam, aber schicken kann man es trotzdem ...


Weiteres RegExp-Beispiel für Entfernung:

Entfernung:\s[^\d]*([\d.]*)\skm


Weiteres RegExp-Beispiel für Link:

<a\s[^>]*href="([^>]*)"[^>]*>Google Navigation<\/a>


Benötigt man nicht beide Readings (GoogleLink,GoogleMaps), könnte man bereits von HTTPMOD den "fertigen" Link generieren lassen:

attr DEVICE reading08OExpr "<html><a href='".$val."' target='_blank'>Karte für Apotheke</a></html>"