{"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":"cambios-de-datos-gps-smarthome","status":"publish","type":"post","link":"https:\/\/csiag.eu\/es\/blog\/2024\/01\/29\/smarthome-gps-daten-aenderungen\/","title":{"rendered":"SmartHome \u2013 Cambios de datos GPS"},"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\/es\/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\/es\/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\/es\/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\">Tiempo de leer<\/span> <span class=\"rt-time\"> 2<\/span> <span class=\"rt-label rt-postfix\">minutos<\/span><\/span>Los datos del GPS cambian constantemente cuando se viaja. El objetivo aqu\u00ed es utilizar SmartHome en HomeMatic o RaspberryMatic para registrar estos datos y, en caso necesario, actualizar otros par\u00e1metros que dependan de ellos. Por supuesto, se podr\u00eda determinar continuamente la ubicaci\u00f3n y as\u00ed recuperar siempre los datos meteorol\u00f3gicos en relaci\u00f3n con la ubicaci\u00f3n, pero esto generar\u00eda un tr\u00e1fico en l\u00ednea y una carga del procesador innecesarios. Por lo tanto...&nbsp;<a href=\"https:\/\/csiag.eu\/es\/blog\/2024\/01\/29\/smarthome-gps-daten-aenderungen\/\" rel=\"bookmark\">Vaciar m\u00e1s \"<span class=\"screen-reader-text\">SmartHome \u2013 Cambios de datos GPS<\/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\/es\/wp-json\/wp\/v2\/posts\/6288","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/csiag.eu\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/csiag.eu\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/csiag.eu\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/csiag.eu\/es\/wp-json\/wp\/v2\/comments?post=6288"}],"version-history":[{"count":0,"href":"https:\/\/csiag.eu\/es\/wp-json\/wp\/v2\/posts\/6288\/revisions"}],"wp:attachment":[{"href":"https:\/\/csiag.eu\/es\/wp-json\/wp\/v2\/media?parent=6288"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/csiag.eu\/es\/wp-json\/wp\/v2\/categories?post=6288"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/csiag.eu\/es\/wp-json\/wp\/v2\/tags?post=6288"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}