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

Cruiser79

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]
FHEM auf Raspberry Pi
HM-CFG-LAN mit HM-TC-IT-WM-W-EU, HM-CC-RT-DN, HM-WDS10-TH-O, HM-LC-SW1-FM, HM-LC-Bl1-FM
Signalduino mit Elro AB440, LOGILINK WS0002, IT CMR-1000

pcjogi

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]
Zentral-Fhem , Mehrere Sub-Fhem (433Mhz und 833Mhz; Alexa-Steuerung; Heizungssteuerung; Sicherheitsfunktionen; Energiesteuerung); IoBroker zur Darstellung (alles als Container auf Proxmox), untereinander verbunden über einen MQTT Broker, insgesamt über 200 Sensoren/Aktoren.

JoWiemann

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

JoWiemann

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

Loredo

Das ist auch der Grund, weshalb ich hier 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...
Hat meine Arbeit dir geholfen? ⟹ https://paypal.me/pools/c/8gDLrIWrG9

Maintainer:
FHEM-Docker Image, https://github.com/fhem, Astro(Co-Maintainer), ENIGMA2, GEOFANCY, GUEST, HP1000, Installer, LaMetric2, MSG, msgConfig, npmjs, PET, PHTV, Pushover, RESIDENTS, ROOMMATE, search, THINKINGCLEANER

JoWiemann

Aber warum deckeln. Reale Werte sind doch viel sinnvoller, oder ?!

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

Loredo

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 ;)
Hat meine Arbeit dir geholfen? ⟹ https://paypal.me/pools/c/8gDLrIWrG9

Maintainer:
FHEM-Docker Image, https://github.com/fhem, Astro(Co-Maintainer), ENIGMA2, GEOFANCY, GUEST, HP1000, Installer, LaMetric2, MSG, msgConfig, npmjs, PET, PHTV, Pushover, RESIDENTS, ROOMMATE, search, THINKINGCLEANER

JoWiemann

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

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

chris0478

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

Sirel

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

Loredo

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


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).
Hat meine Arbeit dir geholfen? ⟹ https://paypal.me/pools/c/8gDLrIWrG9

Maintainer:
FHEM-Docker Image, https://github.com/fhem, Astro(Co-Maintainer), ENIGMA2, GEOFANCY, GUEST, HP1000, Installer, LaMetric2, MSG, msgConfig, npmjs, PET, PHTV, Pushover, RESIDENTS, ROOMMATE, search, THINKINGCLEANER

Amenophis86

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*\]
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

Amenophis86

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 :)
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

JoWiemann

Super. Damit hast Du Dich für weitere Artikel qualifiziert. :-))


Grüße Jörg

Gesendet von iPad 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