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

koerly

rpi2; cul868; jeelink

Loredo

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

iCure

Loredo einfach perfekt!! Benötige zwar nur die Differenz der Zeit, trotzdem eine geniale Sache!
Danke an alle.

spetial

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

Loredo

das ist eine lange Zeile. Kopiere sie über die Oberfläche, nicht direkt in die Datei: das predigen wir hier schon ewig...


Gruß
Julian
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

spetial

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

Loredo

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

spetial

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

Loredo

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

spetial

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


JoWiemann

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

spetial

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.

Thargor


spetial

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

P.A.Trick

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.
Cubietruck,RPI,QNAP Ts-419p+, FS20, FRITZ!DECT200, 7 MAX! Thermostate, 3 MAX! Fensterkontakte, Kodi, CUL V3.3, EM1000S, LW12, LD382, HUE, HM-CFG-USB-2, 1x HM-LC-SW1-FM, 2x HM-LC-SW2-FM, 2x HM-LC-Sw1PBU-FM, 3xHM-LC-Bl1PBU-FM,HM-SEC-RHS, 2xHM-SEC-SD,HM-WDS30-T-O, 3x HM-LC-Dim1TPBU-FM, RPI+AddOn