Wecken je nach Verkehrslage z.B. durch Abfrage von google maps (o.ä.)

Begonnen von schlupp, 13 Februar 2014, 00:02:34

Vorheriges Thema - Nächstes Thema

TeeVau

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. :-(
FHEM 5.8 dev (virtualisiert) / FBF 7390 (CUL 868MHz V 1.51 / panStick (AVR1))
FS20: fs20di,fs20pira,fs20sm8,fs20st2,fs20tfk,fs20ue1,fs20ws1
panStamp (AVR1): RGB Multi von ext23, 1W-DSxxxx, I/O Sketch, Spritzpumpe
Multimedia: Panasonic TV (VIERA), Kodi, Yamaha RX-V781, LMS
Sonstiges: XiaomiFlowerSen

chris0478

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.

JoWiemann

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
Jörg Wiemann

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

Master: CubieTruck; Debian; Aktuelles FHEM

chris0478

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.....

jual

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  ;)

CoolTux

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
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

jual

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.

TeeVau

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
FHEM 5.8 dev (virtualisiert) / FBF 7390 (CUL 868MHz V 1.51 / panStick (AVR1))
FS20: fs20di,fs20pira,fs20sm8,fs20st2,fs20tfk,fs20ue1,fs20ws1
panStamp (AVR1): RGB Multi von ext23, 1W-DSxxxx, I/O Sketch, Spritzpumpe
Multimedia: Panasonic TV (VIERA), Kodi, Yamaha RX-V781, LMS
Sonstiges: XiaomiFlowerSen

TeeVau

FHEM 5.8 dev (virtualisiert) / FBF 7390 (CUL 868MHz V 1.51 / panStick (AVR1))
FS20: fs20di,fs20pira,fs20sm8,fs20st2,fs20tfk,fs20ue1,fs20ws1
panStamp (AVR1): RGB Multi von ext23, 1W-DSxxxx, I/O Sketch, Spritzpumpe
Multimedia: Panasonic TV (VIERA), Kodi, Yamaha RX-V781, LMS
Sonstiges: XiaomiFlowerSen

Rince

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);
}
Wer zu meinen Posts eine Frage schreibt und auf eine Antwort wartet, ist hiermit herzlich eingeladen mich per PN darauf aufmerksam zu machen. (Bitte mit Link zum betreffenden Thread)

Thargor


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

koerly

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
rpi2; cul868; jeelink

Thargor


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);
}

Rince

Wer zu meinen Posts eine Frage schreibt und auf eine Antwort wartet, ist hiermit herzlich eingeladen mich per PN darauf aufmerksam zu machen. (Bitte mit Link zum betreffenden Thread)

JoWiemann

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
Jörg Wiemann

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

Master: CubieTruck; Debian; Aktuelles FHEM