[gelöst] Wetterdaten in Abhängigkeit von GPS-Standort

Begonnen von pure-current, 23 Februar 2019, 14:25:27

Vorheriges Thema - Nächstes Thema

pure-current

Hallo,
ich habe mir in unser Wohnmobil einen Raspi eingebaut mit GPS Modul an Bord, das hab' ich auch alles hingekriegt. (Temperaturmessung, Heizungsregelung und GPS Empfang funktioniert alles)

Jetzt würde ich gerne einen Wetterbericht anzeige in Abhängigkeit vom Standort (GPS-Daten)

Ich bin schon soweit, dass ich das DarkSky Wetter angezeigt kriege mit fix angegebenen GPS-Koordinaten:
define Wetter_GPS Weather location=52.520007,13.404954 API=DarkSkyAPI,cachemaxage:600 apikey=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx interval=3600 lang=de

Jetzt sollten die Zahlenwerte natürlich durch die readings des GPS Moduls ersetzt werden, was aber nicht funktionierte:
define Wetter_GPS Weather location=[GPS.lat],[GPS.lon] API=DarkSkyAPI,cachemaxage:600 apikey=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx interval=3600 lang=de


Ich vermute mit den eckigen Klammern passt was nicht, komm aber nicht auf die richtige Lösung.

Ich hab's auch schon mit einem defmod versucht
define change_GPS_Loc at +*00:02:00 defmod Wetter_GPS Weather location=[GPS.lat],[GPS.lon] API=DarkSkyAPI,cachemaxage:600 apikey=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx interval=3600 lang=de
klappt aber auch nicht. Es wird durch den defmod nicht der Zahlenwert der Koordinaten geschrieben, sondern der Text mit den eckigen Klammern. (location=[GPS.lat],[GPS.lon])

Was mach ich falsch?
Raspberry PI mit drei stackable CC (2x866MHz-HM&WMBUS, 1x433MHz-Somfy)
HM-LAN (Keymatic, Dimmer, Bewegungsmelder, Rolladen, Lichtschalter, KFM100)
div. Tasmota via MQTT

2. Raspberry Pi/FHEM im Wohnmobil (Heizungsregelung,GPS) Batterieüberwachung-toDo

Jamo

#1
defmod geht nicht bei httpmod devices, Du musst das device loeschen und dann dynamisch neu anlegen, codeschnipsel fuer dynamisces anlegen eines httpmod devce fuer Tankstelle hier
https://forum.fhem.de/index.php/topic,94640.msg874886.html#msg874886

alternativ wetter proplanta, da kann man es dynamisch aedern
Bullseye auf iNUC, Homematic + HMIP(UART/HMUSB), Debmatic, HUEBridge, Zigbee/ConbeeII, FB, Alexa (fhem-lazy), Livetracking, LaCrosse JeeLink, LoRaWan / TTN / Chirpstack

Christoph Morrison

Zitat von: inoma am 23 Februar 2019, 14:47:16
defmod geht nicht bei httpmod devices, Du musst das device loeschen und dann dynamisch neu anlegen, codeschnipsel fuer dynamisces anlegen eines httpmod devce fuer Tankstelle hier
https://forum.fhem.de/index.php/topic,94640.msg874886.html#msg874886

Ist Weather wirklich ein HTTPMOD-Device?!

Ansonsten würde ich ja lieber die Daten in global modifizieren, dann weiß die FHEM-Instanz insgesamt auch immer, wo sie gerade ist. In der Definition von Weather bleiben die Koordinaten dann weg; Weather holt sich die Daten aus global, wenn nichts angegeben ist. Man muss dann nur noch ein Update bei Weather machen, anstatt das Device immer wieder neu zu definieren.

SUNRISE_EL liefert dann z.B. auch immer ortsbezogene Daten, Twilight wird das in Zukunft auch können.

pure-current

Zitat von: inoma am 23 Februar 2019, 14:47:16
alternativ wetter proplanta, da kann man es dynamisch aedern

Ich hätte eh lieber proplanta genommen, aber ich habe nicht gefunden, wie ich da die GPS Koordinaten unterbringe, die brauchen doch immer einen Ort, oder?
Raspberry PI mit drei stackable CC (2x866MHz-HM&WMBUS, 1x433MHz-Somfy)
HM-LAN (Keymatic, Dimmer, Bewegungsmelder, Rolladen, Lichtschalter, KFM100)
div. Tasmota via MQTT

2. Raspberry Pi/FHEM im Wohnmobil (Heizungsregelung,GPS) Batterieüberwachung-toDo

Jamo

