Hallo,
ich würde gern einen Wecker realisieren, der die Verkehrslage auf meiner Arbeitsstrecke berücksichtigt.
D.h. er soll mich früher wecken wenn Stau ist.
Die aktuelle Fahrzeit kann man ja z.B. manuell über maps.google.de ermitteln.
Google zeigt z.B. bei Aufruf mit diesem Link
https://maps.google.de/maps?saddr=hamburg&daddr=oberhausen&hl=de
so etwas an:
Vorgeschlagene Routen
A1 368 km, 3 Stunden 19 Minuten
Bei aktueller Verkehrslage: 3 Stunden 37 Minuten
1) Wie kann ich das (den fett formatierten Teil als 03:37:00) zunächst einmal automatisch regelmässig aus der Website parsen um ein logfile und Tagesdiagramm der Fahrzeit zu erstellen?
2) Wie kann ich daraus einen entsprechenden Wecker mit "at" bauen? Der muss hier z.B. 5 Stunden vorher schonmal anfangen zu schauen wie die Situation ist und dann den eigentlichen Wecker anlegen. Falls sich in der Zwischenzeit der Stau auflöst, soll er mich bitte länger schlafen lassen...
3) Noch besser wäre natürlich, wenn man irgendwo nicht die aktuelle Verkehrslage sondern eine Prognose der Verkehrslage abfragen könnte z.B. wann muss ich losfahren, um gegen 8:00 anzukommen? (Dann noch die Zeit Dusche, Frühstück etc. aufschlagen) - zur Not könnte man sicherlich auch in fhem versuchen, einen Trend zu ermitteln und die Zeit zu extrapolieren - aber das ist bestimmt recht kompliziert.
=> Hat schon jemand so etwas in der Art realisiert, oder kann mir Code nennen, auf den ich aufsetzen könnte?
(Auch nützlich wäre so ein add-on: Hat's neu geschneit? Eher aufstehen zum Schnee räumen!)
Grüße
schau dir mal das modul an das in diesem thread entstanden ist: http://forum.fhem.de/index.php/topic,17804.0.html (http://forum.fhem.de/index.php/topic,17804.0.html)
gruss
andre
Mein fhem schaut morgens von 05:00 - 06:35 alle 5 Minuten auf die Bahnwebseite, ob mein Zug pünktlich (06:36) kommt und schickt mir die aktuelle Lage als Popup auf den Radiowecker :)
Darf ich fragen, was das für ein Radiowecker ist? Ich suche gerade sowas ;)
Xoro HMT350 mit ListenLive Firmware 1.52
Hallo *
Da mich dieses Thema auch interessiert ist mir eingefallen, dass man diese speziellen Werte mittels Google API abfragen kann.
Weder XML oder JSON Format.
In meinem konkreten Fall sieht der Query so aus
http://maps.googleapis.com/maps/api/distancematrix/json?origins=Austria|st.poelten|&destinations=Austria|Vienna|&mode=driving&language=de-DE&sensor=false (http://maps.googleapis.com/maps/api/distancematrix/json?origins=Austria%7Cst.poelten%7C&destinations=Austria%7CVienna%7C&mode=driving&language=de-DE&sensor=false)
Die Ausgabe sieht dann so aus
{
"destination_addresses" : [ "Österreich", "Wien, Österreich" ],
"origin_addresses" : [ "Österreich", "Sankt Pölten, Österreich" ],
"rows" : [
{
"elements" : [
{
"distance" : {
"text" : "1 m",
"value" : 0
},
"duration" : {
"text" : "1 Minute",
"value" : 0
},
"status" : "OK"
},
{
"distance" : {
"text" : "219 km",
"value" : 219198
},
"duration" : {
"text" : "2 Stunden, 16 Minuten",
"value" : 8153
},
"status" : "OK"
}
]
},
{
"elements" : [
{
"distance" : {
"text" : "241 km",
"value" : 240984
},
"duration" : {
"text" : "2 Stunden, 19 Minuten",
"value" : 8360
},
"status" : "OK"
},
{
"distance" : {
"text" : "64,4 km",
"value" : 64375
},
"duration" : {
"text" : "49 Minuten",
"value" : 2964
},
"status" : "OK"
}
]
}
],
"status" : "OK"
}
Im diesem Beispiel ist die letzte Value (2964) die kürzeste und schnellste Route.
Jetzt kommt das HTTPMOD (http://www.fhemwiki.de/wiki/Ger%C3%A4te_mit_Web-Interface) ins Spiel.
Wie kann man den Wert ("text" : "49 Minuten") über der Value extrahieren?
Hier die Google Doku
Google API (https://developers.google.com/maps/documentation/distancematrix/?hl=de)
perl kann json, google doch einfach mal nach "perl json decode", da findest Du Beschreibungen, wie man auf die einzelnen Werte zugreift.
Zitat von: betateilchen am 14 Februar 2014, 10:35:34"perl json decode"
das ist ein guter Hinweis.
Aber ich wüsste nicht wie ich in das Modul HTTPMOD noch ein perl json decode integriere.
Da HTTPMOD regex verwendet wäre es leichter den wert so zu extrahieren?!
Evt. könnte man dieses Modul verwenden?
http://forum.fhem.de/index.php/topic,18982.msg126964.html#msg126964 (http://forum.fhem.de/index.php/topic,18982.msg126964.html#msg126964)
Hallo,
da die HTTP-Response im konkreten Fall mehrere mögliche Ergebnisse enthält, wird es mit HTTPMOD derzeit kaum möglich sein, die kürzeste Dauer per Regex zu extrahieren. HTTPMOD müsste dafür so erweitert werden, dass es zunächst ein Array aller möglichen Matches liest und dann mit einer definierbaren Vergleichsfunktion das "richtige" Ergebnis auswählt.
Wenn es nur ein mögliches Ergebnis gäbe, dann sollte man mit einer geeigneten Regex den Wert nach "text" im Bereich zwischen "duration" und "status" matchen können. So kann es aber leider nicht klappen.
Ich pack das mal als mögliche Erweiterung auf meine Wunschliste für HTTPMOD Erweiterungen. Zunächst möchte ich da jedoch Sessions und "set" implementieren. Die Idee mit dem dynamischen Wecker ist aber auf jefen Fall super!
Gruss
Stefan
Zitat von: StefanStrobel am 15 Februar 2014, 12:46:25
derzeit kaum möglich sein, die kürzeste Dauer per Regex zu extrahieren.
Hallo Stefan,
Jede Value hat bei dieser Google abfrage doch einen einmaligen Wert. In meinem Beispiel
{
"text" : "49 Minuten",
"value" : 2964
}
Mit Regex kann man doch "Lookahead" machen. Man müsste nur von "2964" irgendwie 10 Zeichen davor matchen.
Bin leider ein Dau in Regex ;D
Wieso irgendwie 10 Zeichen davor matchen?
Die 2964 sind doch die im Text dargestellten Minuten 2964:60= 49,.....
Ich komme mir vor, als würde ein Blinder einem Tauben die Farben erklären.
Leute, so eine JSON-Liste ist doch nichts weiter als ein großes verschachteltes Array, in dem man einfach mit der Bezeichnung auf jeden Wert zugreifen kann.
Die obige googlemaps abfrage ist mE auch falsch mit
http://maps.googleapis.com/maps/api/distancematrix/json?origins=st.poelten|&destinations=Vienna|&mode=driving&language=de-DE&sensor=false
Bekomme ich
{
"destination_addresses" : [ "Wien, Österreich" ],
"origin_addresses" : [ "Sankt Pölten, Österreich" ],
"rows" : [
{
"elements" : [
{
"distance" : {
"text" : "64,4 km",
"value" : 64375
},
"duration" : {
"text" : "49 Minuten",
"value" : 2964
},
"status" : "OK"
}
]
}
],
"status" : "OK"
}
Also nur einmal value bzw text
@Betateilchen
Habe etwas gegooglelt ,bin aber völliger Anfänger, wäre das so richtig
for (i = 0; i < myJSONResult.results.length; i++) {
myFahrzeit[i] = myJSONResult.results[i].duration_value;
}
Ok, Crashkurs "Perl & JSON für Anfänger"
use strict;
use warnings;
use JSON qw( decode_json );
my $json = '{
"name": "Bob",
"sex": "Male",
"address": {
"city": "San Jose",
"state": "California"
},
"friends":
[
{
"name": "Alice",
"age": "20"
},
{
"name": "Laura",
"age": "23"
},
{
"name": "Daniel",
"age": "30"
}
]
}';
my $decoded = decode_json($json);
# city ist ein einzelnes JSON object.
print "City = " . $decoded->{'address'}{'city'} . "\n";
# friends ist ein JSON Array (erkennbar an den eckigen Klammern)
my @friends = @{ $decoded->{'friends'} };
foreach my $f ( @friends ) {
print $f->{"name"} . "\n";
}
Du kannst Dir den Code in eine Datei test.pl kopieren und
dann mit perl test.pl ausführen, um folgendes Ergebnis zu bekommen.
City = San Jose
Alice
Laura
Daniel
Die Transferleistung auf den Antworttext von Google überlasse ich aber Dir.
Wenn Du das hinbekommst, hast Du das Prinzip verstanden.
Viel Erfolg!
define TI HTTPMOD https://maps.google.de/maps?saddr=hamburg&daddr=oberhausen&hl=de 60
attr TI readingsName1 Stunden
attr TI readingsName2 Minuten
attr TI readingsRegex1 ([\d]+) Stunden
attr TI readingsRegex2 ([\d]+) Minuten
ist zwar nicht so elegant wie über die API und per JSON, scheint aber auf die erste mögliche Route zu matchen.
Gruss
Stefan
(spass)
wer will schon nach Oberhausen 8)
(/spass)
Das ganze hier ist echt ne gute Idee für nen Modul :)
Denke viele würden sich über etwas derartiges freuen.
Tu Dir keinen Zwang an. Mach nur.
und noch ne Variante mit HTTPMOD auf die API:
define TI2 HTTPMOD http://maps.googleapis.com/maps/api/distancematrix/json?origins=st.poelten|&destinations=Vienna|&mode=driving&language=de-DE&sensor=false 120
attr TI2 readingsName1 Time
attr TI2 readingsRegex1 duration.*\n.*"text" : "([^"]+)"
sucht nach duration in einer Zeile und nach dem Wert zwischen "" nach "text" : in der Folgezeile.
Super, so funktioniert es.
Da meine Abfrage zu global war kamen mehrere alternative Ergebnisse wo man mit regex nicht weiter kam.
Mit dieser präzisen URL http://maps.googleapis.com/maps/api/distancematrix/json?origins=st.poelten|&destinations=Vienna|&mode=driving&language=de-DE&sensor=false 120
kann dein Modul mit Regex den Minuten Wert extrahieren.
Ich verwende als Regex (?=\d{2} Minuten).{2}
Damit werden nur die Zahlen gematched.
@Betateilchen
Habe mal probiert Deine Aufgabe zu lösen. Kann es aber nicht testen, da ich nur ein
Anwender bin und -ich weiss du schüttelst Dich jetzt- nur Windows und Fritzbox user bin und ich nicht weiß
wie und wo ich diesen Perlcode in Fhem einbinden kann ( Json ist auf meiner Fritte)
use strict;
use warnings;
use JSON qw( decode_json );
my $json = '{
"destination_addresses" : [ "Wien, Österreich" ],
"origin_addresses" : [ "Sankt Pölten, Österreich" ],
"rows" : [
{
"elements" : [
{
"distance" : {
"text" : "64,4 km",
"value" : 64375
},
"duration" : {
"text" : "49 Minuten",
"value" : 2964
},
"status" : "OK"
}
]
}
],
"status" : "OK"
}';
my $decoded = decode_json($json);
print "Die Fahrzeit nach " . $decoded->{'origin_addresses'} . "beträgt ";
my @duration = @{ $decoded->{'duration'} };
foreach my $f ( @duration ) {
print $f->{"text"} . "\n";
}
Ich sehe hier noch folgendes Problem: Sowie ich verstanden habe liefert die JSON Abfrage über googles distancematrix API nur die Standard-Fahrzeit, nicht jedoch die aktuelle Fahrzeit nach Verkehrslage zurück - die ist nicht besonders interessant, da statisch.
Wir brauchen vielleicht eher die directions API?:
https://developers.google.com/maps/documentation/directions/?hl=de#DirectionsRequests
"value" scheint der interessantere Wert zu sein (Zeit in Sekunden) - dann erspart man sich das parsen des "text" in Stunden, Minuten.
@schupp
Ich brauche beides nicht, wollte nur mal sehen ob ich nach Anweisung auch perl kann. ;D
Stimmt value ist der interessantere ,
aber "Die Fahrzeit nach .... beträgt .... Minuten" sieht schöner aus.
Das wird zunehmend spannend hier. Gerade im morgentlichen Berufsverkehr kann es durchaus so sein, dass 20 Minuten früher oder später aufbrechen einen signifikanten Einfluss auf die Fahrzeit hat.
Wenn man sowas im 5 oder 10 Minuten Rythmus abfragen könnte, wäre das schon praktisch.
Moin,
angeregt durch betateilchens Beispiel:
{fahrzeit("Bremen","Hamburg")}
use JSON qw( decode_json );
use LWP::UserAgent;
sub
fahrzeit($$)
{
my($start,$destination) = @_;
my $ua = LWP::UserAgent->new();
my $response = $ua -> get ("http://maps.googleapis.com/maps/api/directions/json?origin=$start&destination=$destination&sensor=false");
my $json = $response->content();
my $decoded = decode_json($json);
my @legs = @{ $decoded->{'routes'}[0]{'legs'} };
my $distance_meters = 0;
my $time_duration = 0;
foreach my $leg (@legs) {
$distance_meters = $leg->{'distance'}{'text'};
$time_duration = sprintf('%.2f',($leg->{'duration'}{'value'})/60);
}
my $ret = "Die Fahrt von $start nach $destination ist $distance_meters lang und dauert $time_duration Minuten";
return $ret;
}
Es geht auch als Einzeiler sagt Google. ;)
Gruß
Hans
Interessante Sache.
Allerdings habe ich gerade festgestellt, dass auch bei Benutzung von directions nicht die Zeit nach aktueller Verkehrslage ausgegeben wird.
Habe es getestet mit der Strecke Wohnung -> Firma. Google Maps sagt normal 45 Minuten, bei aktueller Verkehrslage 56.
Die Directions Ausgabe sagt immer 45 Minuten.
Dann such doch nach "aktueller Verkehrslage"
define TI HTTPMOD https://maps.google.de/maps?saddr=xxxxxxxxxxxxxxx&daddr=xxxxxxxxxxxx&hl=de (https://maps.google.de/maps?saddr=hamburg&daddr=oberhausen&hl=de) 360
attr TI readingsName1 Standard
attr TI readingsName2 Verkehr
attr TI readingsRegex1 ([\d]+) Minuten
attr TI readingsRegex2 (Bei aktueller Verkehrslage: ([\d]+) Minuten
Cheers
mi.ke
Hatte nicht das Modul verwendet, sondern das Beispiel der API Abfrage.
Die API Rückt die Verkehrsdaten aber nur raus, wenn man ein Zertifikat hat, was google gegen Einwurf von Scheinen rausgibt :-)
HTTPMOD gucke ich mir mal an, habe gesehen dass es jetzt im svn ist :-)
ich habe mal geschaut, welche Dienste es noch gibt und wo man eine aktuelle Verkehrslage bzw. spätere Prognose bekommen kann:
maps.google.de – Achtung: kurz vor Umbau https://www.google.de/maps/
aktuelle Verkehrslage ja – aber schwierig zu extrahieren?
Prognose nein
Web-API frei keine Verkehrslage
Web-API business Verkehrslage verfügbar in directions API
maps.adac.de http://maps.adac.de/
aktuelle Verkehrslage ja – aber schwierig zu extrahieren?
Prognose ja, Zeitangabe möglich
Web-API frei ???
Web-API business ???
here.com/directions http://here.com/directions
aktuelle Verkehrslage ja – aber schwierig zu extrahieren?
Prognose nein
Web-API frei ??? – doku nur mit account
Web-API business ??? – doku nur mit account
Besonderheit deep-link routing ueber URL Pfad z.B. für Hintertupfing -> Posemuckel: http://here.com/directions/drive/Hintertupfing/Posemuckel
m.here.com (mobil-version) http://m.here.com/
??? Routenplanung verfügbar, geht aber nicht im Browser? (firefox, IE)
tomtom.com http://www.routes.tomtom.com
aktuelle Verkehrslage ja – aber schwierig zu extrahieren?
Prognose ja, Zeitangabe möglich
Web-API frei ???
Web-API business ???
autobahn NRW http://www.autobahn.nrw.de/
aktuelle Verkehrslage ja – aber Flash
Prognose 30, 60 min Flash
Web-API frei nein
autobahn NRW mobil http://www.autobahn.nrw.de/mobil/
aktuelle Verkehrslage ja , grafisch
Prognose ja, grafisch
Web-API frei ja, undokumentiert, grafisch?
siehe http://blog.offeneskoeln.de/2013/03/apis-strassen-nrw/
maps.bing.de http://www.bing.com/maps/?mkt=de-de
keine Verkehrslage und Prognose
Verkehr grafisch
via-michelin http://www.viamichelin.de/web/Routenplaner
keine Verkehrslage und Prognose
Verkehr grafisch
falk.de http://www.falk.de/
keine Verkehrslage und Prognose
Verkehr grafisch
klicktel.de
keine Verkehrslage und Prognose
openstreetmap
keine Verkehrslage und Prognose
d.h. google, adac, here und tomtom kommen prinzipiell in Frage, sind aber alle nicht einfach so per API erreichbar
HTTPMOD auf die Standard-URL liefert häufig den gesuchten Wert nicht im buffer zurück - oder ich mache etwas falsch.
Wenn die gesuchten Werte bei einer Abfrage per HTTPMOD auf die Einstiegs-URL nicht im Puffer (buf) landen, dann könnte das daran liegen, dass die erste HTML-Seite die Daten tatsächlich nicht enthält sondern diese erst dynamisch nachläd...
Die Herausforderung besteht dann darin herauszufinden, mit welchen Abfragen / Parametern man direkt an die Werte kommt.
Ich würde empfehlen das mit einem lokalen Proxy wie der BurpSuite genauer anzusehen. Da sieht man dann die einzelnen Requests und Responses, die zwischen Browser und Server hin- und hergehen.
Gruss
Stefan
Also ich lasse seit heute morgen die Abfrage alle 5 Minuten über die URL laufen
und hatte nur 3 mal keinen Wert im Reading.
https://maps.google.de/maps?saddr=START_STRASSE+NR,+START_STADT&daddr=ZIEL_STRASSE+HAUSNUMMER,+ZIEL_STADT&hl=de 300
Funktioniert so gut , dass ich gerade den Rückweg auch eingebaut habe . . .
Was ich bei HTTPMOD vermisse, ist die Möglichkeit temporär zu deaktivieren z.B. mit
attr TI disable 1
dann könnte die Abfrage "Hinfahrt" morgens eine Stunde laufen
und die Rückfahrt abends, natürlich nur unter der Woche.
Ansonsten bin ich total happy damit . . . ;D
Hallo!
Bei mir klappt es auch mit:
https://maps.google.de/maps?saddr=Ragow&daddr=52.3758212,13.1500601+to:Albert-Einstein-Ring,+Kleinmachnow&ll=52.348344,13.355942&spn=0.258796,0.617294&sll=52.348333,13.380251&sspn=0.258796,0.617294&geocode=FbvcHQMd9rHOACkNb6VQiz-oRzEWzWC5_FNfJA%3BFQ0xHwMdbKfIACk_B-HlH1-oRzFwnK5Bv8thOw%3BFQGvHwMdyjzJACk7U54tOlmoRzEV3ANBeDesKQ&oq=Alber&mra=ls&t=m&z=11&via=1 360
Nun habe ich auch HTTPMOD(Ragow_Kleinmachnow) das "State" vom Verkehr mitgegeben, nun wollte ich das "State" von "Ragow_Kleinmachnow" an einem dummy übergeben aber irgendwie mache ich was falsch, vielleicht hat ja einer von euch eine Idee warum es mit dieser Code nicht geht:
define Verkehr1 notify Ragow_Kleinmachnow { \
my $s=fhem {Value("Ragow_Kleinmachnow")};; \
fhem ("set Schlafen $s");; \
}
der Dummy "Schlafen" ist nur zum Test!
Aber Danke schon mal für diese Tolle Lösung zum Abfragen, sowas hatte ich schon immer gesucht!
Mfg Steffen
Verratest du uns noch welche Regex du verwendest?
attr TI readingsRegex1 ([\d]+) Minuten
attr TI readingsRegex2 (Bei aktueller Verkehrslage: ([\d]+) Minuten
funktioniert nicht
@Steffen
gib mal Deine URL im Browser ein.
Dann wirst Du feststellen, das dort keine Verkehrslage angegeben wird.
Wenn in der Vorlage das Ergebnis nicht steht, ist es halt nicht zu finden.
@netbus
Zitat von: netbus am 18 Februar 2014, 08:22:20
Verratest du uns noch welche Regex du verwendest?
attr TI readingsRegex1 ([\d]+) Minuten
attr TI readingsRegex2 (Bei aktueller Verkehrslage: ([\d]+) Minuten
Habe ich doch schon veraten :-)
Zitat von: netbus am 18 Februar 2014, 08:22:20
funktioniert nicht
URL nicht API
...und in der Vorlage muss natürlich das Ergebnis stehen
Zitat von: mi.ke am 18 Februar 2014, 09:16:40
@netbusHabe ich doch schon veraten :-)URL nicht API
...und in der Vorlage muss natürlich das Ergebnis stehen
Ich verwende die URL und nicht API ;)
Und in jedem Regex tester wirst du sehen dass das eine unzulässige regex ist
attr TI readingsRegex2 (Bei aktueller Verkehrslage: ([\d]+) Minuten
Zitat von: mi.ke am 18 Februar 2014, 09:16:40
@Steffen
gib mal Deine URL im Browser ein.
Dann wirst Du feststellen, das dort keine Verkehrslage angegeben wird.
Ok, aber es klappt ja bei mir:
Readings
Standard 30 2014-02-18 09:25:31
Verkehr 31 2014-02-18 09:25:31
State ist ja bei mir auch:
STATE 31
Hier auch nochmal meine attr:
readingsName1 Standard
readingsName2 Verkehr
readingsRegex1 ([\d]+) Minuten
readingsRegex2 Bei aktueller Verkehrslage: ([\d]+) Minuten
stateFormat Verkehr
Mir ging es ja nur darum wie ich diesen "State Wert" an einem Dummy übergeben könnte???
Mfg Steffen
@ Steffen
Reading kein Value
my $Minuten= ReadingsVal("TI", "Minuten", "99")
@netbus
Sorry,ohne führende (
NICHT :
attr TI readingsRegex2 (Bei aktueller Verkehrslage: ([\d]+) MinutenSONDERN :
attr TI readingsRegex2 Bei aktueller Verkehrslage: ([\d]+) Minuten
Zitat von: Steffen am 18 Februar 2014, 06:33:25
define Verkehr1 notify Ragow_Kleinmachnow { \
my $s=fhem {Value("Ragow_Kleinmachnow")};; \
fhem ("set Schlafen $s");; \
}
Da die Werte in die Readings geschrieben werden wirst du im State nichts sehen.
Probier mal
define Verkehr1 notify Ragow_Kleinmachnow { \
my $s= ReadingsVal("Ragow_Kleinmachnow","Verkehr",0)};; \
fhem ("set Schlafen $s");; \
}
Bei mir geht's immer noch nicht.
Ich bekomme auch mit dem Beispiel
https://maps.google.de/maps?saddr=Ragow&daddr=52.3758212,13.1500601+to:Albert-Einstein-Ring,+Kleinmachnow&ll=52.348344,13.355942&spn=0.258796,0.617294&sll=52.348333,13.380251&sspn=0.258796,0.617294&geocode=FbvcHQMd9rHOACkNb6VQiz-oRzEWzWC5_FNfJA%3BFQ0xHwMdbKfIACk_B-HlH1-oRzFwnK5Bv8thOw%3BFQGvHwMdyjzJACk7U54tOlmoRzEV3ANBeDesKQ&oq=Alber&mra=ls&t=m&z=11&via=1 360
immer noch einen leeren buffer zurück und im logfile steht HTTPMOD got error in callback: [URL] empty answer received - also genauer:
2014.02.18 19:36:02 3: HTTPMOD got error in callback: https://maps.google.de/maps?saddr=Ragow&daddr=52.3758212,13.1500601+to:Albert-Einstein-Ring,+Kleinmachnow&ll=52.348344,13.355942&spn=0.258796,0.617294&sll=52.348333,13.380251&sspn=0.258796,0.617294&geocode=FbvcHQMd9rHOACkNb6VQiz-oRzEWzWC5_FNfJA%3BFQ0xHwMdbKfIACk_B-HlH1-oRzFwnK5Bv8thOw%3BFQGvHwMdyjzJACk7U54tOlmoRzEV3ANBeDesKQ&oq=Alber&mra=ls&t=m&z=11&via=1: empty answer received
Könnte das u.U. am https liegen? Wie finde ich das raus? Muss ich da evtl. auf dem RPi noch etwas anstellen, damit https geht? (bein den anderen Diensten mit http kommt zumindest irgend etwas zurück - wenn auch nicht das, was ich will)
Oder was genau muss ich beim requestHeader1...requestHeaderX angeben?
Rufe doch mal im Browser deine URL auf und du wirst sehen
- du bekommst keine Fahrzeit weil
- du drei Destinations angibts
- ich verwende auch den RPi ohne extra Plugins oder sonstiges
Probiere mal diese Url
https://maps.google.at/maps?saddr=ragow&daddr=Albert-Einstein-Ring,+Kleinmachnow&hl=de&sll=52.288699,13.545974&sspn=0.060376,0.154324&geocode=FbvcHQMd9rHOACkNb6VQiz-oRzEWzWC5_FNfJA%3BFQGvHwMdyjzJACk7U54tOlmoRzEV3ANBeDesKQ&t=h&mra=ls&z=11&via=1
an der URL liegt es nicht - ich wollte nur mal die von Steffen probieren, die bei ihm wohl klappt.
Bei mit geht selbst mein ganze simples HH->OB Beispiel nicht
define route_HH_OB HTTPMOD http://maps.google.de/maps?saddr=hamburg&daddr=oberhausen&hl=de 360
und liefert genau wie deine den leeren Buffer und obigen Fehler.
BTW: Mein RPi läuft mit raspbmc, SSL ist standardmäßig installiert (aber nicht im FHEM cert - siehe wiki: http://www.fhemwiki.de/wiki/Raspberry_Pi_%26_HTTPS )
so, der erste Schritt wäre getan: Ich habe die Abfrage für google, tomtom und here umgesetzt. Bei google war es etwas tricky: die Abfrage, die bei anderen funktioniert, gab bei mir immer einen leeren buffer.
Zur Analyse habe ich keinen Proxy installiert, sondern einfach die "Netzwerkanalyse" vom Firefox bemüht (zu finden im Menü unter "Web-Entwickler") und dann mit https://www.debuggex.com/ an der regexp gebastelt.
Hier der Code für google, tomtom und zwei verschiedene Einstellungen für here anhand des Beispiels HH->OB (nein, das ist nicht meine tägliche Strecke. Von Beileidsbekundungen und despektierlichen Kommentaren über Oberhausen bitte ich abzusehen ;) ):
define route_HH_OB_here0 HTTPMOD http://route.cloud.api.here.com/routing/7.2/calculateroute.json?routeattributes=sh,wp,sm,bb,lg,no&maneuverattributes=po,ix,tt,le,rn,nr,ru,nu,sp,ac,bt,tm&linkattributes=&legattributes=&jsonAttributes=41&verboseMode=5&metricSystem=metric&alternatives=2&waypoint0=geo!53.55334,9.99247&waypoint1=geo!51.46945,6.85509&language=de_DE&mode=fastest;;car;;traffic:disabled;;&app_id=SqE1xcSngCd3m4a1zEGb&token=r0sR1DzqDkS6sDnh902FWQ&requestId=1 595
attr route_HH_OB_here0 group Verkehrslage
attr route_HH_OB_here0 readingsExpr1 $val / 1000
attr route_HH_OB_here0 readingsExpr2 $val / 60
attr route_HH_OB_here0 readingsExpr3 $val / 60
attr route_HH_OB_here0 readingsExpr4 $val / 60
attr route_HH_OB_here0 readingsName1 distance
attr route_HH_OB_here0 readingsName2 trafficTime
attr route_HH_OB_here0 readingsName3 baseTime
attr route_HH_OB_here0 readingsName4 travelTime
attr route_HH_OB_here0 readingsRegex1 "summary":.+"distance":([\d]+)
attr route_HH_OB_here0 readingsRegex2 "summary":.+"trafficTime":([\d]+)
attr route_HH_OB_here0 readingsRegex3 "summary":.+"baseTime":([\d]+)
attr route_HH_OB_here0 readingsRegex4 "summary":.+"travelTime":([\d]+)
attr route_HH_OB_here0 room Verkehr
attr route_HH_OB_here0 stateFormat {sprintf("Entfernung %.0f km, Verkehr %.0f Min, Reise %.0f Min, Verzögerung %.0f Min", ReadingsVal($name,"distance",0), ReadingsVal($name,"trafficTime",0), ReadingsVal($name,"travelTime",0), ReadingsVal($name,"delayTime",0))}
attr route_HH_OB_here0 userReadings delayTime { ReadingsVal($name,"trafficTime",0) - ReadingsVal($name,"travelTime",0);; }
define FileLog_route_HH_OB_here0 FileLog ./log/route_HH_OB_here0-%Y-%m.log route_HH_OB_here0
attr FileLog_route_HH_OB_here0 room Verkehr
define SVG_route_HH_OB_here0 SVG FileLog_route_HH_OB_here0:traffic:CURRENT
attr SVG_route_HH_OB_here0 group Verkehrsverlauf
attr SVG_route_HH_OB_here0 room Verkehr
define route_HH_OB_here1 HTTPMOD http://route.cloud.api.here.com/routing/7.2/calculateroute.json?routeattributes=sh,wp,sm,bb,lg,no&maneuverattributes=po,ix,tt,le,rn,nr,ru,nu,sp,ac,bt,tm&linkattributes=&legattributes=&jsonAttributes=41&verboseMode=5&metricSystem=metric&alternatives=2&waypoint0=geo!53.55334,9.99247&waypoint1=geo!51.46945,6.85509&language=de_DE&mode=fastest;;car;;traffic:enabled;;&app_id=SqE1xcSngCd3m4a1zEGb&token=r0sR1DzqDkS6sDnh902FWQ&requestId=1 610
attr route_HH_OB_here1 group Verkehrslage
attr route_HH_OB_here1 readingsExpr1 $val / 1000
attr route_HH_OB_here1 readingsExpr2 $val / 60
attr route_HH_OB_here1 readingsExpr3 $val / 60
attr route_HH_OB_here1 readingsExpr4 $val / 60
attr route_HH_OB_here1 readingsName1 distance
attr route_HH_OB_here1 readingsName2 trafficTime
attr route_HH_OB_here1 readingsName3 baseTime
attr route_HH_OB_here1 readingsName4 travelTime
attr route_HH_OB_here1 readingsRegex1 "summary":.+"distance":([\d]+)
attr route_HH_OB_here1 readingsRegex2 "summary":.+"trafficTime":([\d]+)
attr route_HH_OB_here1 readingsRegex3 "summary":.+"baseTime":([\d]+)
attr route_HH_OB_here1 readingsRegex4 "summary":.+"travelTime":([\d]+)
attr route_HH_OB_here1 room Verkehr
attr route_HH_OB_here1 stateFormat {sprintf("Entfernung %.0f km, Verkehr %.0f Min, Reise %.0f Min, Verzögerung %.0f Min", ReadingsVal($name,"distance",0), ReadingsVal($name,"trafficTime",0), ReadingsVal($name,"travelTime",0), ReadingsVal($name,"delayTime",0))}
attr route_HH_OB_here1 userReadings delayTime { ReadingsVal($name,"trafficTime",0) - ReadingsVal($name,"travelTime",0);; }
define FileLog_route_HH_OB_here1 FileLog ./log/route_HH_OB_here1-%Y-%m.log route_HH_OB_here1
attr FileLog_route_HH_OB_here1 room Verkehr
define SVG_route_HH_OB_here1 SVG FileLog_route_HH_OB_here1:traffic:CURRENT
attr SVG_route_HH_OB_here1 group Verkehrsverlauf
attr SVG_route_HH_OB_here1 room Verkehr
define route_HH_OB_tomtom HTTPMOD http://routes.tomtom.com/lbs/services/route/1/53.5538,9.99156:51.46958,6.86597/Quickest/json/1e2099c7-eea9-476b-aac9-b20dc7100af1;;language=de;;avoidTraffic=true;;includeTraffic=true;;day=today;;time=now;;iqRoutes=2;;trafficModelId=1393106260406;;map=basic 615
attr route_HH_OB_tomtom group Verkehrslage
attr route_HH_OB_tomtom readingsExpr1 $val / 1000
attr route_HH_OB_tomtom readingsExpr2 $val / 60
attr route_HH_OB_tomtom readingsExpr3 $val / 60
attr route_HH_OB_tomtom readingsName1 distance
attr route_HH_OB_tomtom readingsName2 travelTime
attr route_HH_OB_tomtom readingsName3 delayTime
attr route_HH_OB_tomtom readingsRegex1 "totalDistanceMeters":([\d]+)
attr route_HH_OB_tomtom readingsRegex2 "totalTimeSeconds":([\d]+)
attr route_HH_OB_tomtom readingsRegex3 "totalDelaySeconds":([\d]+)
attr route_HH_OB_tomtom room Verkehr
attr route_HH_OB_tomtom stateFormat {sprintf("Entfernung %.0f km, Verkehr %.0f Min, Reise %.0f Min, Verzögerung %.0f Min", ReadingsVal($name,"distance",0), ReadingsVal($name,"trafficTime",0), ReadingsVal($name,"travelTime",0), ReadingsVal($name,"delayTime",0))}
attr route_HH_OB_tomtom userReadings trafficTime { ReadingsVal($name,"travelTime",0) + ReadingsVal($name,"delayTime",0);; }
define FileLog_route_HH_OB_tomtom FileLog ./log/route_HH_OB_tomtom-%Y-%m.log route_HH_OB_tomtom
attr FileLog_route_HH_OB_tomtom room Verkehr
define SVG_route_HH_OB_tomtom SVG FileLog_route_HH_OB_tomtom:traffic:CURRENT
attr SVG_route_HH_OB_tomtom group Verkehrsverlauf
attr SVG_route_HH_OB_tomtom room Verkehr
define route_HH_OB_google HTTPMOD https://www.google.de/maps/preview/directions?fp=1&srv=dir&authuser=0&hl=de&pb=!1m5!1sHamburg!2s0x47b161837e1813b9%3A0x4263df27bd63aa0!3m2!3d53.551084599999996!4d9.9936818!1m2!1sOberhausen!13sBChIJGYNsLEHruEcRrmqObbRKUuc%3D!3m12!1m3!1d1064732.1526667867!2d7.663988700000001!3d51.427085250000005!2m3!1f0!2f0!3f0!3m2!1i1223!2i642!4f13.1!8m0!15m4!1sJx4JU_7jFI2W0QWe_4CwDQ!4m1!2i5361!7e81!20m28!1m6!1m2!1i0!2i0!2m2!1i450!2i642!1m6!1m2!1i1173!2i0!2m2!1i1223!2i642!1m6!1m2!1i0!2i0!2m2!1i1223!2i20!1m6!1m2!1i0!2i622!2m2!1i1223!2i642 620
attr route_HH_OB_google group Verkehrslage
attr route_HH_OB_google readingsExpr1 $val / 1000
attr route_HH_OB_google readingsExpr2 $val / 60
attr route_HH_OB_google readingsExpr3 $val / 60
attr route_HH_OB_google readingsName1 distance
attr route_HH_OB_google readingsName2 travelTime
attr route_HH_OB_google readingsName3 trafficTime
attr route_HH_OB_google readingsRegex1 \[([\d]+),"[\d]+
attr route_HH_OB_google readingsRegex2 \[([\d]+),"[\d]+ [Std. Min.]+
attr route_HH_OB_google readingsRegex3 \[\[([\d]+),"[\d]+ [Std. Min.]+
attr route_HH_OB_google room Verkehr
attr route_HH_OB_google stateFormat {sprintf("Entfernung %.0f km, Verkehr %.0f Min, Reise %.0f Min, Verzögerung %.0f Min", ReadingsVal($name,"distance",0), ReadingsVal($name,"trafficTime",0), ReadingsVal($name,"travelTime",0), ReadingsVal($name,"delayTime",0))}
attr route_HH_OB_google userReadings delayTime { ReadingsVal($name,"trafficTime",0) - ReadingsVal($name,"travelTime",0);; }
define FileLog_route_HH_OB_google FileLog ./log/route_HH_OB_google-%Y-%m.log route_HH_OB_google
attr FileLog_route_HH_OB_google room Verkehr
define SVG_route_HH_OB_google SVG FileLog_route_HH_OB_google:traffic:CURRENT
attr SVG_route_HH_OB_google group Verkehrsverlauf
attr SVG_route_HH_OB_google room Verkehr
Als nächstes kommt Schritt 2: Wie baut man daraus jetzt einen intelligenten Wecker?
Hi Schlupp,
vielleicht liest du das ja noch oder ggfs. kann mir jemand anders helfen. Ich verstehe alles soweit und mit TomTom klappt es auch wunderbar, allerdings bekomme ich keine brauchbare Google URL heraus :-) Ich habe es mit vielen eigenen versucht und auch mir über deinen Link etwas zusammenzubauen. Auch habe ich mich am Netzwerkanalyse Tool von Firefox versucht bekomme aber keine sinnvollen Ergebnisse.
Kannst du oder jmd. anders mir bitte sagen, wie ich eine sinnvolle URL für google hinbekomme? Bei TomTom finde ich es schade, dass ich keine alternative Route auswählen kann sondern er mir immer eine zwingend vorgibt - diese möchte ich bei meinem Arbeitsweg allerdings gar nicht fahren! :-)
Außerdem glaube ich das bei TomTom die Route geändert wird, sobald dort "Stau" ist - d.h. wenn ich mich auf die DelayTime verlasse bin ich auch verloren, weil die ist ja dann wieder geringer und ich merke die Warnung gar nicht.
Danke schonmal!
Gruß
Thomas
Moin zusammen,
auch ich habe mich schon daran versucht und bin mit dem HTTPMOD alleine gescheitert. Da ich aber auch einen Apache auf meinem RPi betreibe, auf dem fhem läuft, habe ich ein kleines php-Script gebastelt, dass mir die Daten schön aufbereitet und dann in einem gescheiten Format HTTPMOD zur Verfügung stellt. Das ist aber nur die erste Stufe - Ziel ist es ein eigenes Module für fhem zu bauen.
Für das RIS der Bahn habe ich schon ein fhem-Modul auf Basis der HttpUtils gebastelt, dass ich gerade ausgiebig teste. Das kann ich gerne auch zur Verfügung stellen, wenn es fertig ist.
Aber zurück zu google-maps...
Als URL verwende ich in dem php-script:
http://maps.google.de/maps?saddr=#START#&daddr=#ZIEL#&hl=de
also nach dem Schema (keine Leerzeichen!)
http://maps.google.de/maps?saddr=Fischmarkt,Hamburg&daddr=HamburgHbf&hl=de
da wir ja 'n' Routen von Google bekommen, nutze ich folgendes regexp mit preg_match_all in php:
|<li class="dir-altroute".*<div class="altroute-rcol altroute-info"> <span>(.*) km</span>, <span>(.*)</span>.*<span>Bei aktueller Verkehrslage: (.*)</span> </div> <div>(.*)</div> <div class="dir-altroute-clear">.*</li>|U
Als Ausgabe habe ich dann "routeName:'Reeperbahn'distance:'4.7'travelTime:'10'trafficTime:'14'"
Die Config in fhem schaut dabei dann so aus:
define MAPS_HH HTTPMOD http://127.0.0.1/maps.php?i=0 300
attr MAPS_HH group Verkehrslage
attr MAPS_HH readingsName1 routeName
attr MAPS_HH readingsName2 distance
attr MAPS_HH readingsName3 travelTime
attr MAPS_HH readingsName4 trafficTime
attr MAPS_HH readingsRegex1 routeName:'(.{0,50})'distance
attr MAPS_HH readingsRegex2 distance:'([\d.]+)'
attr MAPS_HH readingsRegex3 travelTime:'([\d]+)'
attr MAPS_HH readingsRegex4 trafficTime:'([\d]+)'
attr MAPS_HH room Verkehr
attr MAPS_HH stateFormat {sprintf("Route: %s - Entfernung %.0f km, Verkehr %.0f Min, Reise %.0f Min, Verzögerung %.0f Min", ReadingsVal($name,"routeName",0), ReadingsVal($name,"distance",0), ReadingsVal($name,"trafficTime",0), ReadingsVal($name,"travelTime",0), ReadingsVal($name,"delayTime",0))}
attr MAPS_HH timeout 20
attr MAPS_HH userReadings delayTime { ReadingsVal($name,"trafficTime",0) - ReadingsVal($name,"travelTime",0);; }
Mag sein, dass das besser geht, aber für mich tut das erst mal so! ;-)
Wenn auch hier Interesse besteht, dann bau ich daraus gern auch noch ein fhem-Modul bei Gelegenheit.
Gruß
Carsten
Hum, ein weiterer Apache macht das ganze nicht gerade unkomplizierter... :-) Ohne würde ich es gerne mit Google machen. Ansonsten habe ich folgende Variante nun für mich gebaut:
1. FHEM Mail tauglich machen
Zuerst muss FHEM in die Lage versetzt werden, Mails zu verschicken:
http://www.fhemwiki.de/wiki/E-Mail_senden
2. Koordinaten für die Traffic URL herausfinden
Auf http://routes.tomtom.com/#/ die entsprechende Strecke am besten ,,abstecken". Also in der Karte suchen, rechte Maustaste auf Karte
Und mir ,,Hier starten" und ,,Hier beenden" die Route abstecken. Solange bis es passt...
3. Die HTTPMOD Funktion ,,Verkehr_nach_Hause" im FHEM in die Config schreiben und dabei die Koordinaten anpassen (Start,Start:Ziel,Ziel).
Die rotmarkierte Zahl (600) gibt den ,,Refreshinterval in Sekunden" der Seite an:
define Verkehr_nach_Hause HTTPMOD http://routes.tomtom.com/lbs/services/route/1/50.94037,6.95937:50.95802,7.17439/Quickest/json/1e2099c7-eea9-476b-aac9-b20dc7100af1;;;;language=de;;;;avoidTraffic=false;;;;includeTraffic=true;;;;day=today;;;;time=now;;;;iqRoutes=2;;;;trafficModelId=1393106260406;;;;map=basic 600
attr Verkehr_nach_Hause readingsExpr1 $val / 60
attr Verkehr_nach_Hause readingsExpr2 $val / 60
attr Verkehr_nach_Hause readingsName1 Fahrzeit
attr Verkehr_nach_Hause readingsName2 Verzögerung
attr Verkehr_nach_Hause readingsRegex1 "totalTimeSeconds":([\d]+)
attr Verkehr_nach_Hause readingsRegex2 "totalDelaySeconds":([\d]+)
attr Verkehr_nach_Hause room Verkehr
attr Verkehr_nach_Hause stateFormat {sprintf("Fahrzeit: %.0f Min, Verzögerung: %.0f Min", ReadingsVal($name,"Fahrzeit",0), ReadingsVal($name,"Verzögerung",0))}
4. Einen Dummy definieren, der dafür sorgt, dass Meldungen nur verschickt werden, wenn dieser aktiv ist:
define Verkehr_nach_Hause_Warnung dummy
attr Verkehr_nach_Hause_Warnung room Verkehr
attr Verkehr_nach_Hause_Warnung webCmd on:off
5. Jetzt die Notify Funktion definieren, die auf Statusänderungen des Verkehrs ,,horcht" und entsprechend alarmiert, wenn der Dummy ,,on" ist und die Verzögerungszeit > 0 Minuten ist. (ggfs. anpassen)
Außerdem schaltet diese Funktion den Dummy aus, sobald eine Alarmierung erfolgt, damit nicht noch mehr ,,gleiche" Alarmierungen erfolgen.
Die DebianMail Zeile muss für Fritzbox User entsprechend Punkt 1 angepasst werden.
define Verkehr_nach_Hause_Mail notify Verkehr_nach_Hause.* {\
if((ReadingsVal("Verkehr_nach_Hause_Warnung", "state", 0 ) eq "on") &&(ReadingsVal("Verkehr_nach_Hause","Verzögerung","")) > 0) {\
my $verkehrszeit = ReadingsVal("Verkehr_nach_Hause","Verzögerung","");;\
my $verkehrstext = "Die aktuelle Verzögerung für den Heimweg beträgt: " . $verkehrszeit . " Minuten";;\
DebianMail('Empfänger@Domain.com','Verkehrswarnung',$verkehrstext);;\
fhem('set Verkehr_nach_Hause_Warnung off');;\
}\
}
attr Verkehr_nach_Hause_Mail room Verkehr
6. Als letzten Schritt werden die Zeiten definiert in denen eine Warnung erfolgen soll. Im Beispiel hier jeden Tag ab 15 Uhr bis 17:30 Uhr.
define Warnung_nach_Hause_aktivieren at *15:00:00 set Verkehr_nach_Hause_Warnung on
attr Warnung_nach_Hause_aktivieren room Verkehr
define Warnung_nach_Hause_deaktivieren at *17:30:00 set Verkehr_nach_Hause_Warnung off
attr Warnung_nach_Hause_deaktivieren room Verkehr
Vielleicht kann es ja jemand gebrauchen.
Gruß
Thomas
prima, danke.
die einstellung ist dann wohl ohne wartezeit minimieren (avoidTraffic=false)? falls ich das einstellen möchte, wahrscheinlich avoidTraffic=true. weisst du zufällig welche möglichkeiten mit iqRoutes=2 möglich sind?
gruss frank
Bei avoidTraffic=true würde die URL immer eine Wartezeit optimierte Antwort geben welche für die Alarmierung dann wenig sinnvoll wäre. Der Parameter iqRoutes sagt mir gerade nix :/
Guten Tag zusammen,
versuche mich hierbei jetzt schon länger, bekomme allerdings keine Werte zurück von der tomtom Seite.
Als Fehler im Log erhalte ich:
HTTPMOD got error in callback: connect: Ein nicht blockierender Socketvorgang konnte nicht sofort ausgeführt werden.
Schade TomTom hat die Abfrage seit zwei Tagen gesperrt :(
Oder funktioniert es bei jemanden noch?
VG
Olaf
ZitatSchade TomTom hat die Abfrage seit zwei Tagen gesperrt
bei mir auch.
gruss frank
Bei mir geht es auch nicht mehr
Geht es schon wieder?
Ich glaube TomTom hat komplett etwas am Service geändert.
Habe mal versucht, wie hier im Thread geschrieben, die Google Maps Website mit HTTPMOD auszuwerten. Dabei bin ich nur auf ein Problem gestoßen:
Aufgrund meiner Route und dem aufkommenden Stau greift nicht immer die RegEx, weil die Route mal "45 Minuten" dauern kann, aber eben auch mal "1 Stunde 23 Minuten". Und das bekomme ich einfach nicht abgefangen.
Frage ich Stunde und Minuten in getrennten ReGEx ab und Multipliziere die Werte, funktioniert das nur so lange die Strecke auch wirklich mehr als eine Stunde dauert.
Bei weniger als einer Stunde greift wieder das Regex für die Stunde nicht und der alte Wert (also z:B. 1) bleibt im Reading stehen. Somit hat die Route also immer eine Stunde Offset.
Kann man das mit HTTPMOD überhaupt so abfangen?
Im Buffer müsste doch auch etwas von Value stehen, spweit ich weiss. Dort ist die Zeit in sekunden angegeben, die welche du später durch 60 dividierst.
Gruß
Hallo,
ich habe das ganze für mich und Google jetzt so gelöst:
In die 99_myUtils.pm kommt folgende Funktion
sub
GoogleExpr($$)
{
my($traffic,$source) = @_;
if($traffic =~ /(id="altroute_0" altid="0" oi="alt_0" .*?Bei aktueller Verkehrslage:.{50})/) {
$traffic = $1;
if($source eq "Standard") {
if($traffic =~ /(.{20}<span>.*? Minuten?)/) {
my $Standard = $1;
Log3 undef, 5, "$Standard";
$Standard =~ /([\d]+ Minuten?)/;
my $Std_Min = $1;
my $Std_Std = "0 Stunden";
if($Standard =~ /([\d]+ Stunden?)/) {
$Std_Std = $1;
}
Log3 undef, 3, "Normal -> $Std_Std - $Std_Min";
return "$Std_Std - $Std_Min";
}
} else {
if($traffic =~ /(Bei aktueller Verkehrslage:.{50})/) {
my $VerkehrsLage = $1;
Log3 undef, 5, "$VerkehrsLage";
$VerkehrsLage =~ /([\d]+ Minuten?)/;
my $VkL_Min = $1;
my $VkL_Std = "0 Stunden";
if($VerkehrsLage =~ /([\d]+ Stunden?)/) {
$VkL_Std = $1;
}
Log3 undef, 3, "Verkehr -> $VkL_Std - $VkL_Min";
return "$VkL_Std - $VkL_Min";
}
}
}
return "Fehler";
}
In der fhem.cfg habe ich dann:
#--------------------------------------------------------------------------
# Fahrzeit Ford:
define Ford HTTPMOD https://maps.google.de/maps?saddr=Von-Werth-Strasse+266,+Pulheim&daddr=Geestemuender+Strasse,+50735+Koeln&hl=de&output=classic&dg=brw 360
attr Ford reading01Name Standard
attr Ford reading01Regex (id="altroute_0" altid="0" oi="alt_0" .*?Bei aktueller Verkehrslage:.{50})
attr Ford reading01Expr GoogleExpr($val, "Standard")
attr Ford reading02Name Verkehrslage
attr Ford reading02Regex (id="altroute_0" altid="0" oi="alt_0" .*?Bei aktueller Verkehrslage:.{50})
attr Ford reading02Expr GoogleExpr($val, "Verkehrslage")
#--------------------------------------------------------------------------
# Fahrzeit Muehlheim:
define Muehlheim HTTPMOD https://maps.google.de/maps?saddr=Von-Werth-Strasse+266,+Pulheim&daddr=Am+Schloss+Broich,+45479+Muehlheim+an+der+Ruhr&hl=de&output=classic&dg=brw 360
attr Muehlheim reading01Name Standard
attr Muehlheim reading01Regex (id="altroute_0" altid="0" oi="alt_0" .*?Bei aktueller Verkehrslage:.{50})
attr Muehlheim reading01Expr GoogleExpr($val, "Standard")
attr Muehlheim reading02Name Verkehrslage
attr Muehlheim reading02Regex (id="altroute_0" altid="0" oi="alt_0" .*?Bei aktueller Verkehrslage:.{50})
attr Muehlheim reading02Expr GoogleExpr($val, "Verkehrslage")
Grüße Jörg
Zitat von: JoWiemann am 14 Januar 2015, 12:41:25
ich habe das ganze für mich und Google jetzt so gelöst:
Ich bekomme bei exakt deine Information folgende Logmeldung:
read callback: request type was Update,
header: HTTP/1.0 302 Found
Location: https://maps.google.de/maps?saddr=Von-Werth-Strasse+266,+Pulheim&daddr=Geestemuender+Strasse,+50735+Koeln&hl=de&output=classic&dg=brw
Cache-Control: private
Content-Type: text/html; charset=ISO-8859-1
Set-Cookie: PREF=ID=291f6c2453144d7b:TM=1421272678:LM=1421272678:S=0D46n1dUiWs4SXvb; expires=Fri, 13-Jan-2017 21:57:58 GMT; path=/; domain=.google.de
X-Content-Type-Options: nosniff
Date: Wed, 14 Jan 2015 21:57:58 GMT
Server: GFE/2.0
Alternate-Protocol: 80:quic,p=0.02, buffer empty,
Error https://maps.google.de/maps?saddr=Von-Werth-Strasse+266,+Pulheim&daddr=Geestemuender+Strasse,+50735+Koeln&hl=de&output=classic&dg=brw: empty answer received
Hat jemand eine Idee woran das liegen kann? Vom Browser aus klappts wunderbar, auch vom Terminal mit wget kann ich die Antwort abholen, nur in FHEM bekomme ich eine "empty answer". Ich habe hier auch noch die Spritpreise problemlos mit HTTPMOD laufen (allerdings nur über http und nicht https), nur bei google maps streikt irgendwas :-(
Für sachdienliche Hinweise wäre ich sehr dankbar.
Vielen Dank!
Gruß Lars
Hast du mal dein timeout höher gesetzt? 5 z.b.?
Ich versuche nun seit gestern abend, das von Jörg genannte Beispiel einzubinden. Leider bleibe ich bei der Anlage der Readings hängen - folgende Auswahl habe ich bei der Definition:
readingsExpr.*
readingsName.*
readingsRegex.*
Wie bekomme ich es nun hin, dass diese durchnummeriert werden? Wie bei Jörgs Codebeispiel?
In meiner fhem.cfg stehen diese nach Anlage wie folgt:
attr Arbeit readingsExpr.* GoogleExpr($val, "Standard")
attr Arbeit readingsName.* Standard
attr Arbeit readingsRegex.* (id="altroute_0" altid="0" oi="alt_0" .*?Bei aktueller Verkehrslage:.{50})
Muss man die jeweiligen Werte mit irgendeinem Zeichen separiert auf einmal eintragen?
Sorry, wahrscheinliche eine recht simple Angelegenheit, aber im Wiki, der CommandRef und der AnfängerPDF habe ich leider nichts gefunden.
Kann mir jemand behilflich sein?
Danke.
Zitat von: Thargor am 14 Januar 2015, 23:03:40
Hat jemand eine Idee woran das liegen kann? Vom Browser aus klappts wunderbar, auch vom Terminal mit wget kann ich die Antwort abholen, nur in FHEM bekomme ich eine "empty answer". Ich habe hier auch noch die Spritpreise problemlos mit HTTPMOD laufen (allerdings nur über http und nicht https), nur bei google maps streikt irgendwas :-(
Hallo Lars,
hast Du libio-socket-ssl-perl installier? Mach doch mal ein:
sudo apt-get update
sudo apt-get install libio-socket-ssl-perl
Grüße Jörg
Das obere Script kannst du so direkt in deine fhem.cfg einfügen. Ansonsten einfach in die Zeile auf der fhem Oberfläche eintragen: attr <dein modulname> reading01Regex <dein code>
attr <dein modulname> reading02Regex <dein code>
usw.
Dadurch kannst du es einfach durchnummerieren.
Zitat von: kimbolero am 15 Januar 2015, 21:13:51
Wie bekomme ich es nun hin, dass diese durchnummeriert werden? Wie bei Jörgs Codebeispiel?
Hallo kimbolero,
bitte berücksichtige die command.ref für HTTPMOD. Dort steht für die attr:
attr <device> reading01Name <Name für das Reading>
attr <device> reading01Regex <regexpr für die Selction>
attr <device> reading01Expr <Funktion, die über das Ergebnis von Regex ausgeführt wird>
attr <device> reading02Name <Name für das Reading>
attr <device> reading02Regex <regexpr für die Selction>
attr <device> reading02Expr <Funktion, die über das Ergebnis von Regex ausgeführt wird>
...
attr <device> reading09Name <Name für das Reading>
attr <device> reading09Regex <regexpr für die Selction>
attr <device> reading09Expr <Funktion, die über das Ergebnis von Regex ausgeführt wird>
Es können also 9 Dreiergruppen und damit 9 Readings definiert werden. Somit können aus einer Web-Adresse 9 Ergebnisse selektiert werden.
Grüße Jörg
Danke euch beiden für das Feedback.
Den Code hatte ich versucht direkt in die fhem.cfg zu packen, habe jedoch eine Fehlermeldung beim Speichern erhalten.
Tippe ich oben in die Eingabemaske:
attr Arbeit reading01Name Standard
so erhalte ich folgende Fehlermeldung (identisch als ich den Code direkt in die fhem.cfg gespeichert hatte, dort natürlich für jedes attr eine Fehlermeldung):
"Arbeit: unknown attribute reading01Name. Type 'attr Arbeit ?' for a detailed list. "
Edit:
Wenn ich "attr Arbeit ?" eintippe, erhalte ich folgende Meldung:
Arbeit: unknown attribute ?, choose one of verbose:0,1,2,3,4,5 room group comment alias eventMap userReadings do_not_notify:1,0 readingsName.* readingsRegex.* readingsExpr.* requestHeader.* requestData.* disable:0,1 noShutdown:0,1 timeout event-on-change-reading event-on-update-reading event-min-interval stateFormat devStateIcon devStateStyle fp_home icon sortby webCmd widgetOverride userattr
Edit2:
Und mit "attr Arbeit ?" habe ich mir schon selbst die Antwort auf mein Problem gegeben ;-)
Ich muss die Attribute wie folgt setzen:
attr Arbeit readingsName1 Standard
attr Arbeit readingsRegex1 (id="altroute_0" altid="0" oi="alt_0" .*?Bei aktueller Verkehrslage:.{50})
attr Arbeit readingsExpr1 GoogleExpr($val, "Standard")
attr Arbeit readingsName2 Verkehrslage
attr Arbeit readingsRegex2 (id="altroute_0" altid="0" oi="alt_0" .*?Bei aktueller Verkehrslage:.{50})
attr Arbeit readingsExpr2 GoogleExpr($val, "Verkehrslage")
Komisch, aber funktioniert - die Schreibweise war paar Kommentare weiter vorn in einem anderen Codebeispiel ebenfalls.....
Zitat von: kimbolero am 15 Januar 2015, 21:36:21
Den Code hatte ich versucht direkt in die fhem.cfg zu packen, habe jedoch eine Fehlermeldung beim Speichern erhalten.
Komisch, aber funktioniert - die Schreibweise war paar Kommentare weiter vorn in einem anderen Codebeispiel ebenfalls.....
Dann hast Du lange kein Update mehr gemacht. Die von mir gewählte Notation ist die neue, Deine wird noch aus Kompatibilitätsgründen, jedenfalls beim aktuellen Modul, unterstützt.
Grüße Jörg
OK - danke für den Hinweis.
Werde ich am Wochenende mal angehen - für den vorangeschrittenen Abend heute gilt: never change a running system ;-)
Zitat von: JoWiemann am 15 Januar 2015, 21:19:36
hast Du libio-socket-ssl-perl installier? Mach doch mal ein:
sudo apt-get update
sudo apt-get install libio-socket-ssl-perl
Nein, ist nicht installiert :-(
Ist leider auch nicht so einfach, da ich noch auf einem crosscompilierten Perl hänge ...
Aber vielen Dank für den Tipp. Ich denken das entprechene CPAN Modul wäre IO::Socket::SSL
Gruß Lars
Hallo,
und hier das Ganz für die Bahn.
#--------------------------------------------------------------------------
# Bahnauskunft:
define Bahn HTTPMOD http://mobile.bahn.de/bin/mobil/query.exe/dox?ld=9643&n=10&i=mk.03266843.1421409248&rt=1&use_realtime_filter=1&sotRequest=1&webview=&ld=9643&n=10&i=mk.03266843.1421409248&rt=1&use_realtime_filter=1&sotRequest=1&webview=&sotRequest=1&start=1 360
attr Bahn userattr reading01Name reading01Regex reading02Name reading02Regex reading03Name reading03Regex reading04Name reading04Regex reading05Name reading05Regex reading06Name reading06Regex
attr Bahn reading01Name Erste_S-Bahn_Start
attr Bahn reading01Regex >([\d]+:[\d]+)<br />[\d]+:[\d]+</a>
attr Bahn reading02Name Erste_S-Bahn_Ende
attr Bahn reading02Regex >[\d]+:[\d]+<br />([\d]+:[\d]+)</a>
attr Bahn reading03Name Zweite_S-Bahn_Start
attr Bahn reading03Regex >[\d]+:[\d]+<br />[\d]+:[\d]+</a>.*?>([\d]+:[\d]+)<br />[\d]+:[\d]+</a>
attr Bahn reading04Name Zweite_S-Bahn_Ende
attr Bahn reading04Regex >[\d]+:[\d]+<br />[\d]+:[\d]+</a>.*?>[\d]+:[\d]+<br />([\d]+:[\d]+)</a>
attr Bahn reading05Name Dritte_S-Bahn_Start
attr Bahn reading05Regex >[\d]+:[\d]+<br />[\d]+:[\d]+</a>.*?>[\d]+:[\d]+<br />[\d]+:[\d]+</a>.*?>([\d]+:[\d]+)<br />[\d]+:[\d]+</a>
attr Bahn reading06Name Dritte_S-Bahn_Ende
attr Bahn reading06Regex >[\d]+:[\d]+<br />[\d]+:[\d]+</a>.*>[\d]+:[\d]+<br />[\d]+:[\d]+</a>.*?>[\d]+:[\d]+<br />([\d]+:[\d]+)</a>
Den Link bekommt man, in dem man auf http://www.bahn.de/m/view/de/index.shtml geht und dort "Liveauskunft" auswählt. Dann die Suchparameter festlegen und "Suchen". Auf der Ergebnisseite gibt es dann den Button "Aktualisieren". Auf diesem Button mit der rechten Maustaste den Link kopieren und dann als Parameter an HTTPMOD übergeben.
Zitat von: JoWiemann am 14 Januar 2015, 12:41:25
Hallo,
ich habe das ganze für mich und Google jetzt so gelöst:
In die 99_myUtils.pm kommt folgende Funktion
sub
GoogleExpr($$)
{
my($traffic,$source) = @_;
if($traffic =~ /(id="altroute_0" altid="0" oi="alt_0" .*?Bei aktueller Verkehrslage:.{50})/) {
$traffic = $1;
if($source eq "Standard") {
if($traffic =~ /(.{20}<span>.*? Minuten?)/) {
my $Standard = $1;
Log3 undef, 5, "$Standard";
$Standard =~ /([\d]+ Minuten?)/;
my $Std_Min = $1;
my $Std_Std = "0 Stunden";
if($Standard =~ /([\d]+ Stunden?)/) {
$Std_Std = $1;
}
Log3 undef, 3, "Normal -> $Std_Std - $Std_Min";
return "$Std_Std - $Std_Min";
}
} else {
if($traffic =~ /(Bei aktueller Verkehrslage:.{50})/) {
my $VerkehrsLage = $1;
Log3 undef, 5, "$VerkehrsLage";
$VerkehrsLage =~ /([\d]+ Minuten?)/;
my $VkL_Min = $1;
my $VkL_Std = "0 Stunden";
if($VerkehrsLage =~ /([\d]+ Stunden?)/) {
$VkL_Std = $1;
}
Log3 undef, 3, "Verkehr -> $VkL_Std - $VkL_Min";
return "$VkL_Std - $VkL_Min";
}
}
}
return "Fehler";
}
In der fhem.cfg habe ich dann:
#--------------------------------------------------------------------------
# Fahrzeit Ford:
define Ford HTTPMOD https://maps.google.de/maps?saddr=Von-Werth-Strasse+266,+Pulheim&daddr=Geestemuender+Strasse,+50735+Koeln&hl=de&output=classic&dg=brw 360
attr Ford reading01Name Standard
attr Ford reading01Regex (id="altroute_0" altid="0" oi="alt_0" .*?Bei aktueller Verkehrslage:.{50})
attr Ford reading01Expr GoogleExpr($val, "Standard")
attr Ford reading02Name Verkehrslage
attr Ford reading02Regex (id="altroute_0" altid="0" oi="alt_0" .*?Bei aktueller Verkehrslage:.{50})
attr Ford reading02Expr GoogleExpr($val, "Verkehrslage")
#--------------------------------------------------------------------------
# Fahrzeit Muehlheim:
define Muehlheim HTTPMOD https://maps.google.de/maps?saddr=Von-Werth-Strasse+266,+Pulheim&daddr=Am+Schloss+Broich,+45479+Muehlheim+an+der+Ruhr&hl=de&output=classic&dg=brw 360
attr Muehlheim reading01Name Standard
attr Muehlheim reading01Regex (id="altroute_0" altid="0" oi="alt_0" .*?Bei aktueller Verkehrslage:.{50})
attr Muehlheim reading01Expr GoogleExpr($val, "Standard")
attr Muehlheim reading02Name Verkehrslage
attr Muehlheim reading02Regex (id="altroute_0" altid="0" oi="alt_0" .*?Bei aktueller Verkehrslage:.{50})
attr Muehlheim reading02Expr GoogleExpr($val, "Verkehrslage")
Grüße Jörg
Hi,
vielen Dank für den tollen Code Jörg! Was mich in diesen Thread "gelockt" hatte, waren die Worte "Wecken je nach Verkehrslage". Wenn man das wörtlich nimmt und mit deinem Code rechnen und automatisieren möchte, müsste man das Reading erst aufwändig zerpflücken. Ich habe also das "Übel" mal versucht an der Wurzel zu packen und rechne deine Stunden und Minuten schon in der myUtils komplett in Minuten um. Damit kann man nun direkt vergleichen, oder ein offset zu einer Weckzeit generieren:
sub
GoogleExpr($$)
{
my($traffic,$source) = @_;
if($traffic =~ /(id="altroute_0" altid="0" oi="alt_0" .*?Bei aktueller Verkehrslage:.{50})/) {
$traffic = $1;
if($source eq "Standard") {
if($traffic =~ /(.{20}<span>.*? Minuten?)/) {
my $Standard = $1;
Log3 undef, 5, "$Standard";
$Standard =~ /([\d]+ Minuten?)/;
my $Std_Min = $1;
my $Std_Std = "0 Stunden";
if($Standard =~ /([\d]+ Stunden?)/) {
$Std_Std = $1;
}
(my $val_m,my $txt_m) = split(' ',$Std_Min);
(my $val_h,my $txt_h) = split(' ',$Std_Std);
my $Std_Calc = ($val_h*60)+$val_m;
Log3 undef, 3, "Normal -> $Std_Std - $Std_Min";
# return "$Std_Std - $Std_Min";
return "$Std_Calc";
}
} else {
if($traffic =~ /(Bei aktueller Verkehrslage:.{50})/) {
my $VerkehrsLage = $1;
Log3 undef, 5, "$VerkehrsLage";
$VerkehrsLage =~ /([\d]+ Minuten?)/;
my $VkL_Min = $1;
my $VkL_Std = "0 Stunden";
if($VerkehrsLage =~ /([\d]+ Stunden?)/) {
$VkL_Std = $1;
}
(my $val_m,my $txt_m) = split(' ',$VkL_Min);
(my $val_h,my $txt_h) = split(' ',$VkL_Std);
my $VkL_Calc = ($val_h*60)+$val_m;
Log3 undef, 3, "Verkehr -> $VkL_Std - $VkL_Min";
# return "$VkL_Std - $VkL_Min";
return "$VkL_Calc";
}
}
}
return "Fehler";
}
Gruß
Frank
Zitat von: JoWiemann am 16 Januar 2015, 14:37:00
Hallo,
und hier das Ganz für die Bahn.
#--------------------------------------------------------------------------
# Bahnauskunft:
define Bahn HTTPMOD http://mobile.bahn.de/bin/mobil/query.exe/dox?ld=9643&n=10&i=mk.03266843.1421409248&rt=1&use_realtime_filter=1&sotRequest=1&webview=&ld=9643&n=10&i=mk.03266843.1421409248&rt=1&use_realtime_filter=1&sotRequest=1&webview=&sotRequest=1&start=1 360
attr Bahn userattr reading01Name reading01Regex reading02Name reading02Regex reading03Name reading03Regex reading04Name reading04Regex reading05Name reading05Regex reading06Name reading06Regex
attr Bahn reading01Name Erste_S-Bahn_Start
attr Bahn reading01Regex >([\d]+:[\d]+)<br />[\d]+:[\d]+</a>
attr Bahn reading02Name Erste_S-Bahn_Ende
attr Bahn reading02Regex >[\d]+:[\d]+<br />([\d]+:[\d]+)</a>
attr Bahn reading03Name Zweite_S-Bahn_Start
attr Bahn reading03Regex >[\d]+:[\d]+<br />[\d]+:[\d]+</a>.*?>([\d]+:[\d]+)<br />[\d]+:[\d]+</a>
attr Bahn reading04Name Zweite_S-Bahn_Ende
attr Bahn reading04Regex >[\d]+:[\d]+<br />[\d]+:[\d]+</a>.*?>[\d]+:[\d]+<br />([\d]+:[\d]+)</a>
attr Bahn reading05Name Dritte_S-Bahn_Start
attr Bahn reading05Regex >[\d]+:[\d]+<br />[\d]+:[\d]+</a>.*?>[\d]+:[\d]+<br />[\d]+:[\d]+</a>.*?>([\d]+:[\d]+)<br />[\d]+:[\d]+</a>
attr Bahn reading06Name Dritte_S-Bahn_Ende
attr Bahn reading06Regex >[\d]+:[\d]+<br />[\d]+:[\d]+</a>.*>[\d]+:[\d]+<br />[\d]+:[\d]+</a>.*?>[\d]+:[\d]+<br />([\d]+:[\d]+)</a>
Den Link bekommt man, in dem man auf http://www.bahn.de/m/view/de/index.shtml geht und dort "Liveauskunft" auswählt. Dann die Suchparameter festlegen und "Suchen". Auf der Ergebnisseite gibt es dann den Button "Aktualisieren". Auf diesem Button mit der rechten Maustaste den Link kopieren und dann als Parameter an HTTPMOD übergeben.
Danke Jo, dass ist definitiv schöner als die Abfrage via iframe einzubinden. Was dann allerdings nicht mehr geht ist, dass sich die Infos aktualisieren, wenn man auf den Link für den Raum klickt in dem die RG ist, oder geht das irgendwie?
Außerdem ist für meine Frau wichtig, die aktuellen Verspätungen zu sehen, daher habe ich das mal mit reingenommen:
attr Bahn reading01Name Erste_S-Bahn_Start
attr Bahn reading01Regex >([\d]+:[\d]+)<br />[\d]+:[\d]+</a>
attr Bahn reading02Name Erste_S-Bahn_Ende
attr Bahn reading02Regex >[\d]+:[\d]+<br />([\d]+:[\d]+)</a>
attr Bahn reading03Name Erste_Verspätung
attr Bahn reading03Regex >([+][\d]+)
attr Bahn reading04Name Zweite_S-Bahn_Start
attr Bahn reading04Regex >[\d]+:[\d]+<br />[\d]+:[\d]+</a>.*?>([\d]+:[\d]+)<br />[\d]+:[\d]+</a>
attr Bahn reading05Name Zweite_S-Bahn_Ende
attr Bahn reading05Regex >[\d]+:[\d]+<br />[\d]+:[\d]+</a>.*?>[\d]+:[\d]+<br />([\d]+:[\d]+)</a>
attr Bahn reading06Name Zweite_Verspätung
attr Bahn reading06Regex >[\d]+:[\d]+<br />[\d]+:[\d]+</a>.*?>[\d]+:[\d]+<br />[\d]+:[\d]+</a>.*?>.*?>.*?>([+][\d]+)
attr Bahn reading07Name Dritte_S-Bahn_Start
attr Bahn reading07Regex >[\d]+:[\d]+<br />[\d]+:[\d]+</a>.*?>[\d]+:[\d]+<br />[\d]+:[\d]+</a>.*?>([\d]+:[\d]+)<br />[\d]+:[\d]+</a>
attr Bahn reading08Name Dritte_S-Bahn_Ende
attr Bahn reading08Regex >[\d]+:[\d]+<br />[\d]+:[\d]+</a>.*>[\d]+:[\d]+<br />[\d]+:[\d]+</a>.*?>[\d]+:[\d]+<br />([\d]+:[\d]+)</a>
attr Bahn reading09Name Dritte_Verspätung
attr Bahn reading09Regex >[\d]+:[\d]+<br />[\d]+:[\d]+</a>.*?>[\d]+:[\d]+<br />[\d]+:[\d]+</a>.*?>[\d]+:[\d]+<br />[\d]+:[\d]+</a>.*?>*g">([+][\d]+)
Funktioniert zumindest für mich erst mal wie es soll, auch wenn die Expressions vermutlich noch zu optimieren sind...
Gruß,
Tobi
Hi,
das ist exakt das, wonach ich gesucht habe. Danke für den Code. Leider bin ich noch nicht wirklich im FHEM Konzept angekommen und bräuchte für den eigentlichen Sinn dieser Anwendung nochmal Eure Hilfe:
Unter dem Reading "Verkehrslage" erhalte ich nun die Minuten, die ich z.B nach Hause oder zur Arbeit benötige. Ich würde nun gerne abends eine Email /Pushover o.ä. erhalten, wenn sich ein Stau auf meinem Heimweg bildet und meine Ankunft verzögert. Wie frage ich immer von Mo-Fr abends zwischen 16:00 und 17:30 ab, ob die voraussichtliche Ankunft (also now + Minuten aus der Verkehrslage) größer als meine definierte Ankunftszeit ist? Wenn ja, soll mir FHEM eine Mail oder andere Nachricht schicken. Richtig cool wäre es noch, vorher zu checken, ob mein Status aus dem GEOFANCY Modul (ist bereits erfolgreich eingerichtet) auch auf "work" steht.
Könnt ihr mir helfen?
VG
Christian
Hi
Ich habe die Zugverspätungsanzeige in mein FHEM eingebaut.
Das funktioniert soweit auch sehr gut ..... bis .... nach ein paar Stunden der Request dann abgelehnt wird.
In der Response von mobile.bahn.de steht dann:
" leider konnten Ihre Suchergebnisse zwischenzeitlich nicht mehr gespeichert werden. Wir bitten Sie daher, eine neue Anfrage zu starten,"
Was mache ich denn da falsch ?
Die Zugverspätungsanzeige ist genau das was ich morgens brauche ... dann ist öfter mal noch Zeit für einen Kaffee :-)
Daher finde ich die Lösung super gut . Danke dafür.
Ich habe das gleiche Problem wie Axel. Hat wer eine Lösung gefunden?
Ich denke das liegt daran das die SessionID abgelaufen ist?
Hi,
auch ich habe das Problem nun.
"Früher" hatte ich das Problem nur, wenn ich fhem zu oft restartet habe, dann wurde die Abfrage scheinbar automatisch gesperrt, nun taucht das Problem bei mir leider auch so, nach ein paar Std. auf.
Vermutlich gibt es keine andere Möglichkeit als sich eine andere Lösung zu suchen.
Die hier vorgestellte Lösung aus AUT ist mMn keine Alternative, da die Verspätungen häufig nicht angezeigt werden.
Gruß,
Tobi
Hi
Was auch noch sein kann ist das sich nach einem 24h Reconnect bei DSL sich ja die IP ändert.
Dann passt das ganze nicht mehr zusammen und der Request wird abgelehnt.
Hallo,
hier die Lösung: http://forum.fhem.de/index.php/topic,30138.msg283221.html#msg283221
Hallo,
eine erste Version eines Moduls zur Fahrplanabfrage der DB findet ihr hier: http://forum.fhem.de/index.php?topic=30138.msg283446#msg283446
Grüße Jörg
Zitat von: JoWiemann am 14 Januar 2015, 12:41:25
Hallo,
ich habe das ganze für mich und Google jetzt so gelöst:
Hallo,
erstmal vielen Dank für die gute Arbeit Jörg!
Ich wollte das ganze ausprobieren, leider bekomme ich: "STATE ???" obwohl unten siehe ich bei "Readings" die aktuelle Zeiten.
Was habe ich vergessen? bin leider Anfänger :/
Hallo,
das mit dem 'state' ist so richtig. 98_HTTPMOD.pm setzt kein 'state'. Habe jedenfalls im Code keine entsprechende Stelle gefunden.
Grüße Jörg
Zitat von: JoWiemann am 13 April 2015, 17:30:42
Hallo,
das mit dem 'state' ist so richtig. 98_HTTPMOD.pm setzt kein 'state'. Habe jedenfalls im Code keine entsprechende Stelle gefunden.
Grüße Jörg
Hi, Ok Alles Klar, ich kann mir z. B. sowas eintragen
attr Ford stateFormat Standard Verkehrslage
dann sieht es schon mal besser aus obwohl mir wurde reichen wenn es einfach 0:16, 0:18 steht.
Wie hast du das bei dir gelöst?
Hallo zusammen,
erstmal danke das es wieder eine funktionierende Lösung geben soll. Klingt spannend!
Leider bekomme ich keine Readings angezeigt, denn im Buf erscheint:
"HTTP/1.0 302 Found Location: https://www.google.de:443/maps/dir/SwissLife-Platz+1,+Hannover/Wirringer+Strasse+22,+Sehnde?hl=de&dg=brw Cache-Control: private Content-Type: text/html; charset=UTF-8 Set-Cookie: PREF=ID=f10066cfdbe7e973:FF=0:TM=1430382499:LM=1430382499:S=KfZC3DJZiaBqrXO0; expires=Sat, 29-Apr-2017 08:28:19 GMT; path=/; domain=.google.de Set-Cookie: NID=67=qXuBSlNYm9HeaFKE6LrU2nud2P9MGigxS7qCZrdmW4wWIHq4wOKnndpQfJ_d2UN6cRyuogHMhYm-jEoItTWP_ceyhYZptUIZCyheLFJxqYloPp1VPmr0DrRHMam0RsJz; expires=Fri, 30-Oct-2015 08:28:19 GMT; path=/; domain=.google.de; HttpOnly P3P: CP="This is not a P3P policy! See http://www.google.com/support/accounts/bin/answer.py?hl=en&answer=151657 for more info." Date: Thu, 30 Apr 2015 08:28:19 GMT Server: gws Content-Length: 305 X-XSS-Protection: 1; mode=block X-Frame-Options: SAMEORIGIN Alternate-Protocol: 80:quic,p=1 <HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8"> <TITLE>302 Moved</TITLE></HEAD><BODY> <H1>302 Moved</H1> The document has moved <A HREF="https://www.google.de:443/maps/dir/SwissLife-Platz+1,+Hannover/Wirringer+Strasse+22,+Sehnde?hl=de&dg=brw">here</A>. </BODY></HTML> "
Funktioniert es denn bei euch noch?
Gruß,
Thomas
Nein, Google hat die Classic- Version nun scheinbar ganz abgeschaltet und wir müssten die Regex anpassen. Es gibt zwar noch die Möglichkeit einen "quasi Classic-" und einen "lite-" Modus aufzurufen, aber der Quelltext unterscheidet sich leider stark von der alten Classic- Version und ähnelt eher dem der neuen Oberfläche. Hier mal die Links:
"quasi Classic- Maps (https://www.google.com/lochp)" ; "lite- Maps (https://www.google.com/maps/@37.0625,-95.677068,4z?force=lite)"
Möglicherweise gibt es die Daten ja auch über einen andern Dienst?
So, und nun wieder ihr... ;D
Ich bin übrigens seit diesem Jahr Berufspendler und habe mich sehr über diese Funktion gefreut.
Mit "quasi Classic- Maps" funktioniert das schon (noch). Ich habe es aber bisher nicht geschafft, eine bestimmte Strecke vorzugeben.
Ich kann zwar mittels "to:" anstelle "daddr" mehrere Ziele angeben
https://www.google.com/lochp?saddr=Startadresse+1,+01234+Irgendwo+to:Woganzanders+to:Endadresse+2,+12345+Irgendwoanders&hl=de&output=classic&dg=brw 900
dann kommt aber die typische Meldung: "Bei aktueller Verkehrslage" nicht mehr, somit kann auch keine Fahrzeit mehr ausgelesen werden.
Da es sich bei mir um einen längeren Weg handelt ist es schon bedeutend, ob die angegeben Fahrzeit auch für den Weg gilt, den ich eigentlich immer nehme. Der Standardweg, den mir Google ansonsten zeigt geht vor der Haustür gleich in die andere Richtung.
Hallo,
habe jetzt glaube ich alles durch probiert. Ein einfacher http-Request führt bei keinem Anbieter zu einem Ergebnis, da die Ergebnisse immer in Containern verpackt sind, die erst durch den Browser dargestellt werden. ist einfach Schei....
Grüße Jörg
Nu ist es also soweit: Die Lite-Version geht jetzt nicht mehr.
Hat einer schon eine Alternative gefunden?
Finde es sehr schade das ich keine Stauwarnungen mehr in FHEM bekomme.
Hi
mit Google Directions müsste das doch gehen:
https://developers.google.com/maps/documentation/directions/intro
Das gibt es auch mit kleinen Limitierungen in einer freien Variante. Man darf halt nicht mehr als 2500 Abfragen pro Tag und /oder 2 gleichzeitige "abschießen". Außerdem ist man auf 8 Waypoints begrenzt. Das sollte doch in 99% der hier dargestellten Szenarien dicke reichen... Die Rückmeldung geht über xml oder JSON, und sollte relativ einfach zu verarbeiten sein. Allerdings habe ich noch nicht wirklich eine Ahnung, wie man das in FHEM abgefragt bekommt. Auf der Kommandozeile mit wget bzw. im Browser habe ich das in der ganz freien Variante bereits getsetet. Bin begeistert und lege mir jedtzt einen API Key für die Free Varainate zu. Wäre super, wenn das jemand in perl auswrtbar machen könnte. Das bash Script kann ich auf Wunsch gerne hochladen.
VG+
Christian
Zitat von: chris0478 am 23 Juli 2015, 14:56:10
Hi
mit Google Directions müsste das doch gehen:
https://developers.google.com/maps/documentation/directions/intro
Das gibt es auch mit kleinen Limitierungen in einer freien Variante. Man darf halt nicht mehr als 2500 Abfragen pro Tag und /oder 2 gleichzeitige "abschießen". Außerdem ist man auf 8 Waypoints begrenzt. Das sollte doch in 99% der hier dargestellten Szenarien dicke reichen... Die Rückmeldung geht über xml oder JSON, und sollte relativ einfach zu verarbeiten sein. Allerdings habe ich noch nicht wirklich eine Ahnung, wie man das in FHEM abgefragt bekommt. Auf der Kommandozeile mit wget bzw. im Browser habe ich das in der ganz freien Variante bereits getsetet. Bin begeistert und lege mir jedtzt einen API Key für die Free Varainate zu. Wäre super, wenn das jemand in perl auswrtbar machen könnte. Das bash Script kann ich auf Wunsch gerne hochladen.
VG+
Christian
Wenn Google nichts zu damals (http://forum.fhem.de/index.php/topic,20151.msg138982.html#msg138982) geändert hat, dann wird in der free Version leider nicht aktuelle Verkehrslage angegeben, sondern nur die Fahrzeit ohne Verkehr. Für mich ist jedoch der Stau relevant. Dass ich ohne Stau 48 Minuten von der Arbeit bis nach Hause brauche weis ich selber. Tatsächlich schwankt es aber leider zwischen 1 bis 2 Stunden, eben wegen dem Verkehr.
So wie ich das verstanden habe, gibt es zwei unterschiedliche Möglichkeiten, mit der Free Variante. Zum einen ohne API Key, dann gibt es in der Tat nur die geschätzte Zeit ohne Verkehr, zum anderen halt mit API Key und Verkehrslage. Werde das ausprobieren.
sch..... Trotz API Key bekomme ich nur die voraussichtliche Zeit ohne Stau angezeigt... Das hilft in der Tat nicht weiter, oder ich mache etwas falsch.
Du machst nichts falsch. Guck mal bei der Doku weiter unten, wo das JSON Item beschrieben ist. Da steht, dass man einen work App Keynote braucht und entsprechende quotas. Und das ist leidernur für Geld zu haben. :-(
Habe mich gerade mal bei den MItbewerbern umgeschaut. Der Routenplaner von Bing schaut so aus, wie die alte Google Mpas Version. Kann man das nicht auswerten? Der Routenplaner ist mit einem einfachen Link adressierbar und die Auswertung sollte analog der Google Maps Version machbar sein. Allein fehlt mir das nötige FHEM/Perl Know How, um das hier aufgezeigte 99_myutils.pl Modul wntsprechend umzuschreiben.
Danke für die Info. Werde mir das am Wochenende mal ansehen. Weißt Du woher Bing die Infos nimmt. Google macht das unter andrem über das Bewegungsprofil von Androide Smart Phones.
Grüße Jörg
Gesendet von iPhone mit Tapatalk
Nein, keine Ahnung ob die da Ihre Windows Phones für nehmen. Ich vermute mal, daß diese Daten mittlerweile ohnehin von den Netzbetreibern aktiv gehandelt werden. Viele Radiosender rühmen sich ja mittlerweile mit Echtzeit Infos, die sie offenbar von denen bekommen. Google hat natürlich leichtes Spiel über Android. Bei MS könnte ich mir noch Nokia als Datenlieferanten vorstellen.
Hab gesehen, daß Bing auch eine API hat, mit der man etwas machen könnte. Auch das übersteigt meine eher rudimentären Programmierkenntnisse.....
Also ich habe bei mir jetzt wieder alles mit der Google API hinbekommen und werde nun noch einen ausführlichen Beitrag auf meinem Blog blog-gedanken.de erstellen.
Man benötigt auf jeden Fall einen Browser API Key, der aber kostenfrei zu haben ist und für genug Aufrufe ausreichen sollte. Das Define für für HTTPMOD sieht dann wie folgt aus:
https://maps.googleapis.com/maps/api/distancematrix/json?origins=ORT,STRASSE+NR&destinations=ORT,STRASSE+NR&mode=driving&language=de-DE&departure_time=now&key=AIzaSyDSiy0B3a_RdjG4XDCGiuVu8_EEeYJv9mo 3600
Damit das Ganze funktioniert muss man wohl auch eine "departure_time" angeben. Sonst wird die Zeit für den Weg auf Basis des Verkehrs nicht mit angegeben. Ich nutze hier immer "now", man kann aber auch eine konkrete Uhrzeit angeben. Aus dem zurück gelieferten json-Ergebnis kann man sich dann recht einfach die gewünschten Infos mittels regulärer Ausdrücke raussuchen:
Für die normale Zeit:
(?s)duration.* "(.* Minuten).*duration_in
Für die Zeit auf Basis des Verkehrs:
(?s)duration_in.*"(.* Minuten)
Ich habe mir dann noch eine kleine Funktion zur Formatierung der Ausgabe geschrieben, die ich mittels "readingsNNExpr" aufrufe:
sub
GoogleExpr($)
{
my $traffic = @_;
$traffic =~ /([\d]+) Minuten?/;
my $Std_Min = $1;
my $Std_Std = "0";
if($traffic =~ /([\d]+) Stunden?/) {
$Std_Std = $1;
}
return sprintf("%02d:%02d",$Std_Std,$Std_Min);
}
Ausführlicher dann hoffentlich bald auf meinem Blog ;)
Hallo und vielen Dank für Deine Mühe und das bereitstellen der Informationen.
Deinen Blog in allen Ehren und ich kann auch verstehen das man gerne sieht das viele Leute den eigenen Blog lesen. Aber lass mich sagen das es schöner und besser und vor allem im Sinne der Community wäre das als Eintrag ins Wiki zu schreiben.
Grüße
Leon
Ich habe überhaupt kein Problem, auch im Wiki entsprechende Lösungen zu hinterlegen. Da ich das bisher aber noch nicht gemacht habe, würde ich mich nun zunächst fragen, wo ich denn so etwas beschreiben würde. Bisher habe ich in erster Linie versucht, solche Lösungsansätze hier im Forum zu hinterlegen, damit diese direkt zu den Fragestellungen verfügbar sind.
Zitat von: jual am 22 November 2015, 11:46:59
Also ich habe bei mir jetzt wieder alles mit der Google API hinbekommen und werde nun noch einen ausführlichen Beitrag auf meinem Blog blog-gedanken.de erstellen.
Man benötigt auf jeden Fall einen Browser API Key, der aber kostenfrei zu haben ist und für genug Aufrufe ausreichen sollte. Das Define für für HTTPMOD sieht dann wie folgt aus:
Ist das gewollt, dass dein API Key in dem Link steht? :-) Wo kann ich den API Key denn kostenlos beantragen?
Guten Start in die Woche, Tobias
Steht im Blog, habs gerade gesehen 8)
Bist du sicher, dass es im Blog richtig beschrieben ist?
Unter:
Auswertung der API Rückgabe in CodeZeile 5
Sollten das nicht 2 Zeilen sein?
Und dann habe ich ein Problem:
In buf steht:
Zitatrows" : [ { "elements" : [ { "distance" : { "text" : "36,5 km", "value" : 36487 }, "duration" : { "text" : "40 Minuten", "value" : 2407 }, "duration_in_traffic" : { "text" : "45 Minuten", "value" : 2690 }, "status" : "OK" } ] } ], "status" : "OK" }
Das ist soweit offenbar richtig.
Ein list:
Attributes:
disable 0
reading01Expr GoogleExpr($val)
reading01Name Standard
reading01Regex (?s)duration.* "(.* Minuten).*duration_in
reading02Expr GoogleExpr($val)
reading02Name Verkehr
reading02Regex (?s)duration_in.*"(.* Minuten)
room Bewohner,Büro
stateFormat Normal:Standard Aktuell:Verkehr
userattr disable reading01Expr reading01Name reading01Regex reading02Expr reading02Name reading02Regex stateFormat
Liefert:
Readings:
2015-11-23 08:26:07 Standard 00:01
2015-11-23 08:26:07 Verkehr 00:02
Was läuft denn da falsch?
Edit:
99_myUtils
sub GoogleExpr($)
{ my $traffic = @_;
#zunächst die Minuten ermitteln $traffic =~ /([\d]+) Minuten?/;
my $Std_Min = $1;
my $Std_Std = "0";
#falls Stunden angegeben sind, diese nun ermitteln
if($traffic =~ /([\d]+) Stunden?/) { $Std_Std = $1; }
return sprintf("%02d:%02d",$Std_Std,$Std_Min);
}
Probier mal in der 99_myUtils
my ($traffic) = @_; statt my $traffic = @_;
und füge noch ein Zeilenumbruch ein, damit folgender Befehl auch ausgeführt wird:
$traffic =~ /([\d]+) Minuten?/;
Gruß Lars
Hi, feine Sache.
bei mir läuft das auch noch nicht rund.
Der Buf wird korrekt angezeigt, wie bei Rince.
Aber die Readings zeigen auch nur:
Readings:
2015-11-23 15:05:07 Standard 00:01
2015-11-23 15:05:07 Verkehr 00:02
Wie setzt ich dies in der 99_myUtils um ?
Zitatund füge noch ein Zeilenumbruch ein, damit folgender Befehl auch ausgeführt wird:
$traffic =~ /([\d]+) Minuten?/;
gruß koerly
So funzt es bei mir:
sub GoogleExpr($)
{
my ($traffic) = @_;
#zunächst die Minuten ermitteln
$traffic =~ /([\d]+) Minuten?/;
my $Std_Min = $1;
my $Std_Std = "0";
#falls Stunden angegeben sind, diese nun ermitteln
if($traffic =~ /([\d]+) Stunden?/) { $Std_Std = $1; }
return sprintf("%02d:%02d",$Std_Std,$Std_Min);
}
@Thargor
Mercy, lüppt :)
Hallo,
falls jemand folgende Fehlermeldung in seinem Log findet:
Can't connect(2) to https://maps.googleapis.com:443: SSL Version SSLv2 not supported error:00000000:lib(0):func(0):reason(0)
führt folgende Lösung zum Erfolg:
- das Attribut sslVersion im userattr hinzufügen.
attr <device> userattr sslVersion disable queueMax reading01Expr reading01Name reading01Regex reading02Expr reading02Name reading02Regex stateFormat verbose
- das Attribut sslVersion mit dem Wert: TLSv12:!SSLv3 belegen
Grüße Jörg
@Thargor - Danke
Ich habe das jetzt noch etwas gepimpt, so dass mehr Readings rausfallen, auf die man triggern kann.
Auch wollte ich auf die myUtils Funktion verzichten und eine differenzbasierte Anzeige in einer einzelnen Zeile haben sowie per DOIF auf die eigentliche längere Fahrzeit triggern können.
(http://take.ms/rsJW2)
(http://take.ms/ZR3P0)
define Fahrzeit1 HTTPMOD https://maps.googleapis.com/maps/api/distancematrix/json?origins=MUENCHEN,XXXX&destinations=GERSTHOFEN,XXXX&mode=driving&language=de-DE&departure_time=now&key=XXX 1800
attr Fahrzeit1 reading01Name duration
attr Fahrzeit1 reading01Regex "duration"\s*:\s*{\s*["\w\s:,]+"value"\s*:\s*(\d+)\s*}
attr Fahrzeit1 reading02Name duration_in_traffic
attr Fahrzeit1 reading02Regex "duration_in_traffic"\s*:\s*{\s*["\w\s:,]+"value"\s*:\s*(\d+)\s*}
attr Fahrzeit1 reading03Name distance
attr Fahrzeit1 reading03Regex "distance"\s*:\s*{\s*["\w\s:,]+"value"\s*:\s*(\d+)\s*}
attr Fahrzeit1 reading04Name destination_addresses
attr Fahrzeit1 reading04Regex "destination_addresses"\s*:\s*\[\s*"([\w\s.,-:üöäß]+)"\s*\],
attr Fahrzeit1 reading05Name origin_addresses
attr Fahrzeit1 reading05Regex "origin_addresses"\s*:\s*\[\s*"([\w\s.,-:üöäß]+)"\s*\],
attr Fahrzeit1 stateFormat duration_hr duration_diff_hr Min. (distance_hr km)
attr Fahrzeit1 userReadings duration_hr {strftime "%H:%M", gmtime( int( ReadingsVal("$name","duration",0) /60+0.5)*60 );}, duration_in_traffic_hr {strftime "%H:%M", gmtime( int( ReadingsVal("$name","duration_in_traffic",0) /60+0.5)*60 );}, distance_hr:distance {int( ReadingsVal("$name","distance",0) /1000+0.5);}, duration_diff {int((ReadingsVal("$name","duration_in_traffic",0)-ReadingsVal("$name","duration",0))/60+0.5);}, duration_diff_hr {my $diff=int((ReadingsVal("$name","duration_in_traffic",0)-ReadingsVal("$name","duration",0))/60+0.5); return "+".$diff if ($diff>0); return "+0";}
attr Fahrzeit1 userattr reading01Name reading01Regex reading02Name reading02Regex reading03Name reading03Regex reading04Name reading04Regex reading05Name reading05Regex
Loredo einfach perfekt!! Benötige zwar nur die Differenz der Zeit, trotzdem eine geniale Sache!
Danke an alle.
@Loredo
Ich probiere gerade deine Lösung, leider mein fhem.cfg nimm das nicht an :(
attr Fahrzeit1 userReadings duration_hr {strftime "%H:%M", gmtime( int( ReadingsVal("$name","duration",0) /60+0.5)*60 );}, duration_in_traffic_hr {strftime "%H:%M", gmtime( int( ReadingsVal("$name","duration_in_traffic",0) /60+0.5)*60 );}, distance_hr:distance {int( ReadingsVal("$name","distance",0) /1000+0.5);}, duration_diff {int((ReadingsVal("$name","duration_in_traffic",0)-ReadingsVal("$name","duration",0))/60+0.5);}, duration_diff_hr {my $diff=int((ReadingsVal("$name","duration_in_traffic",0)-ReadingsVal("$name","duration",0))/60+0.5); return "+".$diff if ($diff>0); return "-".$diff * -1 if ($diff<0); return "+/- ".$diff if ($diff==0);}
es wird immer gekürzt und sieht so aus:
attr Fahrzeit1 userReadings duration_hr {strftime "%H:%M", gmtime( int( ReadingsVal("$name","duration",0) /60+0.5)*60 )
kann mir jemand sagen was ich falsch mache?
das ist eine lange Zeile. Kopiere sie über die Oberfläche, nicht direkt in die Datei: das predigen wir hier schon ewig...
Gruß
Julian
Zitat von: Loredo am 27 November 2015, 00:28:02
das ist eine lange Zeile. Kopiere sie über die Oberfläche, nicht direkt in die Datei: das predigen wir hier schon ewig...
Gruß
Julian
Danke für die schnelle Antwort, hab auch schon Probiert kommt sofort Fehler :(
Du erstellst erst das Device:
define Fahrzeit1 HTTPMOD https://maps.googleapis.com/maps/api/distancematrix/json?origins=MUENCHEN,XXXX&destinations=GERSTHOFEN,XXXX&mode=driving&language=de-DE&departure_time=now&key=XXX 1800
Das ist das einzige, was du über das Kommando-Feld _oben_ eingibst.
Die restlichen Attribute gibst du auf der Detailseite des Devices "Fahrzeit1" ein. Du suchst jeweils in der Attributliste das Attribut aus, welches du eingeben willst und kopierst dann alles _nach_ dem Attributnamen dort in das Feld.
Du fängst natürlich mit dem userattr-Attribut an, sonst werden die User-Attribute nicht angezeigt, die du hier brauchst.
Fhem Grundlagenkurs :-)
Zitat von: Loredo am 27 November 2015, 00:38:20
Du erstellst erst das Device:
define Fahrzeit1 HTTPMOD https://maps.googleapis.com/maps/api/distancematrix/json?origins=MUENCHEN,XXXX&destinations=GERSTHOFEN,XXXX&mode=driving&language=de-DE&departure_time=now&key=XXX 1800
Das ist das einzige, was du über das Kommando-Feld _oben_ eingibst.
Die restlichen Attribute gibst du auf der Detailseite des Devices "Fahrzeit1" ein. Du suchst jeweils in der Attributliste das Attribut aus, welches du eingeben willst und kopierst dann alles _nach_ dem Attributnamen dort in das Feld.
Du fängst natürlich mit dem userattr-Attribut an, sonst werden die User-Attribute nicht angezeigt, die du hier brauchst.
Fhem Grundlagenkurs :-)
OMG :-[ ich dachte dass es einfacher ist. Danke dir, ich Probiere das so...
So siehts dann aus
(http://take.ms/YKwwC)
Zitat von: Loredo am 27 November 2015, 00:50:17
So siehts dann aus
nochmals vielen Dank! Es hat geklappt! :D
Edit:
hmm ich habe die Fahrzeit aber im log kommt noch sowas:
2015.11.27 01:09:42 3: Fahrzeit1: Read callback: request type was Update, no headers, buffer empty,
Error read from https://maps.googleapis.com:443 timed out
Ist das der komplette Log-Text, oder steht dahinter noch SSLv2 not supportet? Dazu steht dann die Lösung ein paar Posts vorher.
Grüße Jörg
Gesendet von iPhone mit Tapatalk
Zitat von: JoWiemann am 27 November 2015, 08:41:55
Ist das der komplette Log-Text, oder steht dahinter noch SSLv2 not supportet? Dazu steht dann die Lösung ein paar Posts vorher.
Grüße Jörg
Ja, das ist komplett, es steht nichts über SSLv2
2015.11.27 01:43:41 3: Arbeit: Read callback: request type was Update, no headers, buffer empty,
Error read from https://maps.googleapis.com:443 timed out
2015.11.27 01:43:41 3: Fahrzeit1: Read callback: request type was Update, no headers, buffer empty,
Error read from https://maps.googleapis.com:443 timed out
aber wie gesagt, es funktioniert.
Erhöhe mal den Timeout Wert in Httpmod.
Zitat von: Thargor am 27 November 2015, 10:43:36
Erhöhe mal den Timeout Wert in Httpmod.
Danke das probiere ich mal aus!
EDIT:
@Thargor
Danke ich glaube es hat geklappt!
Inzwischen habe ich @jual Lösung unter die Lupe genommen, funktioniert soweit gut aber bekomme ich auch Fehlermeldung:
2015.11.28 17:51:50 3: Arbeit: Defined with URL https://maps.googleapis.com/maps/api/distancematrix/json?origins=Sankt+Augustin,xxxxx+xx&destinations=xxxxxxx&mode=driving&language=de-DE&departure_time=now&key=Axxxxxxxxxxxxxxxxxxw and interval 900
Use of uninitialized value $Std_Min in sprintf at ./FHEM/99_myUtils.pm line 32, <$fh> line 120.
Use of uninitialized value $Std_Min in sprintf at ./FHEM/99_myUtils.pm line 32, <$fh> line 123.
99_myUtils.pm sieht so aus:
##############################################
# $Id: myUtilsTemplate.pm 7570 2015-01-14 18:31:44Z rudolfkoenig $
#
# Save this file as 99_myUtils.pm, and create your own functions in the new
# file. They are then available in every Perl expression.
package main;
use strict;
use warnings;
use POSIX;
sub
myUtils_Initialize($$)
{
my ($hash) = @_;
}
# Enter you functions below _this_ line.
sub
GoogleExpr($)
{
my ($traffic) = @_;
#zunächst die Minuten ermitteln
$traffic =~ /([\d]+) Minuten?/;
my $Std_Min = $1;
my $Std_Std = "0";
#falls Stunden angegeben sind, diese nun ermitteln
if($traffic =~ /([\d]+) Stunden?/) { $Std_Std = $1; }
return sprintf("%02d:%02d",$Std_Std,$Std_Min);
}
fhem.cfg
# Fahrzeit Arbeit:
define Arbeit HTTPMOD https://maps.googleapis.com/maps/api/distancematrix/json?origins=Sankt+Augustin,xxxxxxxxx+xxx&destinations=xxxxxxx&mode=driving&language=de-DE&departure_time=now&key=Axxxxxxxxxxxxxw 900
attr Arbeit userattr reading01Expr reading01Name reading01Regex reading02Expr reading02Name reading02Regex stateFormat
attr Arbeit group Fahrzeiten
attr Arbeit reading01Expr GoogleExpr($val)
attr Arbeit reading01Name Standard
attr Arbeit reading01Regex (?s)duration.* "(.* Minuten).*duration_in
attr Arbeit reading02Expr GoogleExpr($val)
attr Arbeit reading02Name Verkehr
attr Arbeit reading02Regex (?s)duration_in.*"(.* Minuten)
attr Arbeit room Fahrzeiten
attr Arbeit stateFormat Normal:Standard Aktuell:Verkehr
Zitat von: Loredo am 27 November 2015, 00:28:02
das ist eine lange Zeile. Kopiere sie über die Oberfläche, nicht direkt in die Datei: das predigen wir hier schon ewig...
Gruß
Julian
Hm bei mir dasselbe...bekomme die Userreadings nicht in das Attribut rein!
Unknown command },, try help.
Unknown command },, try help.
Unknown command },, try help.
Unknown command },, try help.
Unknown command return, try help.
Unknown command return, try help.
Unknown command }, try help.
Zitat von: P.A.Trick am 29 November 2015, 18:49:49
Hm bei mir dasselbe...bekomme die Userreadings nicht in das Attribut rein!
Das hat aber @Loredo richtig gut erklärt! :
Zitat von: Loredo am 27 November 2015, 00:38:20
Du erstellst erst das Device:
define Fahrzeit1 HTTPMOD https://maps.googleapis.com/maps/api/distancematrix/json?origins=MUENCHEN,XXXX&destinations=GERSTHOFEN,XXXX&mode=driving&language=de-DE&departure_time=now&key=XXX 1800
Das ist das einzige, was du über das Kommando-Feld _oben_ eingibst.
Die restlichen Attribute gibst du auf der Detailseite des Devices "Fahrzeit1" ein. Du suchst jeweils in der Attributliste das Attribut aus, welches du eingeben willst und kopierst dann alles _nach_ dem Attributnamen dort in das Feld.
Du fängst natürlich mit dem userattr-Attribut an, sonst werden die User-Attribute nicht angezeigt, die du hier brauchst.
Fhem Grundlagenkurs :-)
Danke aber Copy&Paste wäre einfacher gewesen :-)
Zitat von: P.A.Trick am 29 November 2015, 18:56:10
Danke aber Copy&Paste wäre einfacher gewesen :-)
hahaha habe ich mir auch gedacht :D geht leider nicht :/
Hat für mich jemand noch ein Tipp was ich damit machen kann?
2015.11.28 17:51:50 3: Arbeit: Defined with URL https://maps.googleapis.com/maps/api/distancematrix/json?origins=Sankt+Augustin,xxxxx+xx&destinations=xxxxxxx&mode=driving&language=de-DE&departure_time=now&key=Axxxxxxxxxxxxxxxxxxw and interval 900
Use of uninitialized value $Std_Min in sprintf at ./FHEM/99_myUtils.pm line 32, <$fh> line 120.
Use of uninitialized value $Std_Min in sprintf at ./FHEM/99_myUtils.pm line 32, <$fh> line 123.
Zitat von: spetial am 29 November 2015, 18:59:47
hahaha habe ich mir auch gedacht :D geht leider nicht :/
Hat für mich jemand noch ein Tipp was ich damit machen kann?
2015.11.28 17:51:50 3: Arbeit: Defined with URL https://maps.googleapis.com/maps/api/distancematrix/json?origins=Sankt+Augustin,xxxxx+xx&destinations=xxxxxxx&mode=driving&language=de-DE&departure_time=now&key=Axxxxxxxxxxxxxxxxxxw and interval 900
Use of uninitialized value $Std_Min in sprintf at ./FHEM/99_myUtils.pm line 32, <$fh> line 120.
Use of uninitialized value $Std_Min in sprintf at ./FHEM/99_myUtils.pm line 32, <$fh> line 123.
da müsstest du mal deine 99_myUtils.pm posten
Nun wollte ich das auch mal einbauen.
Bei mir werden aber nicht alle Werte angezeigt
Woran kann das liegen?
EDIT: Habe es hinbekommen indem man wirklich nur den httpmod ins cfg einträgt und den rest per copynpaste auf der Seite einträge
Ich schaue mir das gerade für Busverbindungen an. Hierfür muß man lediglich die Directions API verwenden. Die JSON Ausgabe sieht gut aus, muß nur noch schauen wie ich das in Readings presse. Soll ja auch sinnvoll und lesbar sein.
Grüße
Zitat von: masterpete23 am 02 Dezember 2015, 07:00:00
da müsstest du mal deine 99_myUtils.pm posten
Habe ich unter Post #118 gemacht :)
http://forum.fhem.de/index.php/topic,20151.msg365667.html#msg365667 (http://forum.fhem.de/index.php/topic,20151.msg365667.html#msg365667)
Ach ich seh grad - hatte ich auch
habe dann ja die Lösung gewechselt und da braucht man das nicht mehr
so war meins - teste mal
sub GoogleExpr($)
{
my ($traffic) = @_;
#zunächst die Minuten ermitteln
$traffic =~ /([\d]+) Minuten?/;
my $Std_Min = $1;
my $Std_Std = "0";
#falls Stunden angegeben sind, diese nun ermitteln
if($traffic =~ /([\d]+) Stunden?/) { $Std_Std = $1; }
return sprintf("%02d:%02d",$Std_Std,$Std_Min);
}
define Fahrzeit1 HTTPMOD https://maps.googleapis.com/maps/api/distancematrix/json?origins=MUENCHEN,XXXX&destinations=GERSTHOFEN,XXXX&mode=driving&language=de-DE&departure_time=now&key=XXX 1800
attr Fahrzeit1 reading01Name duration
attr Fahrzeit1 reading01Regex "duration"\s*:\s*{\s*["\w\s:,]+"value"\s*:\s*(\d+)\s*}
attr Fahrzeit1 reading02Name duration_in_traffic
attr Fahrzeit1 reading02Regex "duration_in_traffic"\s*:\s*{\s*["\w\s:,]+"value"\s*:\s*(\d+)\s*}
attr Fahrzeit1 reading03Name distance
attr Fahrzeit1 reading03Regex "distance"\s*:\s*{\s*["\w\s:,]+"value"\s*:\s*(\d+)\s*}
attr Fahrzeit1 reading04Name destination_addresses
attr Fahrzeit1 reading04Regex "destination_addresses"\s*:\s*\[\s*"([\w\s.,-:üöäß]+)"\s*\],
attr Fahrzeit1 reading05Name origin_addresses
attr Fahrzeit1 reading05Regex "origin_addresses"\s*:\s*\[\s*"([\w\s.,-:üöäß]+)"\s*\],
attr Fahrzeit1 stateFormat duration_hr duration_diff_hr Min. (distance_hr km)
attr Fahrzeit1 userReadings duration_hr {strftime "%H:%M", gmtime( int( ReadingsVal("$name","duration",0) /60+0.5)*60 );}, duration_in_traffic_hr {strftime "%H:%M", gmtime( int( ReadingsVal("$name","duration_in_traffic",0) /60+0.5)*60 );}, distance_hr:distance {int( ReadingsVal("$name","distance",0) /1000+0.5);}, duration_diff {int((ReadingsVal("$name","duration_in_traffic",0)-ReadingsVal("$name","duration",0))/60+0.5);}, duration_diff_hr {my $diff=int((ReadingsVal("$name","duration_in_traffic",0)-ReadingsVal("$name","duration",0))/60+0.5); return "+".$diff if ($diff>0); return "+0";}
attr Fahrzeit1 userattr reading01Name reading01Regex reading02Name reading02Regex reading03Name reading03Regex reading04Name reading04Regex reading05Name reading05Regex
[/quote]
So hab dies nun auch versucht; leider kommen bei mir nur die Readings destination_addresses, distance, duration und origin_addresses an.
Zitat von: xxsteffenxx am 02 Dezember 2015, 12:59:39
So hab dies nun auch versucht; leider kommen bei mir nur die Readings destination_addresses, distance, duration und origin_addresses an.
Wer event-on-* verwendet, muss diese so einstellen, dass richtig getriggert werden kann. Sonst werden die User-Readings nicht ausgeführt. Siehe FHEM Commandref zum Thema event-on-* Attribute
ok ein einfacher shutdown restart und es geht :-)
Zitat von: betateilchen am 13 Februar 2014, 20:29:54
Mein fhem schaut morgens von 05:00 - 06:35 alle 5 Minuten auf die Bahnwebseite, ob mein Zug pünktlich (06:36) kommt
Magst du deinen Code mit mir teilen?
Zitat von: chr2k am 05 Dezember 2015, 19:50:51
Magst du deinen Code mit mir teilen?
Dafür gibt es hier ein Modul. Schau einfach mal ins Forum. Eventuell ist es sogar schon offiziell. Das weiß ich gerade nicht genau.
Zitat von: CoolTux am 05 Dezember 2015, 20:30:52
Dafür gibt es hier ein Modul. Schau einfach mal ins Forum.
Du meinst dieses hier?
http://forum.fhem.de/index.php?topic=36057.0
ja das Modul ist damit gemeint, das funktioniert auch sehr gut.
Zitat von: TeeVau am 23 Juli 2015, 15:17:19
Wenn Google nichts zu damals (http://forum.fhem.de/index.php/topic,20151.msg138982.html#msg138982) geändert hat, dann wird in der free Version leider nicht aktuelle Verkehrslage angegeben, sondern nur die Fahrzeit ohne Verkehr. Für mich ist jedoch der Stau relevant. Dass ich ohne Stau 48 Minuten von der Arbeit bis nach Hause brauche weis ich selber. Tatsächlich schwankt es aber leider zwischen 1 bis 2 Stunden, eben wegen dem Verkehr.
Noch mal als Hinweis an alle, die lieber die Directions-API nutzen: Stau wird auch bei dieser API mit ausgegeben. Wichtig ist hierbei nur, das Waypoints mit dem Zusatz "via:" belegt werden. Nur dann gibs es auch ein duration_in_traffic Attribut. Benutze ich selber so seit einigen Wochen und es funktioniert. Ist für mich besser als die distancematrix API, weil ich eben genau einen bestimmten Weg (und nicht den besten/schnellsten/...) für eine Busroute benötige.
Beispiel für den API Aufruf
https://maps.googleapis.com/maps/api/directions/json?origin=xxx&destination=xxx&waypoints=via:xxx|via:xxx|via:xxx&mode=driving&language=de-DE&departure_time=now&key=[key]
Hallo und eine Gutes Neues Jahr,
ich habe das Problem, dass das Reading duration_diff einen negativen Wert ausgibt. Wenn ich mir json Ausgabe Ansehe ist dort Duration länger als Duration in traffic. Hat Google einen Fehler ?
[/{
"destination_addresses" : [ "Emmerich, Deutschland" ],
"origin_addresses" : [ "Carl-Spitzweg-Straße 2, 50259 Pulheim, Deutschland" ],
"rows" : [
{
"elements" : [
{
"distance" : {
"text" : "126 km",
"value" : 125632
},
"duration" : {
"text" : "1 Stunde, 34 Minuten",
"value" : 5612
},
"duration_in_traffic" : {
"text" : "1 Stunde, 29 Minuten",
"value" : 5343
},
"status" : "OK"
}
]
}
],
"status" : "OK"
}
code]
Zitat von: pcjogi am 03 Januar 2016, 11:04:58
Hallo und eine Gutes Neues Jahr,
ich habe das Problem, dass das Reading duration_diff einen negativen Wert ausgibt. Wenn ich mir json Ausgabe Ansehe ist dort Duration länger als Duration in traffic. Hat Google einen Fehler ?
Ich glaube eher, dass das an der unterschiedlichen Ermittlung der Daten liegt. Die Duration ist ein theoretischer Wert aus Wegstrecke und durchschnittlicher Geschwindigkeit auf den gewählten Straßen (Landstraße, Autobahn, Innerorts, ...). Duration in Traffic wird von Google über SmartPhones ermittelt, die kontinuierlich ihren Aufenthaltsort bereitstellen. Liegt also sehr viel näher an der Realität. Somit kann zu bestimmten Zeiten die aktuelle Fahrzeit durchaus kürzer sein als die theoretisch ermittelte.
Grüße Jörg
Zitat von: pcjogi am 03 Januar 2016, 11:04:58
Hallo und eine Gutes Neues Jahr,
ich habe das Problem, dass das Reading duration_diff einen negativen Wert ausgibt. Wenn ich mir json Ausgabe Ansehe ist dort Duration länger als Duration in traffic. Hat Google einen Fehler ?
Ich glaube eher, dass das an der unterschiedlichen Ermittlung der Daten liegt. Die Duration ist ein theoretischer Wert aus Wegstrecke und durchschnittlicher Geschwindigkeit auf den gewählten Straßen (Landstraße, Autobahn, Innerorts, ...). Duration in Traffic wird von Google über SmartPhones ermittelt, die kontinuierlich ihren Aufenthaltsort bereitstellen. Liegt also sehr viel näher an der Realität. Somit kann zu bestimmten Zeiten die aktuelle Fahrzeit durchaus kürzer sein als die theoretisch ermittelte.
Grüße Jörg
Das ist auch der Grund, weshalb ich hier (http://forum.fhem.de/index.php/topic,20151.msg365322.html#msg365322) beim Diff nur einen Wert ausgebe, wenn >0.
Ich hatte mich auch schon gefragt warum Google da einen negativen Wert ausgibt, schließlich könnten sie den auch einfach genauso deckeln wie wir wenn es einfach an einer theoretischen Berechnungsmethode liegt...
Aber warum deckeln. Reale Werte sind doch viel sinnvoller, oder ?!
Grüße Jörg
Bietet uns Google hier aber halt nicht.
Dass die Fahrzeit ohne Verkehr nachts doch plötzlich geringer ist als tagsüber ohne Verkehr ist eine Unlogik, die nur Google versteht. Abgesehen davon, dass wir hier im Bereich 1-2min diskutieren. Ich finde es da wichtiger die normale Fahrzeit konsistent zu halten. Und wenn man 1-2min früher am Ziel ist als normal ist es doch auch gut. Man will ja nur nicht zu spät kommen und niemand wird sich aufregen, weil er aufgrund dieser Voraussage 2min früher aus dem Pyjama in die Jeans geschlüpft ist ;)
OT: Unlogisch ist es nicht. Nachts wird halt definitiv schneller gefahren und es werden auch die Tempolimits weniger eingehalten. Das zeigen auch immer wieder die Verkehrsstatistiken.
Grüße Jörg
Hi zusammen,
ich habe mal eine wirklich saublöse Frage, aber ich bin am verzweifeln. In meinem Reading duration_in_traffic steht nun eine Zahl, nachdem ich erfolgreich auf der Oberfläche die Google API angezapft habe. Nun wollte ich diesen Wert gerne weiterverarbeiten und mit einem notify versehen, Also immer dann, wenn ein Schwellenwert überschritten wird, soll ein Ereignis ausgelöst werden. Jetzt dachte ich, man definiere
my $Schwellenwert = ReadingsVal("FahrzeitnachHause", "duration_in_traffic", 0);\\
Allerdings scheint das nicht auslesbar zu sein. Denn statt den 3000 Sekunden, die ich im Web Interface lesen kann, bekomme ich immer den Standardwert 0. Was mache ich falsh???
VG
Christian
Moin,
man sollte halt auf die Bezeichnung der Variablen achten und mit Klammern richtig umgehen, dann klappt's auch mit dem Code. Bin mittlerweile selbst auf die Lösung gekommen. Für alle, die auch eine Benachrichtigung haben wollen, wenn die Fahrzeit einen Schwellenwert überschreitet, hire der Code:
define Verkehr_nach_Hause_Mail notify FahrzeitnachHause.duration_in_traffic.* {\
my $verkehrszeit = (ReadingsVal("FahrzeitnachHause","duration_in_traffic",0));;\
my $schwellenwert = int($verkehrszeit);;\
my $ankunft = ($schwellenwert / 60);;\
if((ReadingsVal("Verkehr_nach_Hause_Warnung", "state", 0 ) eq "on") &&(($schwellenwert > 3540)) &&(ReadingsVal("rr_Christian","presence", 0) eq "present")) {\
my $verkehrstext = "Die aktuelle Fahrtzeit für den Heimweg beträgt: " . $ankunft . " Minuten";;\
# fhem('set PushMail message '.$verkehrstext.' | Verkehrswarnung');;\
DebianMail('max.mustermann\@foo.bar', $verkehrstext ,'Dies ist eine automatische Warnung des FHEM Servers');;\
fhem('set Verkehr_nach_Hause_Warnung off');;\
fhem('attr FahrzeitnachHause disable 1');;\
}\
}
In diesem Beispeil frage ich noch ab, ob ich auch nicht zu Hause bin ("rr_Christian" und "presence"), bzw, ob es an der Zeit ist, die Warnung auch rauszuhauen. Dafür lasse ich den Verkehr_nach_Hause_Warnung Dummy zeitgesteurt umschalten.
Viele Grüße
Christian
Hallo zusammen,
erstmal vielen Dank an Loredo für die prima Anleitung - das hat super geklappt.
Ich überlege jetzt wie ich die Informationen optimal einbinden kann. Ideal wäre es, wenn man ab einer bestimmten Uhrzeit einen Trend ermitteln könnte und ggf. sogar noch ein Prognosewert für die normale Aufstehzeit ableiten könnte. Stelle ich mir allerdings das sehr kompliziert vor... Man müsste dann eigentlich auch noch Werte aus der Vorwoche als referenz heranziehen oder zumindestens mitbetrachten...
Wie habt Ihr das gelöst?
Ein einfacher Ansatz wäre sicherlich, die Differenz über ein DOIF in Verbindung mit waitsame prüfen zu lassen. Ist der der Differenzwert 2 x
innerhalb einer Zeitspanne X über Y Minuten, dann schalte ein Dummy auf Stau. Und wenn der Dummy auf Stau steht, dann ziehe die zusätzliche von der normalen Weckzeit ab.
Bin gespannt welche Lösung ihr gefunden habt!
Viele Grüße,
Max
Zitat von: Sirel am 19 Februar 2016, 19:19:20
Wie habt Ihr das gelöst?
War für mich bisher nur zum reinen anschauen auf den Tablet.
Den Wakeuptimer vom ROOMMATE/GUEST Modul habe ich aber gerade etwas erweitert, damit man dort einfacher eine Zeitdifferenz der Weckzeit hinzufügen bzw. direkt das Reading duration_diff verwenden kann (siehe auch hier (http://forum.fhem.de/index.php/topic,19040.msg413431.html#msg413431)).
Das könnte in einem DOIF dann so aussehen:
set rr_Julian_wakeuptimer1 nextRun -[Fahrzeit1:duration_diff]
Wann und wie so ein DOIF auslösen kann/sollte, hat @Sirel finde ich sehr gut beschrieben (ohne es ausprobiert zu haben).
Wer übrigens runde Klammern () im Start- oder Zielnamen hat, wie zB "Friedberg (Hessen)" der muss seine Attribute wie folgt anpassen:
attr DEFINITIONNAME reading04Regex "destination_addresses"\s*:\s*\[\s*"([\w\s.,-:üöäß(\)]+)"\s*\]
attr DEFINITIONNAME reading05Regex "origin_addresses"\s*:\s*\[\s*"([\w\s.,-:üöäß(\)]+)"\s*\]
Ich war so frei und habe mal einen Wiki Eintrag erstellt: http://www.fhemwiki.de/wiki/Verkehrslage
Es ist übrigens mein erster eigener Eintrag, daher sind Verbesserungsvorschläge gerne gesehen :)
Super. Damit hast Du Dich für weitere Artikel qualifiziert. :-))
Grüße Jörg
Gesendet von iPad mit Tapatalk
Hallo,
ich habe eure Anleitung umgesetzt =) THX an dieser Stelle für die Vorarbeit und den Wiki Artikel.
Allerdings habe ich ein kleines Problem, bei dem ich auf eure Hilfe baue:
Das state Format, habe ich wie im Wiki eingegeben:
allerdings sieht die Ausgabe wie folgt aus : 00:34 +0 Min. (distance_hr km)
die Variable distance_hr wird nicht umgesetzt. Ich habe versucht die Umrechnungen nachzuvollziehen, auf Leerzeichen kontrolliert und zum Schluss noch einen zweiten HTTPMOD angelegt... gleiches Problem.
Hat jemand eine Idee, was ich noch kontrollieren kann ?
Danke und Gruß
Hat denn das Reading distance_hr einen Wert?
Ein Reading so direkt nicht... jetzt wo du danach fragst:
Hier der Teil zu
distance_hr:distance {int( ReadingsVal("$name","distance",0) /1000+0.5);},
aus dem UserReadings Attribut.
Ich habe es auf distance_hr {int( ReadingsVal("$name","distance",0) /1000+0.5);},
angepasst und schon geht es !
Der Teufel ist ein Eichhörnchen... distance_hr ... duration_hr ist jetzt nicht ganz das gleiche ::)
Kann das jemand im Wiki anpassen ?
Hi.
Bevor hier das gleiche passiert wie beim Roomba Modul...
Hat die Community Bedarf an einem eigenen Modul hierfür?
Ich habe den Thread erst jetzt entdeckt aber hatte mal was angefangen (siehe Beispiel-Screenshot).
Prinzipiell ist es Einsatzbereit, non-blocking, json parsing etc. aber es fehlt sowohl Doku als auch diverses Error-handling.
Wenn erwünscht führe ich die Arbeiten mal fort bzw. mach ein beta-release hier.
mike
Mir wäre ein Modul natürlich lieber :)
chris0478 hatte irgendwann im letzten Jahr mal die Frage nach der Berechnung der "ankunftszeit" gestellt, die m.E. unbeantwortet geblieben war - zumindest habe ich dem dem langen Thread nichts gefunden:
Zitat... ob die voraussichtliche Ankunft (also now + Minuten aus der Verkehrslage) größer als meine definierte Ankunftszeit ist? ...
Ich habe nun das userreading um
ankunftzeit {strftime "%H:%M", gmtime(int( ReadingsVal("$name","duration_in_traffic",0) +(time)+7200));}
ergänzt und erhalte nun eine berechnete Ankunftszeit, mit der ich nun alles mögliche triggern kann.
Etwas unschön ist, dass ich die 7200 dazuaddieren muss, um von GMT auf CET (Sommer) zu kommen. Das fliegt mir dann spätestens bei der Winderzeitumstellung wieder auf die Füße.
Da meine Perl-Kenntnisse weiterhin gegen Null gehen, die Frage, wie ich meine userreading Ergänzung abändern muss, damit ich die Berechnung sauber in meiner Zeitzone durchführen kann. Wer kann helfen?
ZitatHat die Community Bedarf an einem eigenen Modul hierfür?
Ein Modul wäre natürlich super! Habe das jetzt auch schon im Tablet UI eingebunden und war von der prognostizierten Ankunftszeit, die auch bis auf eine Minute zutraf, sehr angetan.
Was mir nicht ganz klar ist, ist die Frage,ob die Google Maps API die Fahrtzeit für die Standardroute (die man üblicher Weise nehmen würde) oder für Alternativrouten zurückgibt.
Bei einem Modul wäre es natürlich auch super, wenn man irgendwo aus der Google Cloud die Information herbekäme, dass auf bestimmten Streckenabschnitten (wohl am ehesten über die Google Maps Directions Api) mit +10 Minuten etc. Verzögerung zu rechnen ist.
Zitat von: RaspiCOC am 27 Juli 2016, 09:49:11
Etwas unschön ist, dass ich die 7200 dazuaddieren muss, um von GMT auf CET (Sommer) zu kommen. Das fliegt mir dann spätestens bei der Winderzeitumstellung wieder auf die Füße.
Auf die Schnelle würde mir nur ein notify/at einfallen, welches beim Umstellen der Zeit dein Reading automatisch verändert
Zitat von: RaspiCOC am 27 Juli 2016, 09:55:07
Was mir nicht ganz klar ist, ist die Frage,ob die Google Maps API die Fahrtzeit für die Standardroute (die man üblicher Weise nehmen würde) oder für Alternativrouten zurückgibt.
Wenn ich es richtig gesehen habe, nimmt es die schnellste Route. Was du jedoch machen kannst ist deine Route genauer definieren indem du Wegpunkte mit festlegst. Dann nimmt er immer genau diese Route. Habe ich auch gemacht.
Hi.
Post ist online.
https://forum.fhem.de/index.php/topic,56045.0.html
Ihr könnt gerne posten wie eure HTTPMODs derzeit aussehen bzw. was euch fehlt.
Werde ich dann kurzfristig einbauen.
lg
mike
Zitat von: JoWiemann am 15 Januar 2015, 21:19:36
Hallo Lars,
hast Du libio-socket-ssl-perl installier? Mach doch mal ein:
sudo apt-get update
sudo apt-get install libio-socket-ssl-perl
Grüße Jörg
Hallo,
ich bekomme auch die "empty answer". Jedoch habe ich Fhem unter Windows laufen und dort kennt er mit cpan das Modul libio-socket-ssl-perl nicht.
Weiß hier jmd. Rat?
Vielen Dank schon mal und Grüße
Martin
Sollte bei dir tatsächlich das gleiche Paket fehlen - und das ist an dieser Stelle nur eine Vermutung - findest du die src auch hier: http://search.cpan.org/~sullr/IO-Socket-SSL-2.039/lib/IO/Socket/SSL.pod
oder nutzt "cpan -i IO::Socket::SSL" zum installieren.
Vermutlich macht es aber mehr Sinn, Logs und konkrete Fehlermeldungen zu posten.
Zitat von: jmike am 13 Dezember 2016, 13:42:21
Sollte bei dir tatsächlich das gleiche Paket fehlen - und das ist an dieser Stelle nur eine Vermutung - findest du die src auch hier: http://search.cpan.org/~sullr/IO-Socket-SSL-2.039/lib/IO/Socket/SSL.pod
oder nutzt "cpan -i IO::Socket::SSL" zum installieren.
Vermutlich macht es aber mehr Sinn, Logs und konkrete Fehlermeldungen zu posten.
Der Aufruf funktioniert und er beginnt auch mit der Installation bringt aber dann jede Menge Fehler und bricht ab.
Welche Logs brauchst du? Die bei der Installation angezeigt werden?
Grüße
Hallo in der Runde,
bislang, nachdem ich mir mein FHEM mal mit SSL gebrickt habe, habe ich mich immer davor gedrückt das zu installieren. Gibt es eine Lösung, wie ich das möglichst Konfliktfrei machen kann? Karte clonen wäre schon mal ein gutes Backup.
Ich habe ein Passwort auf meinem FHEM.
Gelöst
Ein herzerfrischendes "Moin" vom hintern-Deich vorweg
Ich bin der Anleitung im fhemwiki gefolgt und erhalte folgende Ausgabe über den WebBrowser:
{
"destination_addresses" : [ "XXXstraße 52, XXXXX YYYYY, Deutschland" ],
"origin_addresses" : [ "yyyyweg xx, XXXXXYYYYYY, Deutschland" ],
"rows" : [
{
"elements" : [
{
"distance" : {
"text" : "40,5 km",
"value" : 40542
},
"duration" : {
"text" : "50 Minuten",
"value" : 2997
},
"duration_in_traffic" : {
"text" : "47 Minuten",
"value" : 2830
},
"status" : "OK"
}
]
}
],
"status" : "OK"
}
Sobald ich das Modul eingerichtet habe kommen aber nur folgende Readings dabei raus:
Readings:
2017-01-18 20:16:16 distance_hr 0
2017-01-18 20:16:16 duration_diff 0
2017-01-18 20:16:16 duration_diff_hr +0
2017-01-18 20:16:16 duration_hr 00:00
2017-01-18 20:16:16 duration_in_traffic_hr 00:00
Habe ich da in der userReadings was vergurkt?
Gruß
Sailor
Ahoi.
Ist zwar keine explizite Lösung für dein Problem aber eventuell geht es mit dem TRAFFIC Modul https://wiki.fhem.de/wiki/TRAFFIC .
Hallo zusammen,
ich habe es versucht nach dem Wiki Artikel (https://wiki.fhem.de/wiki/Verkehrslage) nachzubauen. Wenn ich aber:
attr Verkehr.B.P userReadings duration_hr {strftime "%H:%M", gmtime( int( ReadingsVal("$name","duration",0) /60+0.5)*60 );}, duration_in_traffic_hr {strftime "%H:%M", gmtime( int( ReadingsVal("$name","duration_in_traffic",0) /60+0.5)*60 );}, distance_hr {int( ReadingsVal("$name","distance",0) /1000+0.5);}, duration_diff {int((ReadingsVal("$name","duration_in_traffic",0)-ReadingsVal("$name","duration",0))/60+0.5);}, duration_diff_hr {my $diff=int((ReadingsVal("$name","duration_in_traffic",0)-ReadingsVal("$name","duration",0))/60+0.5); return "+".$diff if ($diff>0); return "+0";}
über die Oberfläche eingebe erhalte ich folgende Fehlermeldungen:
Unknown command },, try help.
Unknown command },, try help.
Unknown command },, try help.
Unknown command },, try help.
Unknown command return, try help.
Unknown command return, try help.
Unknown command }, try help.
Was mache ich den da falsch ?
Gruß
Micha
kann den Fehler nachstellen, aber aktuell nicht sagen woran es liegt. Jedoch kann ich dich auf das inzwischen entstandene Modul Traffic https://wiki.fhem.de/wiki/TRAFFIC hinweisen. Macht quasi alles, was du von Hand angelegt hast. Ist nach dem Wiki Artikel entstanden. Werde im Artikel mal darauf hinweisen.
Prima, das hat nach 5 Minuten auf Anhieb geklappt :-) Danke für den Tipp. Gruß Micha