Gelöst:Standortanzeige auf Karte

Begonnen von Masterfunk, 03 Januar 2016, 14:24:57

Vorheriges Thema - Nächstes Thema

Masterfunk

Hallo,

ist es möglich die Werte aus dem Geofency Modul (currLocLat_xxxx currLocLong_xxxx) zu nutzen und via weblink und (z.B.) Google Maps den aktuellen Standort anzeigen zu lassen?

Gruß Detlef

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

justme1968

hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Masterfunk

#3
Danke für die Antworten.

Die Frage ist aber eher, wie bekomme ich die dynamischen Werte (aus den Readings) in die URL?

https://www.google.de/maps/@50.7972652,6.0703771,15z?hl=de

Gruß Detlef

Masterfunk

Steh total auf dem Schlauch.
Hat keiner einen Tip?

Danke und Gruß
Detlef

Loredo

http://fhem.de/commandref.html#perl


Zitat
To access the device states/attributes, use the following functions:

       
  • Value(<devicename>)
    returns the state of the device (the string you see in paranthesis in the output of the list command).

  •    
  • OldValue(<devicename>)
  • OldTimestamp(<devicename>)
    returns the old value/timestamp of the device.

  •    
  • ReadingsVal(<devicename>,<reading>,<defaultvalue>)
    Return the reading (the value in the Readings section of "list device")

  •    
  • ReadingsNum(<devicename>,<reading>,<defaultvalue>)
    Return the reading as a number, i.e. delete non-numerical values.

  •    
  • AttrVal(<devicename>,<attribute>,<defaultvalue>)
    Return the attribute of the device

    { Value("wz") }
    { OldValue("wz") }
    { time_str2num(OldTimestamp("wz")) }
    { ReadingsVal("wz", "measured-temp", "20")+0 }
    { ReadingsTimestamp("wz", "measured-temp", 0)}
    { AttrVal("wz", "room", "none") }

  •    
  • InternalVal(<devicename>,<property>,<defaultvalue>)
    Return the internal value (the value in the Internals section of "list device").
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

Masterfunk

Anscheinend bin ich zu blöd dazu.

DEF

link https://www.google.de/maps/@{ReadingsVal("rr_Detlef", "lastLocationLat", "0")},{ReadingsVal("rr_Detlef", "lastLocationLong", "0")},15z?hl=de


Bringt kein Ergebnis.

Gruß Detlef

Baumi

#7
Ich weiß nicht, in welchem Zusammenhang Du Deine Definition eingegeben hast, aber generell kann man nicht einfach eine Perl-Funktion mit geschweiften Klammern mitten in eine Zeichenkette packen und dann hoffen, dass dabei etwas Vernünftiges rauskommt.

Falls das link-Attribut(? Falls es ein Attribut ist...), das Du da setzen willst, Perl versteht, kannst Du ihm einen Perl-Block in geschweiften Klammern übergeben, der den Link als Ganzes zurückliefert. (Kleiner Tipp dazu: Verschiedene Zeichenketten lassen sich in Perl mittels . (also dem Punkt) zusammenfügen – auch die Rückgabewerte von Funktionen lassen sich so hineinpacken:

$string1 = "So ge";
$string2 = "ht das! 1234";
print $string1.$string2.sqrt(25);


Das ergibt als Ausgabe: "So geht das! 12345"
(sqrt ist eine Funktion, die die Quadratwurzel liefert, im Falle von 25 also 5.)

Falls das, was Du da setzt hingegen keine Perl-Ausdrücke auswerten kann, könntest Du es per Funktion erledigen. Z.B. über ein Notify auf die Geofancy-Readings. Diese Funktion muss wieder die Zeichenkette zusammenbauen (also den Weblink mit Koordinaten)  und ihn dann als Ganzes in das Attribut schreiben. Wie man das macht, findest Du im Einsteiger-Guide.

justme1968

hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Masterfunk

Zitat von: justme1968 am 06 Januar 2016, 10:50:02
vielleicht schaust du dir das hier: http://forum.fhem.de/index.php/topic,46665.msg383940.html#msg383940 ja doch noch mal an...

Hab ich heute Morgen mal eben. Scheint auch jetzt zu funktionieren. ;-)
Muss nur noch etwas Feintuning machen.
Ich werde berichten.

Danke und Gruß
Detlef

Masterfunk

Soweit läuft es jetzt. Danke noch mal für die leichten Schläge auf den Hinterkopf. ;-)

Habe es wie folgt gelöst:

