{"id":3145,"date":"2023-01-16T18:00:12","date_gmt":"2023-01-16T18:00:12","guid":{"rendered":"https:\/\/csiag.eu\/?p=3145"},"modified":"2023-01-20T16:50:26","modified_gmt":"2023-01-20T16:50:26","slug":"vejrdata-smarthome","status":"publish","type":"post","link":"https:\/\/csiag.eu\/da\/blog\/2023\/01\/16\/wetterdaten-smarthome\/","title":{"rendered":"SmartHome vejrdata"},"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\/da\/blog\/2023\/01\/16\/wetterdaten-smarthome\/#Programm\" >Programm<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/csiag.eu\/da\/blog\/2023\/01\/16\/wetterdaten-smarthome\/#Programm_Header\" >Programm Header<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/csiag.eu\/da\/blog\/2023\/01\/16\/wetterdaten-smarthome\/#Umrechnung_US_in_DE_Zeitformat\" >Umrechnung US in DE Zeitformat<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/csiag.eu\/da\/blog\/2023\/01\/16\/wetterdaten-smarthome\/#Land_%E2%80%93_Lander-Code\" >Land &#8211; L\u00e4nder-Code<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/csiag.eu\/da\/blog\/2023\/01\/16\/wetterdaten-smarthome\/#Region\" >Region<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/csiag.eu\/da\/blog\/2023\/01\/16\/wetterdaten-smarthome\/#Stadt\" >Stadt<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/csiag.eu\/da\/blog\/2023\/01\/16\/wetterdaten-smarthome\/#Latitude_%E2%80%93_geogr-_Breite\" >Latitude &#8211; geogr-. Breite<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/csiag.eu\/da\/blog\/2023\/01\/16\/wetterdaten-smarthome\/#Longitude_%E2%80%93_geogr_Lange\" >Longitude &#8211; geogr. L\u00e4nge<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/csiag.eu\/da\/blog\/2023\/01\/16\/wetterdaten-smarthome\/#Sicht_%E2%80%93_visibility\" >Sicht &#8211; visibility<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/csiag.eu\/da\/blog\/2023\/01\/16\/wetterdaten-smarthome\/#Luftdruck_und_Tendenz\" >Luftdruck und Tendenz<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/csiag.eu\/da\/blog\/2023\/01\/16\/wetterdaten-smarthome\/#Chill_Temperatur\" >Chill Temperatur<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-12\" href=\"https:\/\/csiag.eu\/da\/blog\/2023\/01\/16\/wetterdaten-smarthome\/#UV_und_Lichtschutz-Empfehlung\" >UV und Lichtschutz-Empfehlung<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-13\" href=\"https:\/\/csiag.eu\/da\/blog\/2023\/01\/16\/wetterdaten-smarthome\/#Windgeschwindigkeit\" >Windgeschwindigkeit<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-14\" href=\"https:\/\/csiag.eu\/da\/blog\/2023\/01\/16\/wetterdaten-smarthome\/#Windgeschwindigkeit_%E2%80%93_Umrechnungen\" >Windgeschwindigkeit &#8211; Umrechnungen<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-15\" href=\"https:\/\/csiag.eu\/da\/blog\/2023\/01\/16\/wetterdaten-smarthome\/#Windgeschwindigkeit_%E2%80%93_Gefahr_von_Erfrierungen\" >Windgeschwindigkeit &#8211; Gefahr von Erfrierungen<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-16\" href=\"https:\/\/csiag.eu\/da\/blog\/2023\/01\/16\/wetterdaten-smarthome\/#Windrichtung_geografisch\" >Windrichtung (geografisch)<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-17\" href=\"https:\/\/csiag.eu\/da\/blog\/2023\/01\/16\/wetterdaten-smarthome\/#Windrichtung_numerisch\" >Windrichtung (numerisch)<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-18\" href=\"https:\/\/csiag.eu\/da\/blog\/2023\/01\/16\/wetterdaten-smarthome\/#Bewolkung\" >Bew\u00f6lkung<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-19\" href=\"https:\/\/csiag.eu\/da\/blog\/2023\/01\/16\/wetterdaten-smarthome\/#Wolkenbedeckung\" >Wolkenbedeckung<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-20\" href=\"https:\/\/csiag.eu\/da\/blog\/2023\/01\/16\/wetterdaten-smarthome\/#Vorhersage_Regen\" >Vorhersage Regen<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-21\" href=\"https:\/\/csiag.eu\/da\/blog\/2023\/01\/16\/wetterdaten-smarthome\/#Elevation_%E2%80%93_Azimut\" >Elevation &#8211; Azimut<\/a><\/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\"> 9<\/span> <span class=\"rt-label rt-postfix\">Minuten<\/span><\/span>\n<p>Wetterdaten mit SmartHome erfassen und via AIO Creator auf dem Handy oder Tablet zu visualisieren ist  zwar i.d.R. keine Notwendigkeit, aber ein nice to have.<\/p>\n\n\n\n<p>Der Online Wetterdienst <a href=\"https:\/\/www.weatherbit.io\/\" target=\"_blank\" rel=\"noreferrer noopener\">weatherstack.com<\/a> bietet hierf\u00fcr &#8211; begrenzt kostenfrei &#8211; bis zu 250 Abfragen monatlich an. Wer wirklich aktuelle Wetterdaten haben m\u00f6chte, sollte das Standard-Paket w\u00e4hlen. 50.000 Abfragen erm\u00f6glichen Minuten-Intervalle.<\/p>\n\n\n\n<p>Die weiter verf\u00fcgbaren Pakete unterscheiden sich prim\u00e4r in der Anzahl der Anfragen und einer Wetter-Vorhersage von 7, bzw 14 Tagen.<\/p>\n\n\n\n<p>Folgende Daten sind in allen Paketen beinhaltet:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Geografische L\u00e4nge und Breite<\/li>\n\n\n\n<li>Ort<\/li>\n\n\n\n<li>Region<\/li>\n\n\n\n<li>Land<\/li>\n\n\n\n<li>Zeitzone<\/li>\n\n\n\n<li>Lokalzeit und Datum<\/li>\n\n\n\n<li>UTC Offset<\/li>\n\n\n\n<li>Aktuelle Zeit der Datenerhebung<\/li>\n\n\n\n<li>Lufttemperatur<\/li>\n\n\n\n<li>Wetterbeschreibung<\/li>\n\n\n\n<li>Windgeschwindigkeit<\/li>\n\n\n\n<li>Windrichtung numerisch \/ geografisch<\/li>\n\n\n\n<li>Luftdruck<\/li>\n\n\n\n<li>Regenmenge<\/li>\n\n\n\n<li>Luftfeuchte<\/li>\n\n\n\n<li>Bew\u00f6lkungsdichte<\/li>\n\n\n\n<li>Chill Temperatur<\/li>\n\n\n\n<li>UV Index<\/li>\n\n\n\n<li>Sicht<\/li>\n<\/ul>\n\n\n\n<p>Die Registrierung, gleich mit welchem Paket, erfordert die \u00fcblichen Angaben und Zahlungsdaten. Ein j\u00e4hrliches Abonnement, im Gegensatz zum monatlichen, ist mit 20% rabattiert.<\/p>\n\n\n\n<p>Nach erfolgreichem Abschluss dieses Prozedere erh\u00e4lt man einen sog. API Code (Application Programming Interface), den man in die Abfrage-Url kopiert. Die Antwort ist eine XML-Ausgabe, die die o.g. Datenkategorien und Werte beinhaltet. Die Daten werden \u00fcber geeignete Skripte extrahiert und in Variablen gespeichert. Diese k\u00f6nnen dann im AIO Creator zur Visualisierung herangezogen werden.<\/p>\n\n\n\n<p>Eine ausf\u00fchrliche Beschreibung aller in der XML-Ausgabe m\u00f6glicher Parameter, sowie die in den h\u00f6herpreisigen Paketen enthaltenen optionalen Abfrage-M\u00f6glichkeiten sind, inklusive diverser Code-Beispiele, <a href=\"https:\/\/weatherstack.com\/documentation#language_parameter\" target=\"_blank\" rel=\"noreferrer noopener\">hier<\/a> einsehbar.<br><br><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Programm\"><\/span>Programm<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Das Programm ist auf Grund der Vielzahl der Daten recht umfangreich. Daher werden hier die einzelnen Abschnitte sequenziell aufgef\u00fchrt. Alle Code-Schnipsel k\u00f6nnen letztlich in einem einzigen Programm zusammengefasst werden.<\/p>\n\n\n\n<p>Neben den o.g. Daten werden im Programm zus\u00e4tzliche Daten errechnet und zur Visualisierung bereitgestellt:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Sonnen Elevation und Azimut<\/li>\n\n\n\n<li>Lichtschutz-Faktor Empfehlung<br><\/li>\n<\/ul>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img decoding=\"async\" width=\"1024\" height=\"233\" src=\"https:\/\/csiag.eu\/wp-content\/uploads\/2023\/01\/image-7-1024x233.png\" alt=\"\" class=\"wp-image-3190\" srcset=\"https:\/\/csiag.eu\/wp-content\/uploads\/2023\/01\/image-7-1024x233.png 1024w, https:\/\/csiag.eu\/wp-content\/uploads\/2023\/01\/image-7-300x68.png 300w, https:\/\/csiag.eu\/wp-content\/uploads\/2023\/01\/image-7-768x175.png 768w, https:\/\/csiag.eu\/wp-content\/uploads\/2023\/01\/image-7-1536x349.png 1536w, https:\/\/csiag.eu\/wp-content\/uploads\/2023\/01\/image-7-2048x466.png 2048w, https:\/\/csiag.eu\/wp-content\/uploads\/2023\/01\/image-7-1560x355.png 1560w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Programm &#8211; W_Daten &#8211; Wetterdaten-Abfrage<\/figcaption><\/figure>\n<\/div>\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Programm_Header\"><\/span>Programm Header<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>Der Header beinhaltet lediglich die URL, die um den API-Key, hier mit xxx dargestellt, sowie den Ort (im Klartext oder, jeweils mit Komma getrennt, als L\u00e4ngen- und Breitenangabe, mit yyy gekennzeichnet, zu erg\u00e4nzen ist:<\/p>\n\n\n\n<p><code>var url = \"http:\/\/api.weatherstack.com\/current?access_key=xxx&amp;query=yyy\";<\/code><br><br><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Umrechnung_US_in_DE_Zeitformat\"><\/span>Umrechnung US in DE Zeitformat<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Da in dem freien und Standard-Tarif keine Auswahl der Anzeige-Sprache, damit auch nur das AM \/ PM Zeitformat verf\u00fcgbar ist, wird hier in das 24-Stunden konvertiert.<\/p>\n\n\n\n<p>Anzulegende Variable:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>W_LDU<\/code> vom Typ <em>string<\/em><\/li>\n<\/ul>\n\n\n\n<p>Code:<\/p>\n\n\n\n<p>! AM\/PM Umrechnung &#8211; Speichern in W_LDU<\/p>\n\n\n\n<p><code>var posValueStart;<br>var posValueEnd;<br>var posStart;<br>var posEnd; string stderr; string stdout;<br>system.Exec(\"wget -q -O - '\"#url#\"'\", &amp;stdout, &amp;stderr);<br>WriteLine(stdout);<br>string wetter_xml = stdout;<\/code><\/p>\n\n\n\n<p><code>string word = 'observation_time\":\"';<br>integer word_laenge = word.Length();<br>integer word_position = wetter_xml.Find(word);<br>string daten = wetter_xml.Substr((word_position + word_laenge), 5);<br>integer word_position = daten.Find(word);<br>daten = daten.Substr(0, (word_position -2));<\/code><\/p>\n\n\n\n<p><code>string word = 'observation_time\":\"';<br>integer word_laenge = word.Length();<br>integer word_position = wetter_xml.Find(word);<br>string PM = wetter_xml.Substr((word_position + word_laenge +6), 2);<br>integer word_position = PM.Find(word);<br>PM = PM.Substr(0, (word_position -2));<br>WriteLine(\"AM\/PM\");WriteLine(PM);<\/code><\/p>\n\n\n\n<p><code>string word = 'observation_time\":\"';<br>integer word_laenge = word.Length();<br>integer word_position = wetter_xml.Find(word);<br>string HH = wetter_xml.Substr((word_position + word_laenge) + 1, 1);<br>integer word_position = HH.Find(word);<br>HH = HH.Substr(0, (word_position -2));<br>WriteLine(\"HH\");WriteLine(HH);<\/code><\/p>\n\n\n\n<p><code>string word = 'observation_time\":\"';<br>integer word_laenge = word.Length();<br>integer word_position = wetter_xml.Find(word);<br>string MM = wetter_xml.Substr((word_position + word_laenge) +3, 2);<br>integer word_position = MM.Find(word);<br>MM = MM.Substr(0, (word_position -2));<br>WriteLine(\"MM\");WriteLine(MM);<\/code><\/p>\n\n\n\n<p><code>if (PM == \"PM\")<br>{<br>integer Diff = 12;<br>WriteLine(\"Diff\");WriteLine(Diff);<br>var HH_i = HH.ToInteger();<br>integer H = (HH_i + Diff);<br>WriteLine(\"HHi + Diff ist = H)\");WriteLine(H);<br>string HHMM = H #\":\";<br>WriteLine(\"H_+ : \");WriteLine(HHMM);<br>string HM = HHMM # MM;<br>WriteLine(\"HH_+12+MM\");WriteLine(HM);<br>dom.GetObject(\"W_LDU\").State(HM);<br>}<br>else<br>{<br>WriteLine(\"LDU_daten\");WriteLine(daten);<br>dom.GetObject(\"W_LDU\").State(daten);<br>}<\/code><br><br><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Land_%E2%80%93_Lander-Code\"><\/span>Land &#8211; L\u00e4nder-Code<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Auch der L\u00e4nder-Code wird in Englisch ausgegeben und hier in den internationalen Code konvertiert. Weitere L\u00e4nder k\u00f6nnen bei Bedarf nach diesem Muster zugef\u00fcgt werden. Das aktuelle Land ergibt sich aus der Wahl der Stadt seitens Weatherstack automatisch.<\/p>\n\n\n\n<p>Anzulegende Variable:<\/p>\n\n\n\n<p><code>W_country_code<\/code> vom Typ <em>string<\/em><\/p>\n\n\n\n<p>Code:<\/p>\n\n\n\n<p>! Country_code<\/p>\n\n\n\n<p><code>pos = 0;<br>posStart = 'country\":\"';<br>posEnd = '\",\"region';<br>posValueStart = stdout.Find(posStart) + posStart.Length();<br>posValueEnd = stdout.Find(posEnd)-posValueStart;<br>string country_code = stdout.Substr(posValueStart, posValueEnd);<\/code><\/p>\n\n\n\n<p><code>if (country_code == \"Germany\")<br>{<br>string country_code = \"DE\";<br>}<br>if (country_code == \"Sweden\")<br>{<br>string country_code = \"SE\";<br>}<\/code><\/p>\n\n\n\n<p><code>WriteLine(\"country_code\");WriteLine(country_code);<br>dom.GetObject(\"W_country_code\").State(country_code);<\/code><br><br><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Region\"><\/span>Region<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Die Region bezeichnet, z.B. in Deutschland &#8222;Niedersachsen&#8220; und wird von Weatherstack ebenfalls automatisch ermittelt.<\/p>\n\n\n\n<p>Anzulegende Variable:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>W_region<\/code> vom Typ <em>string<\/em><\/li>\n<\/ul>\n\n\n\n<p>Code:<\/p>\n\n\n\n<p>! Region<\/p>\n\n\n\n<p><code>pos = 0;<br>posStart = 'region\":\"';<br>posEnd = '\",\"lat';<br>posValueStart = stdout.Find(posStart) + posStart.Length();<br>posValueEnd = stdout.Find(posEnd)-posValueStart;<br>string region = stdout.Substr(posValueStart, posValueEnd);<br>WriteLine(\"region\");WriteLine(region);<br>dom.GetObject(\"W_region\").State(region);<\/code><br><br><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Stadt\"><\/span>Stadt<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Bei Eingabe der Stadt ermittelt Weatherstack automatisch die zugeh\u00f6rigen L\u00e4nge- und Breitenangaben, w\u00e4hrend aus den eingegebenen Geo-Daten die Stadt ermittelt wird.<\/p>\n\n\n\n<p>Anzulegende Variable:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>W_city_name<\/code> vom Typ <em>string<\/em><\/li>\n<\/ul>\n\n\n\n<p>Code:<\/p>\n\n\n\n<p>! City_name<\/p>\n\n\n\n<p><code>pos = 0;<br>posStart = 'name\":\"';<br>posEnd = '\",\"country';<br>posValueStart = stdout.Find(posStart) + posStart.Length();<br>posValueEnd = stdout.Find(posEnd)-posValueStart;<br>string city_name = stdout.Substr(posValueStart, posValueEnd);<br>WriteLine(\"city_name\");WriteLine(city_name);<br>dom.GetObject(\"W_city_name\").State(city_name);<\/code><br><br><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Latitude_%E2%80%93_geogr-_Breite\"><\/span>Latitude &#8211; geogr-. Breite<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p> Anzulegende Variable:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>W_Lat<\/code> vom Typ <em>string<\/em><\/li>\n<\/ul>\n\n\n\n<p>Code:<\/p>\n\n\n\n<p>! Lat<\/p>\n\n\n\n<p><code>pos = 0;<br>posStart = 'query\":\"Lat';<br>posEnd = 'and Lon';<br>posValueStart = stdout.Find(posStart) + posStart.Length();<br>posValueEnd = stdout.Find(posEnd)-posValueStart;<br>string Lat = stdout.Substr(posValueStart, posValueEnd);<br>WriteLine(\"Lat\");WriteLine(Lat);<br>dom.GetObject(\"W_Lat\").State(Lat);<\/code><br><br><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Longitude_%E2%80%93_geogr_Lange\"><\/span>Longitude &#8211; geogr. L\u00e4nge<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Anzulegende Variable:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>W_Lon<\/code> vom Typ <em>string<\/em><\/li>\n<\/ul>\n\n\n\n<p>Code:<\/p>\n\n\n\n<p>! Lon<\/p>\n\n\n\n<p><code>pos = 0;<br>posStart = 'and Lon';<br>posEnd = '\",\"language';<br>posValueStart = stdout.Find(posStart) + posStart.Length();<br>posValueEnd = stdout.Find(posEnd)-posValueStart;<br>string Lon = stdout.Substr(posValueStart, posValueEnd);<br>WriteLine(\"Lon\");WriteLine(Lon);<br>dom.GetObject(\"W_Lon\").State(Lon);<\/code><br><br><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Sicht_%E2%80%93_visibility\"><\/span>Sicht &#8211; visibility<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Anzulegende Variable:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>W_vis<\/code> vom Typ <em>string<\/em><\/li>\n<\/ul>\n\n\n\n<p>Code:<\/p>\n\n\n\n<p>! Visibility<\/p>\n\n\n\n<p><code>pos = 0;<br>posStart = 'visibility\":';<br>posEnd = ',\"is_day';<br>posValueStart = stdout.Find(posStart) + posStart.Length();<br>posValueEnd = stdout.Find(posEnd)-posValueStart;<br>string vis_daten = stdout.Substr(posValueStart, posValueEnd);<br>WriteLine(\"vis_Daten\");WriteLine(vis_daten);<br>dom.GetObject(\"W_vis\").State(vis_daten);<\/code><br><br><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Luftdruck_und_Tendenz\"><\/span>Luftdruck und Tendenz<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Zus\u00e4tzlich zum zur Verf\u00fcgung gestellten Luftdruck wird in diesem Skript die Luftdruck-Tendenz ermittelt, indem ein Messwert als &#8222;aktuell&#8220;, ein vorangehender als &#8222;alt&#8220; gespeichert wird. Beide werden mit einander verglichen, woraus sich die Tendenz ergibt.<\/p>\n\n\n\n<p>Anzulegende Variable:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>W_Luftdruck_akt<\/code> vom Typ <em>string<\/em><\/li>\n\n\n\n<li><code>W_Luftdruck_alt<\/code> vom Typ <em>string<\/em><\/li>\n\n\n\n<li><code>W_Luftdrucktrend<\/code> vom Typ <em>string<\/em><\/li>\n<\/ul>\n\n\n\n<p>Code:<\/p>\n\n\n\n<p>! Druck<\/p>\n\n\n\n<p><code>var W_mb_alt;<br>var W_mb_akt;<br>pos = 0;<br>posStart = 'pressure\":';<br>posEnd = ',\"precip';<br>posValueStart = stdout.Find(posStart) + posStart.Length();<br>posValueEnd = stdout.Find(posEnd)-posValueStart;<br>daten = stdout.Substr(posValueStart, posValueEnd);WriteLine(daten);<br>real W_mb_akt = daten.ToInteger();WriteLine(\"W_mb_akt\");WriteLine(W_mb_akt);<br>dom.GetObject(\"W_Luftdruck_akt\").State(W_mb_akt);<br>W_mb_alt = dom.GetObject(\"W_Luftdruck_alt\").Value();WriteLine(W_mb_alt);<\/code><\/p>\n\n\n\n<p><code>if (W_mb_akt &gt; W_mb_alt)<br>{<br>dom.GetObject(\"W_Luftdruck_alt\").State(W_mb_akt);<br>dom.GetObject(\"W_Luftdrucktrend\").State(\"S\");<br>}<\/code><\/p>\n\n\n\n<p><code>if (W_mb_akt &lt; W_mb_alt)<br>{<br>dom.GetObject(\"W_Luftdruck_alt\").State(W_mb_akt);<br>dom.GetObject(\"W_Luftdrucktrend\").State(\"F\");<br>}<\/code><\/p>\n\n\n\n<p><code>if (W_mb_akt == W_mb_alt)<br>{<br>dom.GetObject(\"W_Luftdruck_alt\").State(W_mb_akt);<br>dom.GetObject(\"W_Luftdrucktrend\").State(\"N\");<br>}<\/code><br><br><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Chill_Temperatur\"><\/span>Chill Temperatur<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Der Wind-Chill ist abh\u00e4ngig von der Windgeschwindigkeit und der Temperatur. Im Wassersport kommt noch der Effekt der Verdunstungsk\u00e4lte durch Gischt verst\u00e4rkend hinzu (der hier aber keine Ber\u00fccksichtigung findet). Chill bezeichnet die empfundene Temperatur, die in sehr kalter Umgebung bis zur eineinhalbfachen negativen Temperatur im Vergleich zur tats\u00e4chlichen reichen und zu schnell auftretenden Erfrierungen f\u00fchren kann.<\/p>\n\n\n\n<p>Anzulegende Variable:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>W_chill<\/code> vom Typ <em>string<\/em><\/li>\n<\/ul>\n\n\n\n<p>Code:<\/p>\n\n\n\n<p>! Chill<\/p>\n\n\n\n<p><code>pos = 0;<br>posStart = 'feelslike\":';<br>posEnd = ',\"uv_index';<br>posValueStart = stdout.Find(posStart) + posStart.Length();<br>posValueEnd = stdout.Find(posEnd)-posValueStart;<br>string app_temp_daten = stdout.Substr(posValueStart, posValueEnd);<br>WriteLine(\"app_temp_Daten\");WriteLine(app_temp_daten);<br>dom.GetObject(\"W_chill\").State(app_temp_daten);<\/code><br><br><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"UV_und_Lichtschutz-Empfehlung\"><\/span>UV und Lichtschutz-Empfehlung<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Die auf Basis des UV-Indexes ermittelte UV-Belastung resultiert in einer Empfehlung einer ggf. notwendigen Anwendung von Lichtschutzma\u00dfnahmen.<\/p>\n\n\n\n<p>Anzulegende Variable:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>W_UV<\/code> vom Typ <em>string<\/em><\/li>\n\n\n\n<li><code>W_LSF<\/code> vom Typ <em>string<\/em><\/li>\n<\/ul>\n\n\n\n<p>Code:<\/p>\n\n\n\n<p>! UV<\/p>\n\n\n\n<p><code>pos = 0;<br>posStart = 'uv_index\":';<br>posEnd = ',\"visibility';<br>posValueStart = stdout.Find(posStart) + posStart.Length();<br>posValueEnd = stdout.Find(posEnd)-posValueStart;<br>var uv_daten = stdout.Substr(posValueStart, posValueEnd);<br>dom.GetObject(\"W_UV\").State(uv_daten);<br>daten = uv_daten.Substr(0, (word_position -2));<br>real zahl = daten.ToInteger();<br>WriteLine(\"UV zahl\");WriteLine(zahl);<\/code><\/p>\n\n\n\n<p><code>string LSF = \"\";<br>if (zahl &lt;3) {LSF = \"unn\u00f6tig\" ;} elseif ((zahl &gt;= \"3\") &amp;&amp; (zahl &lt;= \"5\")) {LSF = \"empfohlen\" ;} elseif ((zahl &gt;= \"6\") &amp;&amp; (zahl &lt;= \"7\")) {LSF = \"erforderlich\" ;} elseif ((zahl &gt;= \"8\") &amp;&amp; (zahl &lt;= \"9\")) {LSF = \"unbedingt\" ;} elseif (zahl &gt;= \"10\") {LSF = \"MUSS\" ;}<br>dom.GetObject(\"W_LSF\").State(LSF);WriteLine(\"LSF\");WriteLine(LSF);<\/code><br><br><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Windgeschwindigkeit\"><\/span>Windgeschwindigkeit<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Anzulegende Variable:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>W_WdSpd<\/code> vom Typ <em>zahl<\/em><\/li>\n<\/ul>\n\n\n\n<p>Code:<\/p>\n\n\n\n<p>! Windgeschwindigkeit<\/p>\n\n\n\n<p><code>pos = 0;<br>posStart = 'wind_speed\":';<br>posEnd = ',\"wind_degree';<br>posValueStart = stdout.Find(posStart) + posStart.Length();<br>posValueEnd = stdout.Find(posEnd)-posValueStart;<br>var wind_spd_daten = stdout.Substr(posValueStart, posValueEnd);<br>real x = wind_spd_daten.ToFloat();<br>dom.GetObject(\"W_WdSpd\").State(x);<\/code><br><br><\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Windgeschwindigkeit_%E2%80%93_Umrechnungen\"><\/span>Windgeschwindigkeit &#8211; Umrechnungen<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>Da es in unterschiedlichen Regionen , L\u00e4ndern und Awendungsf\u00e4llen verschiedene bevorzugte Windgeschwindigkeits-Ma\u00dfe gibt, hier die Umrechnung von m\/s in km\/h, Knoten und Beaufort.<\/p>\n\n\n\n<p>Anzulegende Variable:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>W_Wind_kmh<\/code> vom Typ <em>zahl<\/em><\/li>\n\n\n\n<li><code>W_Wind_knh<\/code> vom Typ <em>zahl<\/em><\/li>\n\n\n\n<li>W_Wind_Bft vom Typ <em>zahl<\/em><\/li>\n<\/ul>\n\n\n\n<p>Code:<\/p>\n\n\n\n<p><code>real W_Wind_kmh = (wind_spd_daten.ToFloat() * 3.6);WriteLine(\"W_Wind_kmh\");WriteLine(W_Wind_kmh);<br>dom.GetObject(\"W_Wind_kmh\").State(W_Wind_kmh);<\/code><\/p>\n\n\n\n<p><code><br>real W_Wind_knh = (W_Wind_kmh \/ 1.852);WriteLine(\"W_Wind_knh\");WriteLine(W_Wind_knh);<br>dom.GetObject(\"W_Wind_knh\").State(W_Wind_knh);<\/code><br><\/p>\n\n\n\n<p>if (x &lt; 0.30)<br>{<br>dom.GetObject(&#8222;W_Wind_Bft&#8220;).State(0);<br>}<br>if ((0.29 &lt; x) &amp;&amp; (x &lt; 1.51))<br>{<br>dom.GetObject(&#8222;W_Wind_Bft&#8220;).State(1);<br>} <br>if ((1.59 &lt; x) &amp;&amp; ( x &lt; 3.31))<br>{<br>dom.GetObject(&#8222;W_Wind_Bft&#8220;).State(2);<br>}<br>if ((3.39 &lt; x) &amp;&amp; ( x &lt; 5.41))<br>{ <br>dom.GetObject(&#8222;W_Wind_Bft&#8220;).State(3);<br>}<br>if ((5.49 &lt; x) &amp;&amp; ( x &lt; 7.91))<br>{<br>dom.GetObject(&#8222;W_Wind_Bft&#8220;).State(4);<br>}<br>if ((7.99 &lt; x) &amp;&amp; (x &lt; 10.71))<br>{<br>dom.GetObject(&#8222;W_Wind_Bft&#8220;).State(5);<br>}<br>if ((10.79 &lt; x) &amp;&amp; (x &lt; 13.81))<br>{<br>dom.GetObject(&#8222;W_Wind_Bft&#8220;).State(6);<br>}<br>if ((12.89 &lt; x) &amp;&amp; (x &lt; 17.11))<br>{<br>dom.GetObject(&#8222;W_Wind_Bft&#8220;).State(7);<br>}<br>if ((17.19 &lt; x) &amp;&amp; (x &lt; 20.71))<br>{<br>dom.GetObject(&#8222;W_Wind_Bft&#8220;).State(8);<br>}<br>if ((20.79 &lt; x) &amp;&amp; (x &lt; 24.41))<br>{<br>dom.GetObject(&#8222;W_Wind_Bft&#8220;).State(9);<br>}<br>if ((24.49 &lt; x) &amp;&amp; (x &lt; 28.41))<br>{<br>dom.GetObject(&#8222;W_Wind_Bft&#8220;).State(10);<br>}<br>if ((28.49 &lt; x) &amp;&amp; (x &lt; 32.61))<br>{<br>dom.GetObject(&#8222;W_Wind_Bft&#8220;).State(11); <br>}<br>if (x &gt; 32.6)<br>{<br>dom.GetObject(&#8222;W_Wind_Bft&#8220;).State(12);<br>}<\/p>\n\n\n\n<p><\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Windgeschwindigkeit_%E2%80%93_Gefahr_von_Erfrierungen\"><\/span>Windgeschwindigkeit &#8211; Gefahr von Erfrierungen<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>Wer in sehr kalten Zonen unterwegs ist, erh\u00e4lt mit diesem Script eine Warnung, falls auf Grund von Windgeschwindigkeit und gef\u00fchlter Au\u00dfentemperatur das Risiko von Erfrierungserscheungen gibt, sofern keine entsprechende Schutzkleidung genutzt wird.<\/p>\n\n\n\n<p>Es wird bei der Berechnung davon ausgegangen, dass bei einer Haut-Exposition von 30 Minuten oder weniger von einem Absinken der Hauttemperatur auf -4,8 \u00b0C auszugehen ist und damit bei 5% der Menschen Erfrierungen auftreten.<\/p>\n\n\n\n<p>Anzulegende Variable:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>W_Wind_Gefahr vom Typ <em>boolean<\/em><\/li>\n<\/ul>\n\n\n\n<p>Code:<\/p>\n\n\n\n<p><code>if (((app_temp_daten == -27.2) &amp;&amp; (8 &gt; W_Wind_kmh &lt;10.1)) || ((app_temp_daten == -22.9) &amp;&amp; (12 &gt; W_Wind_kmh &lt;15.1)) || ((app_temp_daten == -24.2) &amp;&amp; (18 &gt; W_Wind_kmh &lt;20.1)) || ((app_temp_daten == -25.2) &amp;&amp; (23 &gt; W_Wind_kmh &lt;25.1)) || ((app_temp_daten == -26.0) &amp;&amp; (28 &gt; W_Wind_kmh &lt;30.1)) || ((app_temp_daten == -26.8) &amp;&amp; (32 &gt; W_Wind_kmh &lt;35.1)) || ((app_temp_daten == -27.4) &amp;&amp; (37 &gt; W_Wind_kmh &lt;40.1)) || ((app_temp_daten == -28.0) &amp;&amp; (42 &gt; W_Wind_kmh &lt;45.1)) || ((app_temp_daten == -28.6) &amp;&amp; (47 &gt; W_Wind_kmh &lt;50.1)) || ((app_temp_daten == -22.2) &amp;&amp; (53 &gt; W_Wind_kmh &lt;55.1)) || ((app_temp_daten == -22.6) &amp;&amp; (57 &gt; W_Wind_kmh &lt;60.1)))<br>{<br>dom.GetObject(\"W_Wind_Gefahr\").State(true);<br>}<br>else<br>{<br>dom.GetObject(\"W_Wind_Gefahr\").State(false);<br>}<\/code><br><br><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Windrichtung_geografisch\"><\/span>Windrichtung (geografisch)<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Anzulegende Variable:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>W_wind_dir<\/code> vom Typ <em>string<\/em><\/li>\n<\/ul>\n\n\n\n<p>Code:<\/p>\n\n\n\n<p>! Windrichtung geografisch<\/p>\n\n\n\n<p><code>pos = 0;<br>posStart = 'wind_dir\":\"';<br>posEnd = '\",\"pressure';<br>posValueStart = stdout.Find(posStart) + posStart.Length();<br>posValueEnd = stdout.Find(posEnd)-posValueStart;<br>string wind_dir_daten = stdout.Substr(posValueStart, posValueEnd);<br>WriteLine(\"W_wind_dir\");WriteLine(wind_dir_daten);<br>dom.GetObject(\"W_wind_dir\").State(wind_dir_daten);<\/code><br><br><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Windrichtung_numerisch\"><\/span>Windrichtung (numerisch)<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p> Anzulegende Variable:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>W_Wind_rchtg<\/code> vom Typ <em>string<\/em><\/li>\n<\/ul>\n\n\n\n<p>Code:<\/p>\n\n\n\n<p>! Windrichtung numerisch<\/p>\n\n\n\n<p><code>pos = 0;<br>posStart = 'wind_degree\":';<br>posEnd = ',\"wind_dir';<br>posValueStart = stdout.Find(posStart) + posStart.Length();<br>posValueEnd = stdout.Find(posEnd)-posValueStart;<br>string W_wind_rchtg = stdout.Substr(posValueStart, posValueEnd);<br>WriteLine(\"W_wind_rchtg\");WriteLine(W_wind_rchtg);<br>dom.GetObject(\"W_wind_rchtg\").State(W_wind_rchtg);<\/code><br><br><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Bewolkung\"><\/span>Bew\u00f6lkung<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Die Bew\u00f6lkung wird seitens Weatherstack ebenfalls in Englisch verfasst, weshalb hier die \u00dcbersetzung ins Deutsche vorgenommen wird.<\/p>\n\n\n\n<p>Anzulegende Variable:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>W_description<\/code> vom Typ <em>string<\/em><\/li>\n<\/ul>\n\n\n\n<p>Code:<\/p>\n\n\n\n<p>! Bew\u00f6lkung Beschreibung<\/p>\n\n\n\n<p><code>pos = 0;<br>posStart = 'weather_descriptions\":[\"';<br>posEnd = '\"],\"wind_speed';<br>posValueStart = stdout.Find(posStart) + posStart.Length();<br>posValueEnd = stdout.Find(posEnd)-posValueStart;<br>string clouds_description = stdout.Substr(posValueStart, posValueEnd);<br>WriteLine(\"clouds_description_EN\");WriteLine(clouds_description);<\/code><\/p>\n\n\n\n<p><code>if (clouds_description == \"Cloudy\")<br>{<br>string clouds_description_DE = \"Bew\u00f6lkt\";<br>WriteLine(\"clouds_description_DE\");WriteLine(clouds_description_DE);<br>dom.GetObject(\"W_description\").State(clouds_description_DE);<br>}<br>if (clouds_description == \"Light rain\")<br>{<br>string clouds_description_DE = \"Leichter Regen\";<br>WriteLine(\"clouds_description_DE\");WriteLine(clouds_description_DE);<br>dom.GetObject(\"W_description\").State(clouds_description_DE);<br>}<br>if (clouds_description == \"Light rain shower\")<br>{<br>string clouds_description_DE = \"Leichte Regenschauer\";<br>WriteLine(\"clouds_description_DE\");WriteLine(clouds_description_DE);<br>dom.GetObject(\"W_description\").State(clouds_description_DE);<br>}<br>if (clouds_description == \"Light drizzle\")<br>{<br>string clouds_description_DE = \"Nieselregen\";<br>WriteLine(\"clouds_description_DE\");WriteLine(clouds_description_DE);<br>dom.GetObject(\"W_description\").State(clouds_description_DE);<br>}<br>if (clouds_description == \"Mis\")<br>{<br>string clouds_description_DE = \"Dunst\";<br>WriteLine(\"clouds_description_DE\");WriteLine(clouds_description_DE);<br>dom.GetObject(\"W_description\").State(clouds_description_DE);<br>}<br>if (clouds_description == \"Light snow showers\")<br>{<br>string clouds_description_DE = \"Leichte Schneeschauer\";<br>WriteLine(\"clouds_description_DE\");WriteLine(clouds_description_DE);<br>dom.GetObject(\"W_description\").State(clouds_description_DE);<br>}<br>if (clouds_description == \"Sunny\")<br>{<br>string clouds_description_DE = \"Heiter\";<br>WriteLine(\"clouds_description_DE\");WriteLine(clouds_description_DE);<br>dom.GetObject(\"W_description\").State(clouds_description_DE);<br>}<br>if (clouds_description == \"Overcast\")<br>{<br>string clouds_description_DE = \"Bedeckt\";<br>WriteLine(\"clouds_description\");WriteLine(clouds_description_DE);<br>dom.GetObject(\"W_description\").State(clouds_description_DE);<br>}<br>if (clouds_description == \"Partly cloudy\")<br>{<br>string clouds_description_DE = \"Teilweise bew\u00f6lkt\";<br>WriteLine(\"clouds_description_DE\");WriteLine(clouds_description_DE);<br>dom.GetObject(\"W_description\").State(clouds_description_DE);<br>}<br>if (clouds_description == \"Clear\")<br>{<br>string clouds_description_DE = \"Klar\";<br>WriteLine(\"clouds_description_DE\");WriteLine(clouds_description_DE);<br>dom.GetObject(\"W_description\").State(clouds_description_DE);<br>}<br>if (clouds_description == \"Fog\")<br>{<br>string clouds_description_DE = \"Nebel\";<br>WriteLine(\"clouds_description_DE\");WriteLine(clouds_description_DE);<br>dom.GetObject(\"W_description\").State(clouds_description_DE);<br>}<br>if (clouds_description == \"Patchy rain possible\")<br>{<br>string clouds_description_DE = \"Leichter Regen m\u00f6glich\";<br>WriteLine(\"clouds_description\");WriteLine(clouds_description_DE);<br>dom.GetObject(\"W_description\").State(clouds_description_DE);<br>}<br>if (clouds_description == \"Moderate rain\")<br>{<br>string clouds_description_DE = \"M\u00e4\u00dfiger Niederschlag\";<br>WriteLine(\"clouds_description\");WriteLine(clouds_description_DE);<br>dom.GetObject(\"W_description\").State(clouds_description_DE);<br>}<\/code><br><br><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Wolkenbedeckung\"><\/span>Wolkenbedeckung<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Anzulegende Variable:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>W_clouds<\/code> vom Typ <em>string<\/em><\/li>\n<\/ul>\n\n\n\n<p>Code:<\/p>\n\n\n\n<p>! Wolkenbedeckung<\/p>\n\n\n\n<p><code>pos = 0;<br>posStart = 'cloudcover\":';<br>posEnd = ',\"feelslike';<br>posValueStart = stdout.Find(posStart) + posStart.Length();<br>posValueEnd = stdout.Find(posEnd)-posValueStart;<br>string clouds_daten = stdout.Substr(posValueStart, posValueEnd);<br>WriteLine(\"clouds_Daten\");WriteLine(clouds_daten);<br>dom.GetObject(\"W_clouds\").State(clouds_daten);<\/code><br><br><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Vorhersage_Regen\"><\/span>Vorhersage Regen<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Anzulegende Variable:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>W_Niederschlag<\/code> vom Typ <em>string<\/em><\/li>\n<\/ul>\n\n\n\n<p>Code:<\/p>\n\n\n\n<p>! Vorhersage Regen<\/p>\n\n\n\n<p><code>var x;<br>pos = 0;<br>posStart = 'precip\":';<br>posEnd = ',\"humidity';<br>posValueStart = stdout.Find(posStart) + posStart.Length();<br>posValueEnd = stdout.Find(posEnd)-posValueStart;<br>string precip = stdout.Substr(posValueStart, posValueEnd);<br>WriteLine(\"Niederschlag\");WriteLine(precip);<br>dom.GetObject(\"W_Niederschlag\").State(precip);<\/code><br><br><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Elevation_%E2%80%93_Azimut\"><\/span>Elevation &#8211; Azimut<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Das Skript wurde von <em>funkleuchtturm<\/em> verfasst und dem <a href=\"https:\/\/homematic-forum.de\/forum\/viewtopic.php?f=31&amp;t=17300&amp;start=90\" target=\"_blank\" rel=\"noreferrer noopener\">Homematic Forum <\/a>auf Seite 10 des verlinkten Threads entnommen.<\/p>\n\n\n\n<p>Es sind zwei Systemvariablen anzulegen:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>sonne_elevatio<em>n<\/em><\/code> vom Typ <em>Zahl<\/em><\/li>\n\n\n\n<li><code>sonne_azimut<\/code> vom Typ <em>Zahl<\/em><\/li>\n<\/ul>\n\n\n\n<p>Warum gerade 4 Minuten? Weil die Erde ihren 360\u00b0 Kreis um die Sonne einmal in 24 Stunden vollzieht. 360\u00b0 \/ 24h = 15\u00b0 in der Stunde, entsprechend 60 Minuten \/ 15\u00b0 = 4 Minuten.<\/p>\n\n\n\n<p>Das Skript sollte unabh\u00e4ngig vorstehender Skripte, bzw. des zugeh\u00f6rigen Programms genutzt werden, sofern das Aktualisierungs-Intervall abweichend von 4 Minuten ist.<\/p>\n\n\n\n<p>Programm:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img decoding=\"async\" width=\"1024\" height=\"233\" src=\"https:\/\/csiag.eu\/wp-content\/uploads\/2023\/01\/image-6-1024x233.png\" alt=\"\" class=\"wp-image-3167\" srcset=\"https:\/\/csiag.eu\/wp-content\/uploads\/2023\/01\/image-6-1024x233.png 1024w, https:\/\/csiag.eu\/wp-content\/uploads\/2023\/01\/image-6-300x68.png 300w, https:\/\/csiag.eu\/wp-content\/uploads\/2023\/01\/image-6-768x174.png 768w, https:\/\/csiag.eu\/wp-content\/uploads\/2023\/01\/image-6-1536x349.png 1536w, https:\/\/csiag.eu\/wp-content\/uploads\/2023\/01\/image-6-2048x465.png 2048w, https:\/\/csiag.eu\/wp-content\/uploads\/2023\/01\/image-6-1560x354.png 1560w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Programm &#8211; Elevation- \/ Azimut-Bestimmung<\/figcaption><\/figure>\n<\/div>\n\n\n<p>Anzulegende Variablen:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>sonne_azimut<\/code> vom typ <em>zahl<\/em><\/li>\n\n\n\n<li><code>sonne_elevation<\/code> vom Typ <em>zahl<\/em><\/li>\n<\/ul>\n\n\n\n<p>Code:<br><br>! Breitengrad holen<br><code>real phi = system.Latitude();<br>phi = 0.017453292 * phi;<\/code><br><br>! Umwandlung in Bogenmass<br>! sin_phi und cos_phi mit taylorreihe berechnen<br><code>real temp = phi * phi;<br>real sin_phi =phi * ((temp * temp * 0.0083334) +1.0 - (temp * 0.1666667));<\/code><br><br>! sinus-Naeherung<code><br>real cos_phi = (temp *temp *0.0416667) + 1.0 - (temp * 0.5);<\/code><br><br>! cosinus-Naeherung<br>! Berechnung Sonnenzeit, alle Zeiten in Minuten<br><code>integer zeit_min = system.Date(\"%M\").ToInteger() + 60<em>system.Date(\"%H\").ToInteger(); integer tagesbeginn_min = system.SunriseTime(\"%M\").ToInteger() + 60<\/em>system.SunriseTime(\"%H\").ToInteger();<br>integer tagesende_min = system.SunsetTime(\"%M\").ToInteger() + 60* system.SunsetTime(\"%H\").ToInteger();<br>integer sonnenzeit =zeit_min + 720 - 0.5 *(tagesbeginn_min +tagesende_min);<br>if (sonnenzeit &gt; 1440) {sonnenzeit = sonnenzeit -1440;}<br>if (sonnenzeit &lt; 1) {sonnenzeit = 1440 + sonnenzeit;} boolean nachmittag =false; if (sonnenzeit &gt; 720) {sonnenzeit =sonnenzeit - 720; nachmittag = true; }<br>else {sonnenzeit =720 -sonnenzeit;}<\/code><br><code><br><\/code>! Berechnung sin_tau und cos_tau<br><code>real tau = 0.00436332313 * sonnenzeit; ! 15\/60 * pi \/180 * sonnenzeit [0 &lt; tau &lt; pi ] if (tau &lt; 1.570796327) {temp = tau * tau; real sin_tau =tau * ((temp * temp * 0.0083334) +1.0 - (temp *0.1666667)); tau= 1.570796327 - tau; temp = tau * tau; real cos_tau =tau * ((temp * temp * 0.0083334) +1.0 - (temp * 0.1666667));} else {real tau1 =3.141592654 - tau; temp = tau1 * tau1; real sin_tau =tau1 * ((temp * temp * 0.0083334) +1.0 - (temp * 0.1666667)); tau = tau - 1.570796327; temp = tau * tau; real cos_tau = (tau) <em>(-1.0)<\/em> ((temp * temp * 0.0083334) +1.0 - (temp * 0.1666667));}<\/code><br><br>! Berechnung delta<br><code>integer tageszahl = system.Date(\"%j\").ToInteger(); tageszahl = tageszahl +10; if (tageszahl &gt; 365) {tageszahl = tageszahl - 365;}<br>if (tageszahl &lt; 92) {real tag = 0.0172142 *tageszahl;temp = tag * tag; real delta = (-0.410152) *((temp *temp *0.041666) + 1.0 - (temp * 0.5));} if ((tageszahl &gt;91) &amp;&amp; (tageszahl &lt; 184)) {tageszahl = 183 - tageszahl; real tag = 0.0172142 *tageszahl; temp = tag * tag; real delta = (0.410152) *((temp *temp *0.041666) + 1.0 - (temp * 0.5));} if ((tageszahl &gt;183) &amp;&amp; (tageszahl &lt; 275)) {tageszahl = tageszahl - 183; real tag = 0.0172142 *tageszahl; temp = tag * tag; real delta = (0.410152) *((temp *temp *0.041666) + 1.0 - (temp * 0.5));} if ((tageszahl &gt;274) &amp;&amp; (tageszahl &lt; 366)) {tageszahl = 365 - tageszahl; real tag = 0.0172142 *tageszahl; temp = tag * tag; real delta = (-0.410152) *((temp *temp *0.041666) + 1.0 - (temp * 0.5));}<\/code><br><code>! berechnung sin_delta, cos_delta<\/code><br><code>temp = delta * delta; real sin_delta =delta * ((temp * temp * 0.0083334) +1.0 - (temp * 0.1666667)); !sinus-naeherung real cos_delta = (temp *temp *0.0416667) + 1.0 - (temp * 0.5);<\/code><br><br>! cosinus-Naeherung<br>! Berechnung tan_delta mit stueckweiser Linearisierung des tan<br><code>boolean vvorzeichen = true; if (delta&lt; 0.0) {vvorzeichen = false; delta = (-1.0) *delta;} real tan_delta = 1.0233 * delta; if (delta &gt;=0.2618) {tan_delta = (1.1822*delta) - 0.0416;}<br>if (vvorzeichen == false) {tan_delta = (-1.0) * tan_delta;}<\/code><br><code><br><\/code>! Berechnung sin_elevation und tan_azimut<br><code>real sin_elevation = (sin_phi * sin_delta) +( cos_phi * cos_delta * cos_tau);<br>temp = sin_elevation * sin_elevation;<br>real sonne_elevation = sin_elevation * (1.0 + (0.1666667 * temp) + (0.075 * temp * temp));<br>sonne_elevation = 57.29577951 * sonne_elevation;<br>real nenner = (sin_phi*cos_tau) - (cos_phi * tan_delta);<br>if (nenner &lt; 0.0) {boolean plus180 = true;} real tan_azimut = sin_tau \/ nenner;<\/code><br><br>! Berechnung sonne_azimut mit stueckweiser Linearisierung des arctan<br><code>boolean vorzeichen = true; if (tan_azimut &lt; 0.0) {vorzeichen = false; tan_azimut = (-1.0)*tan_azimut;} real sonne_azimut = 0.97723 * tan_azimut; if ((tan_azimut &gt;=0.2679)&amp;&amp;(tan_azimut &lt; 0.5774)) {sonne_azimut = (0.84588* tan_azimut) + 0.035189;} if ((tan_azimut &gt;= 0.5774)&amp;&amp;(tan_azimut &lt; 1.0)) {sonne_azimut = (0.6195* tan_azimut) + 0.1659;} if ((tan_azimut &gt;= 1.0)&amp;&amp;(tan_azimut &lt; 1.3032)) {sonne_azimut = (0.43173* tan_azimut) + 0.3537;} if ((tan_azimut &gt;= 1.3032)&amp;&amp;(tan_azimut &lt; 1.7321)) {sonne_azimut = (0.3052* tan_azimut) + 0.51856;} if ((tan_azimut &gt;= 1.7321)&amp;&amp;(tan_azimut &lt; 2.4142)) {sonne_azimut = (0.1919* tan_azimut) + 0.7148;} if ((tan_azimut &gt;= 2.4142)&amp;&amp;(tan_azimut &lt; 2.9459)) {sonne_azimut = (0.123* tan_azimut) + 0.88115;} if ((tan_azimut &gt;= 2.9459)&amp;&amp;(tan_azimut &lt; 3.7321)) {sonne_azimut = (0.083312* tan_azimut) + 0.9981;} if ((tan_azimut &gt;= 3.7321)&amp;&amp;(tan_azimut &lt; 5.0)) {sonne_azimut = (0.050792* tan_azimut) + 1.1194;} if ((tan_azimut &gt;= 5.0)&amp;&amp;(tan_azimut &lt;7.0)) {sonne_azimut = (0.02775* tan_azimut) + 1.23465;} if ((tan_azimut &gt;= 7.0)&amp;&amp;(tan_azimut &lt;12.0)) {sonne_azimut = (0.01175117* tan_azimut) + 1.346641;} if ((tan_azimut &gt;= 12.0)&amp;&amp;(tan_azimut &lt;20.0)) {sonne_azimut = (0.004147854* tan_azimut) + 1.437881;} if ((tan_azimut &gt;= 20.0)&amp;&amp;(tan_azimut &lt;50.0)) {sonne_azimut = (0.0009987* tan_azimut) + 1.5008639;} if (tan_azimut &gt;= 50.0) {sonne_azimut = (0.000099983* tan_azimut) + 1.54579974;}<br>if (sonne_azimut&gt; 1.5707963278) {sonne_azimut = 1.5707963278;}<br>if (vorzeichen == false) {sonne_azimut = (-1.0) * sonne_azimut;}<br>sonne_azimut = 57.29577951 * sonne_azimut;<br>if (plus180 == true) {sonne_azimut = sonne_azimut + 180.0;}<\/code><br><code><br><\/code>! Tageszeitliche Korrektur und Werte auf Systemvariablen speichern<br><code>if (nachmittag == false)<br>{sonne_azimut = 180.0 - sonne_azimut; sonnenzeit = 720 - sonnenzeit;}<br>else<br>{sonne_azimut = sonne_azimut + 180.0;sonnenzeit = 720 + sonnenzeit;}<br>sonne_azimut = 0.1 <em>((sonne_azimut<\/em>10.0) .ToInteger());<br>sonne_elevation = 0.1 <em>((sonne_elevation<\/em>10.0) .ToInteger());<br>dom.GetObject(\"sonne_elevation\").State(sonne_elevation);<br>dom.GetObject(\"sonne_azimut\").State(sonne_azimut);<\/code><\/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\u00e6setid<\/span> <span class=\"rt-time\"> 9<\/span> <span class=\"rt-label rt-postfix\">minutter<\/span><\/span>Wetterdaten mit SmartHome erfassen und via AIO Creator auf dem Handy oder Tablet zu visualisieren ist zwar i.d.R. keine Notwendigkeit, aber ein nice to have. Der Online Wetterdienst weatherstack.com bietet hierf\u00fcr &#8211; begrenzt kostenfrei &#8211; bis zu 250 Abfragen monatlich an. Wer wirklich aktuelle Wetterdaten haben m\u00f6chte, sollte das Standard-Paket w\u00e4hlen. 50.000 Abfragen erm\u00f6glichen Minuten-Intervalle.&hellip;&nbsp;<a href=\"https:\/\/csiag.eu\/da\/blog\/2023\/01\/16\/wetterdaten-smarthome\/\" rel=\"bookmark\">L\u00e6s mere \"<span class=\"screen-reader-text\">SmartHome vejrdata<\/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":[346,857],"tags":[861,883,793,888,890,887,885,877,878,864,879,374,884,422,889,893,900,865,868,863,896,892,870,897,749,469,872,899,866,372,876,867,783,882,370,891,898,894,871,881,880,895,541,862,860,873,858,859,874,875,886,869],"class_list":["post-3145","post","type-post","status-publish","format-standard","hentry","category-smarthome","category-wetter","tag-abfragen","tag-abonnement","tag-aio-creator","tag-api","tag-azimut","tag-beispiele","tag-beschreibung","tag-bewoelkung","tag-bewoelkungsdichte","tag-breite","tag-chill","tag-code","tag-datenkategorie","tag-datum","tag-elevation","tag-empfehlung","tag-erfrierungen","tag-geografische","tag-land","tag-laenge","tag-latitude","tag-lichtschutz-faktor","tag-lokalzeit","tag-longitude","tag-luftdruck","tag-luftfeuchte","tag-lufttemperatur","tag-messwert","tag-ort","tag-programm","tag-regenmenge","tag-region","tag-registrierung","tag-sicht","tag-smarthome","tag-sonne","tag-tendenz","tag-umrechnung","tag-utc-offset","tag-uv","tag-uv-index","tag-variable","tag-visualisierung","tag-vorhersage","tag-wetherstack-com","tag-wetterbeschreibung","tag-wetterdaten","tag-wetterdienst","tag-windgeschwindigkeit","tag-windrichtung","tag-xml","tag-zeitzone"],"modified_by":"Achim Goerner","_links":{"self":[{"href":"https:\/\/csiag.eu\/da\/wp-json\/wp\/v2\/posts\/3145","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/csiag.eu\/da\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/csiag.eu\/da\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/csiag.eu\/da\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/csiag.eu\/da\/wp-json\/wp\/v2\/comments?post=3145"}],"version-history":[{"count":0,"href":"https:\/\/csiag.eu\/da\/wp-json\/wp\/v2\/posts\/3145\/revisions"}],"wp:attachment":[{"href":"https:\/\/csiag.eu\/da\/wp-json\/wp\/v2\/media?parent=3145"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/csiag.eu\/da\/wp-json\/wp\/v2\/categories?post=3145"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/csiag.eu\/da\/wp-json\/wp\/v2\/tags?post=3145"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}