Position in Karte darstellen

Begonnen von Dr. Boris Neubert, 07 September 2022, 16:11:12

Vorheriges Thema - Nächstes Thema

Dr. Boris Neubert

Hallo,

nachdem es mir gelungen ist, die Position meines PKW abzufragen und darüberhinaus per Notify an ein PET zu transferieren, habe ich eine Landkarte in FHEMWEB integriert, die mir die jeweils aktuelle Position des PKW anzeigt. Der Code lautet:

define BMW_map weblink htmlCode { "<iframe width=\"600\" height=\"600\" src=\"https://opentopomap.org/#marker=15/" . ReadingsVal("rp_BMW","locationLat","0.0") . "/" . ReadingsVal("rp_BMW","locationLong", "0.0") ."\"></iframe>" }

rp_BMW ist ein PET-Device mit den Readings locationLat und locationLong.

Hintergrund: ich steuere per 5-minütigem Cron-Job,  bimmerconnected und mosquitto_pub die Daten des PKW nach FHEM in ein MQTT2_DEVICE namens bmw. Mit den beiden Notifys

define bmw_notify_lat MQTT2_bmw:1_data_state_location_coordinates_latitude.* setreading rp_BMW locationLat $EVTPART1
define bmw_notify_long MQTT2_bmw:1_data_state_location_coordinates_longitude.* setreading rp_BMW locationLong $EVTPART1


werden dann die Koordinaten an das PET-Device gezaubert. Den Weg über das PET-Device habe ich gewählt, weil ich noch zusätzliche Funktionen bei Anwesenheit oder Abwesenheit des PKW implementieren möchte.

Grüße
Boris

Siehe auch hier: https://forum.fhem.de/index.php/topic,128932.msg1233990.html
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

TomLee

Zitatdefine BMW_map htmlCode { "<iframe width=\"600\" height=\"600\" src=\"https://opentopomap.org/#marker=15/" . ReadingsVal("rp_BMW","locationLat","0.0") . "/" . ReadingsVal("rp_BMW","locationLong", "0.0") ."\"></iframe>" }

Wenn man aussen q() oder einfache Hochkomma verwendet spart man sich innen das escapen, meine Erfahrung.

{sprintf(q(<iframe src="%s" width=600 height=400></iframe>),ReadingsVal($name,'location_url','0,0'))}

rudolfkoenig

Zitatdefine BMW_map htmlCode ...

Sollte das nicht eher
define BMW_map weblink htmlCode ...
sein?

Dr. Boris Neubert

Zitat von: rudolfkoenig am 07 September 2022, 17:48:54
Sollte das nicht eher
define BMW_map weblink htmlCode ...
sein?

Ja, unvollständig aus dem list heraus kopiert. Habe den Originalbeitrag korrigiert.
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

TomLee

Bei allem Respekt (und den hab ich), die Notation des gezeigten Codes erinnert mich an meine Anfangszeit (2015-2016).
Da wusst ich erstmal gar nix mit anzufangen und ich hab oft (zumindest gefühlt) in älteren Beiträgen von solchen Definitionen hier im Forum oder auch ausserhalb gelesen.

Das war offenbar damals so üblich, ich hab mich ja erst viel später etwas mit Perl beschäftigt, aber zwischenzeitlich find ich es grausam sowas zu entziffern.

Hier ein Beispiel wie ich das jetzt umsetzen würde und mMn. auch zeitgemäss ist:

defmod BMW_map weblink htmlCode { sprintf(q(<iframe src="https://opentopomap.org/#marker=15/%s/%s" width=600 height=600></iframe>),ReadingsVal('rp_BMW','locationLat','0.0'), ReadingsVal('rp_BMW','locationLong','0.0)) }

Die Hochkomma bei den Attributen width und height lass ich gerne weg, weil ich über die Zeit festgestellt habe das es FHEMWEB nix ausmacht, wenn mans genau nimmt sollten die auch angegeben werden, ja.

Geht natürlich auch ohne sprintf, find ich aber übersichtlicher mit.

TomLee

Und vlt. noch eine Frage allgemein (die mich beschäftigt und noch nicht verstanden habe).

Spricht was dagegen das mit zwei userrReadings in dem MQTT2_bmw-Device zu lösen ?

Man würde sich die zwei notify-Definitionen sparen und in dem Haupt-Device (MQTT2_bmw)  den Code um den es hier geht einfach als devstatIcon definieren !?

Dr. Boris Neubert

Zitat von: TomLee am 11 September 2022, 21:56:37


Spricht was dagegen das mit zwei userrReadings in dem MQTT2_bmw-Device zu lösen ?


Nein, überhaupt nicht. Du brauchst auch keine userReadings. Du kannst direkt auf 1_data_state_location_coordinates_latitude bzw. ..._longitude zugreifen.

Ich habe mich nur vorbereitet, die Ab-/Anwesenheitsfunktionalität von RESIDENTS & Co. zu verwenden.
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

TomLee

ZitatDu kannst direkt auf 1_data_state_location_coordinates_latitude bzw. ..._longitude zugreifen.

Kann ich nicht, ich fahr ein fast 20 Jahre altes Auto.

Mir gings nur darum einen Verbesserungsvorschlag zu machen, im Falle das ich es richtig verstanden hätte.