in die myUtils:
sub ShowGoogleMapsPosition($$$) {
my ($zoom,$width,$height,$lat,$lng) = @_;
$zoom='12' unless $zoom;
$width='740' unless $width;
$height='470' unless $height;
$lat= ReadingsVal ("rr_Detlef", "locationLat", "0");
$lng= ReadingsVal ("rr_Detlef", "locationLong", "0");

  my $htmlcode = "";
 
  $htmlcode .= "<script src='https://maps.googleapis.com/maps/api/js?v=3.exp'></script>";
  $htmlcode .= "<script>";
  $htmlcode .= "function initialize() {  ";
  $htmlcode .= "var myLatlng = new google.maps.LatLng(".$lat.",".$lng.");  ";
  $htmlcode .= "var mapOptions = {    ";
  $htmlcode .= "  zoom: ".$zoom.",    ";
  $htmlcode .= "  center: myLatlng  ";
  $htmlcode .= "};  ";
  $htmlcode .= "var map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions);  ";
  $htmlcode .= "}";
  $htmlcode .= "google.maps.event.addDomListener(window, 'load', initialize);    ";
  $htmlcode .= "</script>    ";
  $htmlcode .= "<div id='map-canvas' style='width:".$width."px;height:".$height."px;'></div>";
 
  return $htmlcode;
}


Und dann folgende Definition:


htmlCode {ShowGoogleMapsPosition(17,400,300)}


Mein Standort wird auch schön mittig auf der Karte angezeigt.
Nun scheutere ich daran genau da eine Stecknadel anzuzeigen.
Werde aus der API Beschreibung nicht schlau.
Kann noch mal jemand auf den Kopf hauen?

Danke und Gruß
Detlef

Baumi

Schön, dass es klappt.

Hilft das hier weiter?

Masterfunk

Zitat von: Baumi am 07 Januar 2016, 09:22:49
Schön, dass es klappt.

Hilft das hier weiter?

Genau damit "kämpfe" ich im Moment. :-(

Gruß Detlef

Baumi

Hast Du Dir das Beispiel unter "Javascript + HTML" auf der Seite angesehen? Daran solltest Du Dich eigentlich orientieren können.

Masterfunk

#14
Ja, hab mir das nageschaut:

https://developers.google.com/maps/documentation/javascript/

Und dann diesen Code erstellt:

sub ShowGoogleMapsPosition($$$) {
my ($zoom,$width,$height,$lat,$lng) = @_;
$zoom='12' unless $zoom;
$width='740' unless $width;
$height='470' unless $height;
$lat= ReadingsVal ("rr_Detlef", "locationLat", "0");
$lng= ReadingsVal ("rr_Detlef", "locationLong", "0");

  my $htmlcode = "";
 
  $htmlcode .= "<script src='https://maps.googleapis.com/maps/api/js?v=3.exp'></script>";
  $htmlcode .= "<script>";
  $htmlcode .= "function initialize() {  ";
  $htmlcode .= "var myLatlng = new google.maps.LatLng(".$lat.",".$lng.");  ";
  $htmlcode .= "var mapOptions = {    ";
  $htmlcode .= "  zoom: ".$zoom.",    ";
  $htmlcode .= "  center: myLatlng  ";
  $htmlcode .= "};  ";
  #$htmlcode .= "var markerOptions = {    ";
  #$htmlcode .= "  map: map    ";
  #$htmlcode .= "  zoom: ".$zoom.",    ";
  #$htmlcode .= "  position: myLatlng  ";
  #$htmlcode .= "  title: Detlef  ";
  #$htmlcode .= "};  "; 
  $htmlcode .= "var map = new google.maps.Map(document.getElementById('map'), mapOptions);  ";
  $htmlcode .= "}";
  #$htmlcode .= "var marker = new google.maps.Marker( markerOptions);  ";
  #$htmlcode .= "}";
  $htmlcode .= "google.maps.event.addDomListener(window, 'load', initialize);    ";
  $htmlcode .= "</script>    ";
  $htmlcode .= "<div id='map' style='width:".$width."px;height:".$height."px;'></div>";
 
  return $htmlcode;
}


Die auskommentierten Zeilen ist das was zusätzlich hinzu gekommen ist.
Wenn ich diese aber aktiv habe, bekomme ich gar keine Anzeige.

Ich weiß warum ich programieren hasse. Solange es eine Hipath 4000 oder ein Cisco UCM ist gehts noch, aber dann...

Gruß Detlef