{"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-foeraendringar","status":"publish","type":"post","link":"https:\/\/csiag.eu\/sv\/blog\/2024\/01\/29\/smarthome-gps-daten-aenderungen\/","title":{"rendered":"SmartHome \u2013 GPS-data\u00e4ndringar"},"content":{"rendered":"<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_83 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\/sv\/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\/sv\/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\/sv\/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\">L\u00e4stid<\/span> <span class=\"rt-time\"> 2<\/span> <span class=\"rt-label rt-postfix\">minuter<\/span><\/span>GPS-data \u00e4ndras hela tiden n\u00e4r man reser. M\u00e5let \u00e4r att anv\u00e4nda SmartHome p\u00e5 HomeMatic eller RaspberryMatic f\u00f6r att registrera dessa data och vid behov uppdatera andra parametrar som \u00e4r beroende av dem. Naturligtvis skulle du kontinuerligt kunna best\u00e4mma platsen och d\u00e4rmed alltid h\u00e4mta v\u00e4derdata i f\u00f6rh\u00e5llande till platsen, men detta skulle generera on\u00f6dig onlinetrafik och processorbelastning. D\u00e4rf\u00f6r b\u00f6r man...&nbsp;<a href=\"https:\/\/csiag.eu\/sv\/blog\/2024\/01\/29\/smarthome-gps-daten-aenderungen\/\" rel=\"bookmark\">L\u00e4s mer \"<span class=\"screen-reader-text\">SmartHome \u2013 GPS-data\u00e4ndringar<\/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\/sv\/wp-json\/wp\/v2\/posts\/6288","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/csiag.eu\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/csiag.eu\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/csiag.eu\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/csiag.eu\/sv\/wp-json\/wp\/v2\/comments?post=6288"}],"version-history":[{"count":0,"href":"https:\/\/csiag.eu\/sv\/wp-json\/wp\/v2\/posts\/6288\/revisions"}],"wp:attachment":[{"href":"https:\/\/csiag.eu\/sv\/wp-json\/wp\/v2\/media?parent=6288"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/csiag.eu\/sv\/wp-json\/wp\/v2\/categories?post=6288"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/csiag.eu\/sv\/wp-json\/wp\/v2\/tags?post=6288"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}