{"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-changes","status":"publish","type":"post","link":"https:\/\/csiag.eu\/en\/blog\/2024\/01\/29\/smarthome-gps-daten-aenderungen\/","title":{"rendered":"SmartHome \u2013 GPS data changes"},"content":{"rendered":"<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_87_1 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\/en\/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\/en\/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\/en\/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 class=\"wp-block-paragraph\">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 class=\"wp-block-paragraph\">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 class=\"wp-block-paragraph\">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 class=\"wp-block-paragraph\">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 class=\"wp-block-paragraph\">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 class=\"wp-block-paragraph\">! Geo-Daten auf 4 Nachkommastellen (ToString(4)) gek\u00fcrzt speichern<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">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 class=\"wp-block-paragraph\">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 class=\"wp-block-paragraph\">! Vergleich Standort akt und alt<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">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 class=\"wp-block-paragraph\">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 class=\"wp-block-paragraph\">! 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 class=\"wp-block-paragraph\">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 class=\"wp-block-paragraph\">! Senden der URL-Anfrage<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">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 class=\"wp-block-paragraph\">! Extrahieren der Daten<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">! City_name<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">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 class=\"wp-block-paragraph\">! Country Code<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">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 class=\"wp-block-paragraph\">! Region<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">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 class=\"wp-block-paragraph\">}<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">! 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 class=\"wp-block-paragraph\">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\">Reading time<\/span> <span class=\"rt-time\"> 2<\/span> <span class=\"rt-label rt-postfix\">minutes<\/span><\/span>GPS data is constantly changing while traveling. The aim here is to use SmartHome on HomeMatic or RaspberryMatic to record this data and, if necessary, update other parameters that depend on it. Of course, you could continuously determine the location and thus always retrieve the weather data in relation to the location, but this would generate unnecessary online traffic and processor load. Therefore...&nbsp;<a href=\"https:\/\/csiag.eu\/en\/blog\/2024\/01\/29\/smarthome-gps-daten-aenderungen\/\" rel=\"bookmark\">Read More \"<span class=\"screen-reader-text\">SmartHome \u2013 GPS data changes<\/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\/en\/wp-json\/wp\/v2\/posts\/6288","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/csiag.eu\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/csiag.eu\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/csiag.eu\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/csiag.eu\/en\/wp-json\/wp\/v2\/comments?post=6288"}],"version-history":[{"count":0,"href":"https:\/\/csiag.eu\/en\/wp-json\/wp\/v2\/posts\/6288\/revisions"}],"wp:attachment":[{"href":"https:\/\/csiag.eu\/en\/wp-json\/wp\/v2\/media?parent=6288"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/csiag.eu\/en\/wp-json\/wp\/v2\/categories?post=6288"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/csiag.eu\/en\/wp-json\/wp\/v2\/tags?post=6288"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}