Notdienst Apotheke via jsonmod

Begonnen von binford6000, 27 März 2023, 14:10:27

Vorheriges Thema - Nächstes Thema

JoWiemann

#75
Zitat von: grossmaggul am 09 März 2024, 17:35:44Tschuldigung jetzt schon, sollte ich mich damit als DAU outen...
Hallo,

hast Du somit getan ;-)

Eine entsprechende Lösung mit httpmod findest Du hier im Forum.

Grüße Jörg

Damit Du nicht suchen musst:
defmod NotApo HTTPMOD https://www.apotheken-umschau.de/apotheken-notdienst/ 0
attr NotApo alignTime 09:02
attr NotApo disable 0
attr NotApo reading01Name NotApo_Name
attr NotApo reading01Regex <p>[\s]*<strong>(.+)[(]ca
attr NotApo reading02Name NotApo_Street
attr NotApo reading02Regex <br>[\s]*(.+)<br>
attr NotApo reading03Name NotApo_City
attr NotApo reading03Regex <br>[\s]*(.*)<br>[\s]*<\/p>
attr NotApo reading04Name NotApo_TimeText
attr NotApo reading04Regex <p class="font-size-xs">(.*)<\/p>
attr NotApo reading05Name NotApo_Tel
attr NotApo reading05Regex dashed">[\s]+<p>Telefon:[\W]+(.*)<\/p>
attr NotApo replacement01Mode text
attr NotApo replacement01Regex %%ZIP%%
attr NotApo replacement01Value Deine Postletzahl
attr NotApo replacement02Mode text
attr NotApo replacement02Regex %%CITY%%
attr NotApo replacement02Value Deine Stadt
attr NotApo replacement03Mode text
attr NotApo replacement03Regex %%STREET%%
attr NotApo replacement03Value Deine Straße
attr NotApo replacement04Mode expression
attr NotApo replacement04Regex %%DATE%%
attr NotApo replacement04Value return DateTime->now(time_zone => 'local')\
          ->set_time_zone('floating')\
        ->add(days => 0)\
        ->strftime('%Y-%m-%d');;
attr NotApo requestData01 emergency_pharmacy_search%5Bplz%5D=%%ZIP%%&emergency_pharmacy_search%5Bort%5D=%%CITY%%&emergency_pharmacy_search%5Bstrasse%5D=%%STREET%%&emergency_pharmacy_search%5Bdatum%5D=%%DATE%%
attr NotApo requestHeader01 Accept: text/html,application/xhtml+xml,application/xml;;q=0.9,image/avif,image/webp,*/*;;q=0.8
attr NotApo requestHeader02 Accept-Language: de,en-US;;q=0.7,en;;q=0.3
attr NotApo requestHeader03 Content-Type: application/x-www-form-urlencoded
attr NotApo requestHeader04 Accept-Encoding: gzip, deflate, br
attr NotApo requestHeader05 Host: www.apotheken-umschau.de
attr NotApo requestHeader06 User-Agent: Mozilla/5.0 (X11;; Linux x86_64;; rv:109.0) Gecko/20100101 Firefox/113.0
attr NotApo room Apotheke
attr NotApo stateFormat { my $ret = "<div style=\"text-align: left;;\">";;\
    $ret .= "<font style=\"font-weight: bold;;\">".ReadingsVal($name,"NotApo_Name","?")."</font><br />";;\
        my $osmlink = "https://www.openstreetmap.org/search?query=";;\
            $osmlink .= ReadingsVal($name,"NotApo_Street","")."%2C ";;\
            $osmlink .= ReadingsVal($name,"NotApo_City","");;\
    $ret .= "<a href=\"".$osmlink."\" rel=\"noopener noreferrer\" target=\"_blank\">";;\
    $ret .= ReadingsVal($name,"NotApo_Street","?")."<br />";;\
    $ret .= ReadingsVal($name,"NotApo_City","?")."</a><br />";;\
    $ret .= "<br />";;\
        my $numberlink = ReadingsVal($name,"NotApo_Tel","");;\
            $numberlink =~ s/\s+//g;;\
            $numberlink =~ s/\///g;;\
    $ret .= "Tel.: <a href=\"tel:+49".substr($numberlink, 1)."\">".ReadingsVal($name,"NotApo_Tel","")."</a><br />";;\
    $ret .= "<br />";;\
    $ret .= ReadingsVal($name,"NotApo_TimeText","?")."<br />";;\
    $ret .= "</div>";;\
    return $ret;;\
}
attr NotApo webCmd reread
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

grossmaggul

Zitathast Du somit getan ;)
:-[ Wusste ich's doch. :o  ;)

ZitatDamit Du nicht suchen musst:
Danke Dir!
FHEM auf Debian 12 Bookworm Server, Supermicro Core2Duo Board, 2 TB HD RAID 1, 8GB RAM, 2 x nanoCUL868, 1 x nanoCUL465; Homematic, MAX, MiLight, HUE,  2 x Gosund SP1,WLED

KyleK

Ich hab mein HTTPMod entsprechend angepasst:
defmod apotheke_token HTTPMOD none 0
attr apotheke_token event-on-change-reading .*
attr apotheke_token get1FollowGet pharmacymap
attr apotheke_token get1Name start
attr apotheke_token get1Poll 1
attr apotheke_token get1RegOpt g
attr apotheke_token get1Regex src=\"(.+\/Main.entry-.*\?\d+)\"
attr apotheke_token get1URL https://www.aponet.de/apotheke/notdienstsuche
attr apotheke_token get2FollowGet token
attr apotheke_token get2Name pharmacymap
attr apotheke_token get2Poll 1
attr apotheke_token get2PollDelay 5
attr apotheke_token get2Regex \[\".(\/Pharmacymap.*?\.js)\".+\]
attr apotheke_token get2URL https://www.aponet.de%%me%%
attr apotheke_token get3Name token
attr apotheke_token get3OExpr $val=urlEncode($val)
attr apotheke_token get3Poll 1
attr apotheke_token get3Regex fs=\"(.+?)\"
attr apotheke_token get3URL https://www.aponet.de/_assets/vite/assets%%pm%%
attr apotheke_token replacement2Mode reading
attr apotheke_token replacement2Regex %%me%%
attr apotheke_token replacement2Value start-2
attr apotheke_token replacement3Mode reading
attr apotheke_token replacement3Regex %%pm%%
attr apotheke_token replacement3Value pharmacymap
FHEM on Raspberry Pi 3B+
CUL868
7x MAX! Thermostat, 8x MAX! Fensterkontakte
Conbee II + deConz, TradFri Lampen, Osram Smart+ Steckdosen

KyleK

Und wieder wurde was geändert bei aponet.de
Egal, das HTTPMod ist schnell angepasst.
Es ändert sich lediglich der reguläre Ausdruck für get3Regex:

defmod apotheke_token HTTPMOD none 0
attr apotheke_token event-on-change-reading .*
attr apotheke_token get1FollowGet pharmacymap
attr apotheke_token get1Name start
attr apotheke_token get1Poll 1
attr apotheke_token get1RegOpt g
attr apotheke_token get1Regex src=\"(.+\/Main.entry-.*\?\d+)\"
attr apotheke_token get1URL https://www.aponet.de/apotheke/notdienstsuche
attr apotheke_token get2FollowGet token
attr apotheke_token get2Name pharmacymap
attr apotheke_token get2Poll 1
attr apotheke_token get2PollDelay 5
attr apotheke_token get2Regex \[\".(\/Pharmacymap.*?\.js)\".+\]
attr apotheke_token get2URL https://www.aponet.de%%me%%
attr apotheke_token get3Name token
attr apotheke_token get3OExpr $val=urlEncode($val)
attr apotheke_token get3Poll 1
attr apotheke_token get3Regex token:\s*\"(.+?)\"
attr apotheke_token get3URL https://www.aponet.de/_assets/vite/assets%%pm%%
attr apotheke_token replacement2Mode reading
attr apotheke_token replacement2Regex %%me%%
attr apotheke_token replacement2Value start-2
attr apotheke_token replacement3Mode reading
attr apotheke_token replacement3Regex %%pm%%
attr apotheke_token replacement3Value pharmacymap

Der Token sieht jetzt anders aus (viel länger, aber womöglich keine Sonderzeichen mehr).
FHEM on Raspberry Pi 3B+
CUL868
7x MAX! Thermostat, 8x MAX! Fensterkontakte
Conbee II + deConz, TradFri Lampen, Osram Smart+ Steckdosen

qlaus

Danke KyleK,

 :) funktioniert bei mir jetzt wieder einwandfrei!
Raspberry Pi 3, , Sonoff, Shelly
Raspberry Pi 3, , 1-Wire
Raspberry Pi 3, , 1-Wire, Sonoff, Shelly

yersinia

Kleines Update für get1Regex damit die NotApoSuche auch weiterhin funktioniert:
attr apotheke_token get1Regex src=\"(.+\/Main.entry-.*(?:\?\d+)?)\"
Ich geb übrigens noch einen anderen Header mit, damit es ein bisschen so aussieht als würde ein 'normaler' user anfragen:
attr apotheke_token get1Header01 User-Agent: Mozilla/5.0 (X11;; Linux x86_64;; rv:128.0) Gecko/20100101 Firefox/128.0
attr apotheke_token get1Header02 Referer: https://www.aponet.de/apotheke/notdienstsuche
attr apotheke_token get1Header03 Host: www.aponet.de
attr apotheke_token get1Header04 DNT: 1
attr apotheke_token get2Header01 User-Agent: Mozilla/5.0 (X11;; Linux x86_64;; rv:128.0) Gecko/20100101 Firefox/128.0
attr apotheke_token get2Header02 Referer: https://www.aponet.de/apotheke/notdienstsuche
attr apotheke_token get2Header03 Host: www.aponet.de
attr apotheke_token get2Header04 DNT: 1
attr apotheke_token get3Header01 User-Agent: Mozilla/5.0 (X11;; Linux x86_64;; rv:128.0) Gecko/20100101 Firefox/128.0
attr apotheke_token get3Header02 Referer: https://www.aponet.de/apotheke/notdienstsuche
attr apotheke_token get3Header03 Host: www.aponet.de
attr apotheke_token get3Header04 DNT: 1

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

Sailor

Ein herzerfrischendes "Moin" von achtern Diek vorweg

Darf ich Jemanden aus der Runde, der ein derzeit funktionsfähigen Satz an Devices (at, token, Abfrage, DoIf, etc) hat bitten, die letzten Versionen in einem Beitrag zu veröffentlichen.

So muss man (in diesem Falle ich) sich die Teile nicht aus den vielen Beiträgen oben zusammensuchen.

Danke!

Gruss
    Sailor
******************************
Man wird immer besser...

yersinia

Mein aktueller Stand.

HTTPMOD Device für das Token:
defmod NotApoToken HTTPMOD none 0
attr NotApoToken alignTime 08:55
attr NotApoToken disable 0
attr NotApoToken event-on-change-reading .*
attr NotApoToken event-on-update-reading token
attr NotApoToken get1FollowGet pharmacymap
attr NotApoToken get1Header01 User-Agent: Mozilla/5.0 (X11;; Linux x86_64;; rv:129.0) Gecko/20100101 Firefox/129.0
attr NotApoToken get1Header02 Referer: https://www.aponet.de/apotheke/notdienstsuche
attr NotApoToken get1Header03 Host: www.aponet.de
attr NotApoToken get1Header04 DNT: 1
attr NotApoToken get1Name start
attr NotApoToken get1Poll 1
attr NotApoToken get1RegOpt g
attr NotApoToken get1Regex src=\"(.+\/Main.entry-.*(?:\?\d+)?)\"
attr NotApoToken get1URL https://www.aponet.de/apotheke/notdienstsuche
attr NotApoToken get2FollowGet token
attr NotApoToken get2Header01 User-Agent: Mozilla/5.0 (X11;; Linux x86_64;; rv:129.0) Gecko/20100101 Firefox/129.0
attr NotApoToken get2Header02 Referer: https://www.aponet.de/apotheke/notdienstsuche
attr NotApoToken get2Header03 Host: www.aponet.de
attr NotApoToken get2Header04 DNT: 1
attr NotApoToken get2Name pharmacymap
attr NotApoToken get2Poll 1
attr NotApoToken get2PollDelay 5
attr NotApoToken get2Regex \[\".(\/Pharmacymap.*?\.js)\".+\]
attr NotApoToken get2URL https://www.aponet.de%%me%%
attr NotApoToken get3Header01 User-Agent: Mozilla/5.0 (X11;; Linux x86_64;; rv:129.0) Gecko/20100101 Firefox/129.0
attr NotApoToken get3Header02 Referer: https://www.aponet.de/apotheke/notdienstsuche
attr NotApoToken get3Header03 Host: www.aponet.de
attr NotApoToken get3Header04 DNT: 1
attr NotApoToken get3Name token
attr NotApoToken get3OExpr $val=urlEncode($val)
attr NotApoToken get3Poll 1
attr NotApoToken get3Regex token:\s*\"(.+?)\"
attr NotApoToken get3URL https://www.aponet.de/_assets/vite/assets%%pm%%
attr NotApoToken group NotApo
attr NotApoToken replacement2Mode reading
attr NotApoToken replacement2Regex %%me%%
attr NotApoToken replacement2Value start-2
attr NotApoToken replacement3Mode reading
attr NotApoToken replacement3Regex %%pm%%
attr NotApoToken replacement3Value pharmacymap
attr NotApoToken room NotApo
attr NotApoToken stateFormat { my $lastCheck = POSIX::strftime("%d.%m. %H:%M",localtime(time_str2num(ReadingsTimestamp($name,"token","2000-01-01 00:00:00"))));;\
my $ret = '<div style="text-align: left;;">';;\
$ret .= 'Token: '.ReadingsVal($name,"token","-").' ('.$lastCheck.')';;\
$ret .= '</div>';;\
return $ret;;\
}
attr NotApoToken webCmd reread

JsonMod Device für die Apothekensuche - Koordinaten im define (XX.XXXXX und Y.YYYYY) entsprechend ersetzen:
defmod NotApoJM JsonMod https://www.aponet.de/apotheke/notdienstsuche?tx_aponetpharmacy_search[action]=result&tx_aponetpharmacy_search[controller]=Search&tx_aponetpharmacy_search[search][plzort]=&tx_aponetpharmacy_search[search][date]=&tx_aponetpharmacy_search[search][street]=&tx_aponetpharmacy_search[search][radius]=15&tx_aponetpharmacy_search[search][lat]=XX.XXXXX&tx_aponetpharmacy_search[search][lng]=Y.YYYYY&tx_aponetpharmacy_search[token]=[my_token]&type=1981
attr NotApoJM userattr osm_engine:graphhopper_car,fossgis_osrm_car,fossgis_valhalla_car,graphhopper_bicycle,fossgis_osrm_bike,fossgis_valhalla_bicycle,graphhopper_foot,fossgis_osrm_foot,fossgis_valhalla_foot
attr NotApoJM disable 1
attr NotApoJM event-on-change-reading .*
attr NotApoJM group NotApo
attr NotApoJM icon message_medicine
attr NotApoJM interval 3 9 * * *
attr NotApoJM osm_engine fossgis_osrm_car
attr NotApoJM readingList multi(jsonPath("\$.results.apotheken.apotheke.[*]"), concat(sprintf('%02d', count()),"_name"), property('.name'));;\
multi(jsonPath("\$.results.apotheken.apotheke.[*]"), concat(sprintf('%02d', count()),"_street"), property('.strasse'));;\
multi(jsonPath("\$.results.apotheken.apotheke.[*]"), concat(sprintf('%02d', count()),"_zip"), property('.plz'));;\
multi(jsonPath("\$.results.apotheken.apotheke.[*]"), concat(sprintf('%02d', count()),"_city"), property('.ort'));;\
multi(jsonPath("\$.results.apotheken.apotheke.[*]"), concat(sprintf('%02d', count()),"_tel"), property('.telefon'));;\
multi(jsonPath("\$.results.apotheken.apotheke.[*]"), concat(sprintf('%02d', count()),"_fax"), property('.fax'));;\
multi(jsonPath("\$.results.apotheken.apotheke.[*]"), concat(sprintf('%02d', count()),"_email"), property('.email'));;\
multi(jsonPath("\$.results.apotheken.apotheke.[*]"), concat(sprintf('%02d', count()),"_distance"), property('.distanz'));;\
multi(jsonPath("\$.results.apotheken.apotheke.[*]"), concat(sprintf('%02d', count()),"_longitude"), property('.longitude'));;\
multi(jsonPath("\$.results.apotheken.apotheke.[*]"), concat(sprintf('%02d', count()),"_latitude"), property('.latitude'));;\
multi(jsonPath("\$.results.apotheken.apotheke.[*]"), concat(sprintf('%02d', count()),"_start_date"), property('.startdatum'));;\
multi(jsonPath("\$.results.apotheken.apotheke.[*]"), concat(sprintf('%02d', count()),"_start_time"), property('.startzeit'));;\
multi(jsonPath("\$.results.apotheken.apotheke.[*]"), concat(sprintf('%02d', count()),"_end_date"), property('.enddatum'));;\
multi(jsonPath("\$.results.apotheken.apotheke.[*]"), concat(sprintf('%02d', count()),"_end_time"), property('.endzeit'));;\
multi(jsonPath("\$.results.apotheken.apotheke.[*]"), concat(sprintf('%02d', count()),"_map_position"), concat("https:\/\/www.openstreetmap.org\/?mlat=", property('.latitude'), "&mlon=", property('.longitude'), "#map=18\/", property('.latitude'), "\/", property('.longitude')));;\
multi(jsonPath("\$.results.apotheken.apotheke.[*]"), concat(sprintf('%02d', count()),"_map_route"), concat("https:\/\/www.openstreetmap.org\/directions?engine=", AttrVal($name,"osm_engine","fossgis_osrm_car"), "&route=", AttrVal("global","latitude","0"), "%2C", AttrVal("global","longitude","0"), "%3B" , property('.latitude'), "%2C", property('.longitude')));;
attr NotApoJM room NotApo
attr NotApoJM stateFormat { my $ret .= "<div style=\"display:table;;width:100%;;\">";; #table\
for(my $i = 0;;$i <= 2;;$i++) {\
my $id = sprintf('%02d', $i);;\
$ret .= "<div style=\"display:table-row;;width:100%;;\">";; #row\
$ret .= "<div style=\"display:table-cell;;padding:3pt;;width:50%;;text-align:left;;\">";; #cell\
$ret .= "<a href=\"".ReadingsVal($name,$id."_map_position","https:\/\/www.osm.org");;\
$ret .= "\" rel=\"noopener noreferrer\" target=\"_blank\" style=\"font-weight:bold;;\">".ReadingsVal($name,$id."_name","?")."</a>";;\
$ret .= " (".sprintf("%.1f", ReadingsNum($name,$id."_distance",0))."km)<br \/>";;\
$ret .= "<a href=\"".ReadingsVal($name,$id."_map_route","https:\/\/www.osm.org")."\" rel=\"noopener noreferrer\" target=\"_blank\">";;\
$ret .= ReadingsVal($name,$id."_street","")."<br /\>";;\
$ret .= ReadingsVal($name,$id."_zip","")."&nbsp;;".ReadingsVal($name,$id."_city","");;\
$ret .= "</a>";;\
$ret .= "</div>";; #/cell\
$ret .= "<div style=\"display:table-cell;;width:50%;;text-align:left;;\">";; #cell\
my $numberlink = ReadingsVal($name,$id."_tel","");;\
$numberlink =~ s/\s+//g;;\
$numberlink =~ s/\///g;;\
$ret .= "Tel.: <a href=\"tel:+49".substr($numberlink, 1)."\">".ReadingsVal($name,$id."_tel","")."</a><br />";;\
if(ref(ReadingsVal($name,$id."_fax","")) ne 'ARRAY') {\
$ret .= "Fax: ".ReadingsVal($name,$id."_fax","");;\
}\
$ret .= "<br />";;\
$ret .= "eMail: <a href=\"mailto:".ReadingsVal($name,$id."_email","")."\">".ReadingsVal($name,$id."_email","")."</a>";;\
$ret .= "</div>";; #/cell\
$ret .= "</div>";; #/row\
$ret .= "<div style=\"display:table-row;;width:100%;;\">";; #row\
$ret .= "<div style=\"display:table-cell;;padding:3pt;;width:50%;;text-align:left;;\">";; #cell\
$ret .= "Von ".ReadingsVal($name,$id."_start_date","")." ".ReadingsVal($name,$id."_start_time","");;\
$ret .= "</div>";; #/cell\
$ret .= "<div style=\"display:table-cell;;width:50%;;text-align:left;;\">";; #cell\
$ret .= "Bis ".ReadingsVal($name,$id."_end_date","")." ".ReadingsVal($name,$id."_end_time","");;\
$ret .= "</div>";; #/cell\
$ret .= "</div>";; #/row\
}\
$ret .= "</div>";; #/table\
return $ret;;\
}
attr NotApoJM update-on-start 0
attr NotApoJM webCmd reread

Das dazugehörige DOIF Device, welches die token-Aktualisierung initiiert, das secret dem JsonMod Device übergibt und entsprechend aktualisiert:
defmod NotApoUpdate DOIF ([([09:04]+int(rand(300)))])\
(set NotApoToken reread)\
(set NotApoJM secret my_token [NotApoToken:token])\
(set NotApoJM reread)
attr NotApoUpdate disable 0
attr NotApoUpdate do always
attr NotApoUpdate group NotApo
attr NotApoUpdate room NotApo
attr NotApoUpdate wait 60+rand(30),30+rand(30)
attr NotApoUpdate webCmd cmd1
attr NotApoUpdate webCmdLabel Trigger Update
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

Sailor

Hallo yersinia

Zitat von: yersinia am 20 August 2024, 13:42:55Mein aktueller Stand.

Habe ich so weit eingegeben.
XX.XXXXX und Y.YYYYY entsprechend auf meinen Standort geeicht.

Token getriggert und Token bekommen

Die NotApotheke zeigt mit trotzdem nach einem manuellen Trigger nichts an.


? (0.0km)

 
Tel.:
Fax:
eMail:
Von
Bis
? (0.0km)

 
Tel.:
Fax:
eMail:
Von
Bis
? (0.0km)

 
Tel.:
Fax:
eMail:
Von
Bis

Frage: Wie kommt der Token aus dem device "NotApoToken" an die Stelle "&tx_aponetpharmacy_search[token]=[my_token]&type=1981"?
       Habe ich da was vergessen?



Danke

******************************
Man wird immer besser...

betateilchen

Zitat von: Sailor am 26 August 2024, 12:21:40Frage: Wie kommt der Token aus dem device "NotApoToken" an die Stelle "&tx_aponetpharmacy_search[token]=[my_token]&type=1981"?

Über das DOIF.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Sailor

Moin tosammen

Also ich bekomme immer noch keine Ergebnisse.

Habe 1 zu 1 die unter
Zitat von: yersinia am 20 August 2024, 13:42:55Code
verwendet und nur die Koordinaten und Radius geändert sowie die diabled - Attribute rausgenommen.

https://www.aponet.de/apotheke/notdienstsuche?tx_aponetpharmacy_search[action]=result&tx_aponetpharmacy_search[controller]=Search&tx_aponetpharmacy_search[search][plzort]=&tx_aponetpharmacy_search[search][date]=&tx_aponetpharmacy_search[search][street]=&tx_aponetpharmacy_search[search][radius]=35&tx_aponetpharmacy_search[search][lat]=53.5&tx_aponetpharmacy_search[search][lng]=9.6&tx_aponetpharmacy_search[token]=[my_token]&type=1981
Ist hier irgendwo noch ein Filter für die Apothekerkammer aktiv, den ich übersehen habe?

Gruß
    Sailor
******************************
Man wird immer besser...

yersinia

Zitat von: Sailor am 29 August 2024, 14:06:20sowie die diabled - Attribute rausgenommen.
Warum?

Führe doch mal die drei Befehle einzeln und nacheinander über die FHEM cmd aus und schaue, was passiert:
set NotApoToken reread
set NotApoJM secret my_token [NotApoToken:token]
set NotApoJM reread
Es wird erst das Token ermittelt (dann müsste im Reading token von NotApoToken ein aktualisierter Inhalt stehen), dann setzt du das entsprechende secret im JM Device und danach aktualisierst selbiges manuell (daher auch disable 1).

Ansonsten, wie bewährt, zeig (anonymisiertes) list der devices.
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

Sailor

Hallo Yersinia

Zitat von: yersinia am 29 August 2024, 17:20:12Ansonsten, wie bewährt, zeig (anonymisiertes) list der devices.

Danke für die Tipps.
Mit dem Nachtlauf hat der Timer sein übriges getan und zeigt alles an was es soll.

Danke!

Gruss
   Sailor
******************************
Man wird immer besser...

WhyTea

Moin

Ich habe bei mir die Devices wie beschrieben angelegt und die Koordinaten angepasst.
Leider bekomme ich kein Token. Und somit auch alles Andere nicht.

Hier ein List:
Internals:
   BUSY       0
   CFGFN     
   DEF        none 0
   FUUID      66fab0e5-f33f-a5a6-9c43-4af32eeead9b5251
   Interval   0
   MainURL   
   ModuleVersion 4.2.0 - 11.8.2023
   NAME       NotApoToken
   NOTIFYDEV  global
   NR         1459
   NTFY_ORDER 50-NotApoToken
   STATE      <div style="text-align: left;">Token: - (01.01. 00:00)</div>
   TYPE       HTTPMOD
   eventCount 8
   value     
   CompiledRegexes:
   Helper:
     DBLOG:
       state:
         mylogdb:
           TIME       1727766460.00309
           VALUE      reread
   HttpUtils:
     NAME      
     addr       https://www.aponet.de:443
     auth       0
     buf       
     code       403
     conn      
     data      
     displayurl https://www.aponet.de/_assets/vite/assets/
     header     User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:129.0) Gecko/20100101 Firefox/129.0
Referer: https://www.aponet.de/apotheke/notdienstsuche
Host: www.aponet.de
DNT: 1
     host       www.aponet.de
     httpheader HTTP/1.1 403 Forbidden
Date: Tue, 01 Oct 2024 07:07:42 GMT
Server: Apache/2.4.62 (Debian)
Content-Length: 279
Connection: close
Content-Type: text/html; charset=iso-8859-1
     httpversion 1.0
     hu_blocking 0
     hu_filecount 1
     hu_port    443
     hu_portSfx
     hu_proxy   1
     ignoreredirects 1
     loglevel   4
     path       /_assets/vite/assets/
     protocol   https
     redirects  0
     timeout    2
     url        https://www.aponet.de/_assets/vite/assets/
     sslargs:
   QUEUE:
   READINGS:
     2024-10-01 09:07:40   start           /_assets/vite/assets/Main.entry-DrygyTY1.js
   REQUEST:
     context    get
     data      
     header     User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:129.0) Gecko/20100101 Firefox/129.0
Referer: https://www.aponet.de/apotheke/notdienstsuche
Host: www.aponet.de
DNT: 1
     ignoreredirects 0
     num        3
     priority   1
     retryCount 0
     type       get3
     url        https://www.aponet.de/_assets/vite/assets/
   defptr:
     readingBase:
       start      get
     readingNum:
       start      1
     readingOutdated:
     requestReadings:
       get1:
         start      get 1
   hmccu:
   lastpoll:
     pharmacymap 1727766460.00138
     start      1727766460.00138
     token      1727766460.00138
Attributes:
   alignTime  08:55
   disable    0
   event-on-change-reading .*
   event-on-update-reading token
   get1FollowGet pharmacymap
   get1Header01 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:129.0) Gecko/20100101 Firefox/129.0
   get1Header02 Referer: https://www.aponet.de/apotheke/notdienstsuche
   get1Header03 Host: www.aponet.de
   get1Header04 DNT: 1
   get1Name   start
   get1Poll   1
   get1RegOpt g
   get1Regex  src=\"(.+\/Main.entry-.*(?:\?\d+)?)\"
   get1URL    https://www.aponet.de/apotheke/notdienstsuche
   get2FollowGet token
   get2Header01 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:129.0) Gecko/20100101 Firefox/129.0
   get2Header02 Referer: https://www.aponet.de/apotheke/notdienstsuche
   get2Header03 Host: www.aponet.de
   get2Header04 DNT: 1
   get2Name   pharmacymap
   get2Poll   1
   get2PollDelay 5
   get2Regex  \[\".(\/Pharmacymap.*?\.js)\".+\]
   get2URL    https://www.aponet.de%%me%%
   get3Header01 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:129.0) Gecko/20100101 Firefox/129.0
   get3Header02 Referer: https://www.aponet.de/apotheke/notdienstsuche
   get3Header03 Host: www.aponet.de
   get3Header04 DNT: 1
   get3Name   token
   get3OExpr  $val=urlEncode($val)
   get3Poll   1
   get3Regex  token:\s*\"(.+?)\"
   get3URL    https://www.aponet.de/_assets/vite/assets%%pm%%
   group      NotApo
   replacement2Mode reading
   replacement2Regex %%me%%
   replacement2Value start-2
   replacement3Mode reading
   replacement3Regex %%pm%%
   replacement3Value pharmacymap
   room       NotApo
   stateFormat {    my $lastCheck = POSIX::strftime("%d.%m. %H:%M",localtime(time_str2num(ReadingsTimestamp($name,"token","2000-01-01 00:00:00"))));
    my $ret = '<div style="text-align: left;">';
    $ret .= 'Token: '.ReadingsVal($name,"token","-").' ('.$lastCheck.')';
    $ret .= '</div>';
    return $ret;
}
   webCmd     reread

Die Fehlermeldung aus dem Log bei Versuch einen Token zu bekommen (reread) lautet:

2024.10.01 15:49:35 3: NotApoToken: Read callback: Error: https://www.aponet.de: malformed or unsupported URL

Ich hoffe auf Hilfe.

Gruß
Daniel

yersinia

Führe nochmal das reread des HTTPMOD Devices (NotApoToken) durch und warte etwas. Du benötigst als readings start-1 sowie start-2 um die pharmacymap zu finden, welche das Token enthält.

Von hier aus kann ich keine Probleme feststellen:
   READINGS:
     2024-10-04 09:06:13   pharmacymap     /Pharmacymap-DnwNJfmO.js
     2024-10-04 09:06:13   start-1         /_assets/vite/assets/Main.entry-DrygyTY1.js
     2024-10-04 09:06:13   start-2         /_assets/vite/assets/Main.entry-wEDV7waz.js
     2024-10-04 09:06:14   token           216823d96ea25c051509d935955c130fbc72680fc1d3040fe3f8ca0e25f9cd08
Attributes:
   alignTime  08:55
   disable    0
   event-on-change-reading .*
   event-on-update-reading token
   get1FollowGet pharmacymap
   get1Header01 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:131.0) Gecko/20100101 Firefox/131.0
   get1Header02 Referer: https://www.aponet.de/apotheke/notdienstsuche
   get1Header03 Host: www.aponet.de
   get1Header04 DNT: 1
   get1Name   start
   get1Poll   1
   get1RegOpt g
   get1Regex  src=\"(.+\/Main.entry-.*(?:\?\d+)?)\"
   get1URL    https://www.aponet.de/apotheke/notdienstsuche
   get2FollowGet token
   get2Header01 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:131.0) Gecko/20100101 Firefox/131.0
   get2Header02 Referer: https://www.aponet.de/apotheke/notdienstsuche
   get2Header03 Host: www.aponet.de
   get2Header04 DNT: 1
   get2Name   pharmacymap
   get2Poll   1
   get2PollDelay 5
   get2Regex  \[\".(\/Pharmacymap.*?\.js)\".+\]
   get2URL    https://www.aponet.de%%me%%
   get3Header01 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:131.0) Gecko/20100101 Firefox/131.0
   get3Header02 Referer: https://www.aponet.de/apotheke/notdienstsuche
   get3Header03 Host: www.aponet.de
   get3Header04 DNT: 1
   get3Name   token
   get3OExpr  $val=urlEncode($val)
   get3Poll   1
   get3Regex  token:\s*\"(.+?)\"
   get3URL    https://www.aponet.de/_assets/vite/assets%%pm%%
   group      NotApo
   replacement2Mode reading
   replacement2Regex %%me%%
   replacement2Value start-2
   replacement3Mode reading
   replacement3Regex %%pm%%
   replacement3Value pharmacymap
   room       NotApo
   stateFormat { my $lastCheck = POSIX::strftime("%d.%m. %H:%M",localtime(time_str2num(ReadingsTimestamp($name,"token","2000-01-01 00:00:00"))));
my $ret = '<div style="text-align: left;">';
$ret .= 'Token: '.ReadingsVal($name,"token","-").' ('.$lastCheck.')';
$ret .= '</div>';
return $ret;
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