ja, proplanta braucht den Ort, ich habe mir für proplanta einige feste locations definiert, die ich über owntracks gesteuert dann auswähle
Bullseye auf iNUC, Homematic + HMIP(UART/HMUSB), Debmatic, HUEBridge, Zigbee/ConbeeII, FB, Alexa (fhem-lazy), Livetracking, LaCrosse JeeLink, LoRaWan / TTN / Chirpstack

pure-current

Zitat von: Christoph Morrison am 23 Februar 2019, 14:52:33

Ansonsten würde ich ja lieber die Daten in global modifizieren, dann weiß die FHEM-Instanz insgesamt auch immer, wo sie gerade ist. In der Definition von Weather bleiben die Koordinaten dann weg; Weather holt sich die Daten aus global, wenn nichts angegeben ist. Man muss dann nur noch ein Update bei Weather machen, anstatt das Device immer wieder neu zu definieren.


Ich hab' jetzt schon einige Varianten probiert, aber in "global" kommt aber immer ein Text an, nicht wie gewünscht der Zahlenwert für Longitude/Latitude.

z.B. "attr global latitude [GPS.lat]"
oder "attr global latitude {readingsval("GPS","lat","0")}

Kann mir jemand auf die Sprünge helfen, wie die richtige Syntax ist um in global die attr "longitude" mit GPS.lon und "latitude" mit GPS.lat zu füllen?

Danke!
Raspberry PI mit drei stackable CC (2x866MHz-HM&WMBUS, 1x433MHz-Somfy)
HM-LAN (Keymatic, Dimmer, Bewegungsmelder, Rolladen, Lichtschalter, KFM100)
div. Tasmota via MQTT

2. Raspberry Pi/FHEM im Wohnmobil (Heizungsregelung,GPS) Batterieüberwachung-toDo

Christoph Morrison

Zitat von: pure-current am 23 Februar 2019, 19:12:03
Kann mir jemand auf die Sprünge helfen, wie die richtige Syntax ist um in global die attr "longitude" mit GPS.lon und "latitude" mit GPS.lat zu füllen?

Nicht so lange du uns ein list von GPS verenthältst.

pure-current

list GPS:
Internals:
   NAME       GPS
   NR         44
   STATE      Connected
   TYPE       GPSD
   gpsdHost   127.0.0.1
   gpsdPort   2947
   pollInterval 30
   READINGS:
     2019-02-23 19:25:30   altitude        184.864
     2019-02-23 19:25:30   climbRate       -0.006
     2019-02-23 19:25:30   direction       NW
     2019-02-23 19:25:30   errorAltitude   45.31
     2019-02-23 19:25:30   errorClimbRate  90.62
     2019-02-23 19:25:30   errorLonLat     11.107
     2019-02-23 19:25:30   errorSpeed      3.24
     2019-02-23 19:25:30   gpx             <trkpt lat="49.165812952" lon="9.277709423"><time>2019-02-23T18:25:30.000Z</time></trkpt>
     2019-02-23 19:25:30   heading         317.2301
     2019-02-23 19:25:30   lat             49.165812952
     2019-02-23 19:25:30   link            https://maps.google.de/maps?q=49.165812952,9.277709423
     2019-02-23 19:25:30   lon             9.277709423
     2019-02-23 19:25:30   speed           0.197
     2019-02-23 09:36:45   state           Connected
     2019-02-23 19:25:30   time_utc        2019-02-23T18:25:30.000Z
     2019-02-23 19:25:30   usedGpsDevice   /dev/ttyS0
   helper:
     GPSDparams:
       host       127.0.0.1
       port       2947
Attributes:

Raspberry PI mit drei stackable CC (2x866MHz-HM&WMBUS, 1x433MHz-Somfy)
HM-LAN (Keymatic, Dimmer, Bewegungsmelder, Rolladen, Lichtschalter, KFM100)
div. Tasmota via MQTT

2. Raspberry Pi/FHEM im Wohnmobil (Heizungsregelung,GPS) Batterieüberwachung-toDo

hanami

Guten Abend,

ich habe es bei mir für den Camper mit zwei "at" gelöst.
Geht aber sicher noch eleganter.

define GPS_global_upd at +*00:15:00 {fhem("attr global longitude ".ReadingsVal("KastenGPS","lon",""))}
define GPSlat_global_upd at +*00:15:00 {fhem("attr global latitude ".ReadingsVal("KastenGPS","lat",""))}

Probier es mal aus....
beste Grüße

Christoph Morrison

Du greifst auf Readings mit der Perl-Funktion ReadingsVal zu. In einem DOIF (und bei ein paar anderen Fällen) kannst auch die [device:reading]-Syntax (von set magic) verwenden.

