Dieses Blog durchsuchen

Ortsradioaktivität mit Homematic

Mein Interesse an Strahlungsmessung im allgemeinen und das Interesse am Eingenbau von Messgeräten lässt mich oft, vorallem bei langweiligem Fernsehprogramm, im Web recherchieren. Auf der Suche nach dem Begriff Geigerzähler findet man ja unheimlich viele Ergebnisse. Nach einer Unterhaltung mit einem Kollegen, wie es zu Zeiten von Tschernobyl hier mit der Strahlungsbelastung aussah, suchte ich auch nach einer Karte mit der aktuellen Strahlungsverteilung in Österreich und wurde auch fündig. Es gibt ein ganzes Netzwerk an Messgeräten in ganz Östrreich verteilt, das stündlich die Radioaktivität misst und aufzeichnet. Über diese Website kann man sich anhand einer Karte mit unterschiedlich (entspechend der Intensität der Strahlung) eingefärbten Punkten informieren. Klickt man einen Messpunkt an, so erhält man die Detailwerte der Messungen angegeben in nSievert/h dargestellt als Diagramm oder auch in Tabellenform. Die Website nennt sich: http://sfws.lfrz.at.

Toll dachte ich beim Betrachten der Messdaten. Noch toller wäre es, selber so eine Meßstation aufzubauen und in mein bestehendes Homematic-System mit aufzunehmen. Oder für´s erste könnte man ja versuchen, die Daten der Website in die Homematic zu integrieren. ... und dann beispielsweise bei bei Überschreitung eines Messwertes eine Nachricht oder einen Alarm zu generieren.
Also habe ich mir die Website genauer angesehen und die java- und php-scripten analystiert, die hier aufgerufen werden. Schlussendlich lässt sich über die Seite http://sfws.lfrz.at/json.php ein gutes Interface erreichen, dass mit den entsprechenden Commandos bedienen kann. Für meinen Fall hole ich mit http://sfws.lfrz.at/json.php?command=getstationdata&stationcode=AT0408&a=&b= die Messdaten für eine nahe Meßstation ab.

Der webresponse sieht dann inetwa so aus:
{"v":[{"d":1457276400,"v":90.1,"c":32768}, {"d":1457272800,"v":88.9,"c":32771}, {"d":1457269200,"v":85.8,"c":32781}, {"d":1457265600,"v":83.1,"c":32790}, {"d":1457262000,"v":83.7,"c":32788}, {"d":1457258400,"v":86.6,"c":32778}, {"d":1457254800,"v":88.2,"c":32773}, {"d":1457251200,"v":83.1,"c":32790}, {"d":1457247600,"v":84.2,"c":32786}, {"d":1457244000,"v":85.1,"c":32783}, {"d":1457240400,"v":89.7,"c":32768}, {"d":1457236800,"v":99.1,"c":38656}, {"d":1457233200,"v":101,"c":39680}, {"d":1457229600,"v":90.8,"c":33280}, {"d":1457226000,"v":92,"c":34048}, {"d":1457222400,"v":112,"c":46848}, {"d":1457218800,"v":115,"c":48896}, {"d":1457215200,"v":109,"c":45056}, {"d":1457211600,"v":104,"c":41728}, {"d":1457208000,"v":91.5,"c":33536}, {"d":1457204400,"v":89.7,"c":32768}, {"d":1457200800,"v":84.9,"c":32784}, {"d":1457197200,"v":84.4,"c":32785}, {"d":1457193600,"v":83.5,"c":32788}], "a":"1457190947","b":"1457277347"}

Also perfekte Rohdaten um damit was anfangen zu können :) Im Datensatz ist der Zeitstempel (im Unix-Zeitcode Format), der Messwert in nS/h, sowie ein RGB Farbcode für die Darstellung der Farbe in der Webkarte angegeben. Also beginnen wir, die Messdaten über die Homematic CCU2 Zentrale abzurufen und nach der Datenaufbereitung in Systemvariablen zu speichern.

Als erstes legen wir zwei neue Systemvariablen an:
Die erste Variable soll "Strahlungswert" heissen und vom Datentyp "Zahl" sein. Als Maßeinheit gebe ich nS/h (nanoSivert pro Stunde) an.
Die zweite Variable benennen wir "Messzeitpunkt" mit dem Datentyp "Zeichenkette". Wenn alles mit OK bestätigt ist, dann legen wir unter Programme und Verknüpfungen ein neues Programm an:
Das Programm habe ich "strahlungwerte über web" genannt und als Trigger ein periodisches Zeitevent definiert. Das Programm soll alle 60 Minuten ausgeführt werden um die Daten vom Web abzuholen und in die Systemvariablen zu schreiben.
Nachdem der Auslöser definiert ist, muß eine Aktivität bestimmt werden. Wir wählen hier keinen Aktor, sondern die Option Skript:
Danach klicken wir auf die Script-Zeile und öffnen den Scripteditor:
Die nachfolgenden Zeilen sind am besten per copy und paste in den Scripteditor einzufügen und per OK zu bestätigen.

 !script zum importieren der webdaten von der landeswarnzentrale radioaktivität  
 !by ingmar b.03/2016  
 string stderr;  
 string stdout;  
 string answer;  
 !Website angeben - die Antwort kommt als string  
   string url="http://sfws.lfrz.at/json.php?command=getstationdata&stationcode=AT0408&a=&b=";  
 !mit wget den Inhalt der Antwort in stdout schreiben    
 system.Exec("wget -q -O - "#url, &stdout, &stderr);  
 !stdout in die variable answer schreiben  
 answer = stdout;  
 !stringlänge des Inhalts von answer ermitteln  
 integer length = answer.Length();   
 !foreach(summand, summanden.Split(","))  
 !answer=answer.Split("},{"));  
 var rad;  
 var zeitst;  
 var radiation;  
 var zeitstempel;  
 !Antwort Radiation in index 1,4,7,10,13...70  
 !Antwort Zeitcode in index 0,3,6,9,12...69  
 rad=(answer.StrValueByIndex(",", 1));   
 zeitst=(answer.StrValueByIndex(",",0));  
 !WriteLine(rad); nur zum debuggen  
 !WriteLine(zeitst); nur zum debuggen  
 radiation=rad.Substr(4,4);       !String an pos4 substituiern und 4 Stellen ausgeben  
 zeitstempel=zeitst.Substr(11,10);  !String an pos11 substituiern und 10 Stellen ausgeben  
 zeitst=zeitstempel.ToInteger();  
 zeitst=zeitst.ToTime();  
 rad=radiation.ToFloat();  
 dom.GetObject("Messzeitpunkt").State(zeitst); !Systemvariable muss definiert sein  
 dom.GetObject("Strahlungswert").State(rad); !Auch die Systemvariable 'Strahlungswert' vorher anlegen  
Zum Schluß noch per Fehlerprüfung nachsehen ob der code ein Problem hat und dann OK und mit OK speichern. Hat alles geklappt sollte man jetzt die Systemvariablen ansehen können und es sollten auch gültige Werte zu sehen sein: