{"id":6288,"date":"2024-01-29T11:43:37","date_gmt":"2024-01-29T11:43:37","guid":{"rendered":"https:\/\/csiag.eu\/?p=6288"},"modified":"2024-01-29T11:45:38","modified_gmt":"2024-01-29T11:45:38","slug":"smarthome-gps-data-endres","status":"publish","type":"post","link":"https:\/\/csiag.eu\/nb\/blog\/2024\/01\/29\/smarthome-gps-daten-aenderungen\/","title":{"rendered":"SmartHome - endringer i GPS-data"},"content":{"rendered":"<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_82_2 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Inhaltsverzeichnis<\/p>\n<span class=\"ez-toc-title-toggle\"><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/csiag.eu\/nb\/blog\/2024\/01\/29\/smarthome-gps-daten-aenderungen\/#Anpassung_der_GPS-Daten_zum_Vergleich\" >Anpassung der GPS-Daten zum Vergleich<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/csiag.eu\/nb\/blog\/2024\/01\/29\/smarthome-gps-daten-aenderungen\/#Skript_Erganzung_GPS_Data\" >Skript Erg\u00e4nzung (GPS_Data)<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/csiag.eu\/nb\/blog\/2024\/01\/29\/smarthome-gps-daten-aenderungen\/#Skript\" >Skript<\/a><\/li><\/ul><\/li><\/ul><\/nav><\/div>\n<span class=\"span-reading-time rt-reading-time\" style=\"display: block;\"><span class=\"rt-label rt-prefix\">Lesedauer<\/span> <span class=\"rt-time\"> 2<\/span> <span class=\"rt-label rt-postfix\">Minuten<\/span><\/span>\n<p>Auf Reisen finden laufend \u00c4nderungen der GPS-Daten statt. Diese zu erfassen und ggf. andere davon abh\u00e4ngige Parameter zu aktualisieren, soll hier mittels SmartHome auf HomeMatic oder RaspberryMatic realisiert werden.<\/p>\n\n\n\n<p>Man k\u00f6nnte nat\u00fcrlich laufend den Standort ermitteln und so die Wetterdaten stets auf den Ort bezogen abrufen, doch w\u00fcrde dies unn\u00f6tigen Online-Traffic und Prozessor-Last erzeugen. Deshalb wird lediglich auf Positions-\u00c4nderung gepr\u00fcft und erst bei erkanntem Ortswechsel die Wetterdaten auf den nunmehr aktuellen Standort bezogen ermittelt und die Daten entsprechend aktualisiert.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Anpassung_der_GPS-Daten_zum_Vergleich\"><\/span>Anpassung der GPS-Daten zum Vergleich<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Da sich GPS-Koordinaten auf Grund der gewollten Ungenauigkeit der GPS-Dienstleister stets auf den letzten zwei Stellen der L\u00e4ngen- und Breiten-Angaben schwanken, selbst wenn man unver\u00e4ndert am selben Ort verweilt, werden zum Vergleich nur vier Nachkomma-Stellen ber\u00fccksichtigt. Ein Ortswechsel wird also erst dann erkannt, wenn sich mindestens die vierte Nachkomma-Stelle \u00e4ndert.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Skript_Erganzung_GPS_Data\"><\/span>Skript Erg\u00e4nzung (<em>GPS_Data<\/em>)<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Folgende Skript-Zeilen werden dem <a href=\"https:\/\/csiag.eu\/smarthome-gps-daten-ermitteln\/\" data-type=\"post\" data-id=\"6268\">hier<\/a> besprochenen Skript <em>GPS_Data<\/em> angef\u00fcgt. Zeilen beginnend mit einem Ausrufezeichen stellen Kommentare dar. WriteLine-Anweisungen dienen lediglich der Ausgabe-Kontrolle und k\u00f6nnen gel\u00f6scht werden.<\/p>\n\n\n\n<p>Als neue Variablen vom Typ ZEICHENKETTE m\u00fcssen angelegt werden:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><em>W_Lat_short_akt<\/em> (Zur Speicherung der auf vier Nachkomma-Stellen gek\u00fcrzten &#8211; aktuellen &#8211; geogr. Breite)<\/li>\n\n\n\n<li><em>W_Lon_short_akt<\/em> (Zur Speicherung der auf vier Nachkomma-Stellen gek\u00fcrzten &#8211; aktuellen &#8211; geogr. L\u00e4nge)<\/li>\n\n\n\n<li><em>W_Lat_short_alt<\/em> (Zur Speicherung der auf vier Nachkomma-Stellen gek\u00fcrzten &#8211; alten &#8211; geogr. Breite)<\/li>\n\n\n\n<li><em>W_Lon_short_alt<\/em> (Zur Speicherung der auf vier Nachkomma-Stellen gek\u00fcrzten &#8211; alten &#8211; geogr. L\u00e4nge)<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Skript\"><\/span>Skript<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>! Geo-Daten auf 4 Nachkommastellen (ToString(4)) gek\u00fcrzt speichern<\/p>\n\n\n\n<p>var lat_short_akt = lat.ToString(4);<br>WriteLine(&#8222;lat_short_akt&#8220;);WriteLine(lat_short_akt);<br>dom.GetObject(&#8218;W_Lat_short_akt&#8216;).State(lat_short_akt);<\/p>\n\n\n\n<p>var lon_short_akt = lon.ToString(4);<br>WriteLine(&#8222;lon_short&#8220;);WriteLine(lon_short_akt);<br>dom.GetObject(&#8218;W_Lon_short_akt&#8216;).State(lon_short_akt);<\/p>\n\n\n\n<p>! Vergleich Standort akt und alt<\/p>\n\n\n\n<p>var W_lat_short_alt = dom.GetObject(&#8222;W_Lat_short_alt&#8220;).Value();WriteLine(W_lat_short_alt);<br>var W_lon_short_alt = dom.GetObject(&#8222;W_Lon_short_alt&#8220;).Value();WriteLine(W_lon_short_alt);<\/p>\n\n\n\n<p>if ((lat_short_akt &lt;&gt; W_lat_short_alt) &amp;&amp; (lon_short_akt &lt;&gt; W_lon_short_alt))<br>{<br>dom.GetObject(&#8222;W_Lat_short_alt&#8220;).State(lat_short_akt);<br>dom.GetObject(&#8222;W_Lon_short_alt&#8220;).State(lon_short_akt);<\/p>\n\n\n\n<p>! Zusammensetzen der URL mit den akt. GPS-Daten &#8211; die AppID &#8222;.. xxx ..&#8220; muss mit der eigenen ID bef\u00fcllt werden<\/p>\n\n\n\n<p>var url = &#8222;https:\/\/api.openweathermap.org\/geo\/1.0\/reverse?lat=&#8220;#Latitude#&#8220;&amp;lon=&#8220;#Longitude#&#8220;&amp;limit=5&amp;appid=[xxxxxxxxxxxxxxxxxxxxxxxxx]&#8220;;<br>WriteLine(&#8222;neue URL f\u00fcr neue Geo-Daten&#8220;);WriteLine(url);<\/p>\n\n\n\n<p>! Senden der URL-Anfrage<\/p>\n\n\n\n<p>var posValueStart;<br>var posValueEnd;<br>var pos;<br>var daten;<br>var posStart;<br>var posEnd; string stderr; string stdout;<br>system.Exec(&#8222;wget -q -O &#8211; &#8218;&#8220;#url#&#8220;&#8218;&#8220;, &amp;stdout, &amp;stderr);<br>WriteLine(stdout);<\/p>\n\n\n\n<p>! Extrahieren der Daten<\/p>\n\n\n\n<p>! City_name<\/p>\n\n\n\n<p>pos = 0;<br>posStart = &#8217;name&#8220;:&#8220;&#8218;;<br>posEnd = &#8218;&#8220;,&#8220;local_names&#8216;;<br>posValueStart = stdout.Find(posStart) + posStart.Length();<br>posValueEnd = stdout.Find(posEnd)-posValueStart;<br>string city_name = stdout.Substr(posValueStart, posValueEnd);<br>WriteLine(&#8222;city_name&#8220;);WriteLine(city_name);<br>dom.GetObject(&#8222;W_city_name&#8220;).State(city_name);<\/p>\n\n\n\n<p>! Country Code<\/p>\n\n\n\n<p>pos = 0;<br>posStart = &#8218;country&#8220;:&#8220;&#8218;;<br>posEnd = &#8218;&#8220;,&#8220;state&#8216;;<br>posValueStart = stdout.Find(posStart) + posStart.Length();<br>posValueEnd = stdout.Find(posEnd)-posValueStart;<br>string country_code = stdout.Substr(posValueStart, posValueEnd);<br>WriteLine(&#8222;country_code&#8220;);WriteLine(country_code);<br>dom.GetObject(&#8222;W_country_code&#8220;).State(country_code);<\/p>\n\n\n\n<p>! Region<\/p>\n\n\n\n<p>pos = 0;<br>posStart = &#8217;state&#8220;:&#8220;&#8218;;<br>posEnd = &#8218;&#8220;}]&#8216;;<br>posValueStart = stdout.Find(posStart) + posStart.Length();<br>posValueEnd = stdout.Find(posEnd)-posValueStart;<br>string W_region = stdout.Substr(posValueStart, posValueEnd);<br>WriteLine(&#8222;W_region&#8220;);WriteLine(W_region);<br>dom.GetObject(&#8222;W_region&#8220;).State(W_region);<\/p>\n\n\n\n<p>}<\/p>\n\n\n\n<p>! Der ELSE-Zweig kann entfallen und dient nur zur Verifikation, dass das Skript bis zum Ende durchlaufen wurde, wenn sich der Standort nicht ge\u00e4ndert hat<\/p>\n\n\n\n<p>else<br>{<br>WriteLine(&#8222;Daten gleich&#8220;);<br>}<\/p>\n","protected":false},"excerpt":{"rendered":"<p><span class=\"span-reading-time rt-reading-time\" style=\"display: block;\"><span class=\"rt-label rt-prefix\">Lesetid<\/span> <span class=\"rt-time\"> 2<\/span> <span class=\"rt-label rt-postfix\">minutter<\/span><\/span>GPS-dataene endres hele tiden n\u00e5r du er p\u00e5 reise. M\u00e5let her er \u00e5 bruke SmartHome p\u00e5 HomeMatic eller RaspberryMatic til \u00e5 registrere disse dataene og om n\u00f8dvendig oppdatere andre parametere som er avhengige av dem. Du kan selvf\u00f8lgelig bestemme posisjonen kontinuerlig og dermed alltid hente v\u00e6rdataene i forhold til posisjonen, men dette vil generere un\u00f8dvendig nettrafikk og prosessorbelastning. Derfor har vi valgt en annen l\u00f8sning.&nbsp;<a href=\"https:\/\/csiag.eu\/nb\/blog\/2024\/01\/29\/smarthome-gps-daten-aenderungen\/\" rel=\"bookmark\">Les mer \"<span class=\"screen-reader-text\">SmartHome - endringer i GPS-data<\/span><\/a><\/p>","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_lmt_disableupdate":"","_lmt_disable":"","neve_meta_sidebar":"","neve_meta_container":"","neve_meta_enable_content_width":"","neve_meta_content_width":0,"neve_meta_title_alignment":"","neve_meta_author_avatar":"","neve_post_elements_order":"","neve_meta_disable_header":"","neve_meta_disable_footer":"","neve_meta_disable_title":"","footnotes":""},"categories":[1],"tags":[],"class_list":["post-6288","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"modified_by":"Achim Goerner","_links":{"self":[{"href":"https:\/\/csiag.eu\/nb\/wp-json\/wp\/v2\/posts\/6288","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/csiag.eu\/nb\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/csiag.eu\/nb\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/csiag.eu\/nb\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/csiag.eu\/nb\/wp-json\/wp\/v2\/comments?post=6288"}],"version-history":[{"count":0,"href":"https:\/\/csiag.eu\/nb\/wp-json\/wp\/v2\/posts\/6288\/revisions"}],"wp:attachment":[{"href":"https:\/\/csiag.eu\/nb\/wp-json\/wp\/v2\/media?parent=6288"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/csiag.eu\/nb\/wp-json\/wp\/v2\/categories?post=6288"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/csiag.eu\/nb\/wp-json\/wp\/v2\/tags?post=6288"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}