Im Prinzip ist es doch einfach: Du nutzt ein neu eingehendes GPS-Reading (event-on-change-reading nicht vergessen) oder einen festen Zeitraum als Trigger um global anzupassen und dein Wetterdevice zu aktualisieren. Oder du baust dir einen Watchdog, der erst dann ein Update macht, wenn sich das GPS-Reading nicht mehr ändert (dein Wohnmobil steht oder GPS ist tot).

Stichwörter habe ich dir nun ein paar gegeben. Bau dir einen Dummy für dein GPS-Device mit lat und long als Reading und eines als Ziel (global-Ersatz), dann baust du die Logik außenrum. Wenn du das mit Dummies machst, kannst du auch nix kaputt machen.

pure-current

Zitat von: hanami am 23 Februar 2019, 20:16:10

define GPS_global_upd at +*00:15:00 {fhem("attr global longitude ".ReadingsVal("KastenGPS","lon",""))}
define GPSlat_global_upd at +*00:15:00 {fhem("attr global latitude ".ReadingsVal("KastenGPS","lat",""))}


...der Teil mit den geschweiften Klammern wars, damit funktionierts.
Jetzt kommen Zahlenwerte in den readings an.

Vielen Dank!

Jetzt muss ich nur noch ausprobieren, ob die Koordinaten dann auch im Weather Modul übernommen werden.
Gruß pure-current
Raspberry PI mit drei stackable CC (2x866MHz-HM&WMBUS, 1x433MHz-Somfy)
HM-LAN (Keymatic, Dimmer, Bewegungsmelder, Rolladen, Lichtschalter, KFM100)
div. Tasmota via MQTT

2. Raspberry Pi/FHEM im Wohnmobil (Heizungsregelung,GPS) Batterieüberwachung-toDo

pure-current

Hallo zusammen,

also mit dem von hanami vorgeschlagenen Code hat es funktioniert (mit at und einem Intervall von 30min), dass die Koordinaten in global ankommen.

Aus der Wetterdefinition habe ich jetzt die location mit lat,lon rausgenommen, zum Testen mal in global die Koordinaten von New York eingegeben.
define Wetter_GPS Weather API=DarkSkyAPI,cachemaxage:600 apikey=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx interval=3600 lang=de

Aber auch nach zig mal "set ... update" blieben die Werte unverändert.

Erst nach einem shutdown restart gings. Dann kamen die Werte von New York.

Hab's dann heute Nacht mal laufen lassen, es hätte sich bis heute morgen ja wieder zurückstellen sollen.
Aber auch wieder zig mal set...update - ging nicht.

Erst wieder ein shutdown restart hat funktioniert.

Das kann aber doch nicht so gedacht sein, dass ich bei jedem GPS Update einen shutdown restart machen muss...
Raspberry PI mit drei stackable CC (2x866MHz-HM&WMBUS, 1x433MHz-Somfy)
HM-LAN (Keymatic, Dimmer, Bewegungsmelder, Rolladen, Lichtschalter, KFM100)
div. Tasmota via MQTT

2. Raspberry Pi/FHEM im Wohnmobil (Heizungsregelung,GPS) Batterieüberwachung-toDo

amenomade

Zitat von: pure-current am 24 Februar 2019, 10:00:33
define Wetter_GPS Weather API=DarkSkyAPI,cachemaxage:600 apikey=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx interval=3600 lang=de

Aber auch nach zig mal "set ... update" blieben die Werte unverändert.

Schon mal in CommandRef gelesen, was cachemaxage bedeutet?
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

amenomade

Zitat von: inoma am 23 Februar 2019, 14:47:16
defmod geht nicht bei httpmod devices,
Warum "httpmod"? Das ist kein "HTTPMOD", sondern "Weather"
Warum sollte defmod nicht funktionieren???
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

pure-current

Zitat von: amenomade am 24 Februar 2019, 10:15:30
Schon mal in CommandRef gelesen, was cachemaxage bedeutet?

Ja, hab' ich. Aber zwischen 23.00 Uhr abends und 9.00 Uhr morgens sollte das Intervall längst erledigt sein, oder?

Raspberry PI mit drei stackable CC (2x866MHz-HM&WMBUS, 1x433MHz-Somfy)
HM-LAN (Keymatic, Dimmer, Bewegungsmelder, Rolladen, Lichtschalter, KFM100)
div. Tasmota via MQTT

2. Raspberry Pi/FHEM im Wohnmobil (Heizungsregelung,GPS) Batterieüberwachung-toDo