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: