Um den aktuellen Luftdruck in einer Homematic-Systemvariable zu speichern, verwende ich folgende Funktion (C# !):
Code: Alles auswählen
void SetHMVar(string sVariable, string sValue)
{
try
{
string sCode = "dom.GetObject('" + sVariable + "').State('" + sValue + "');";
POSTContent pCT = POSTContent.CreateTextBasedContent(sCode);
HttpRequest req = HttpHelper.CreateHttpPostRequest(@"http://{IP-Addresse der CCU}:8181/Test.exe", pCT, "");
req.SendRequest();
}
catch (Exception ex)
{
Debug.Print(ex.Message);
Mainboard.SetDebugLED(true);
}
}
Code: Alles auswählen
SetHMVar("Luftdruck", sensorData.Pressure.ToString());
Das Barometer-Modul liefert auch noch die Temperatur, welche man ebenfalls als HM Variable speichern könnte...
Anderseits lassen sich auch Daten von HM auslesen und weiterverarbeiten. Folgende Funktion ermittelt die Luftfeuchtigkeit eines HM Temperatur Sensors:
Code: Alles auswählen
public static string HMGetHum(string sDeviceID)
{
string result = null;
try
{
string postString = "WriteLine(dom.GetObject('" + sDeviceID + "').DPByHssDP('HUMIDITY').Value());";
byte[] postBytes = Encoding.UTF8.GetBytes(postString);
HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create("http://192.168.2.15:8181/Test.exe");
webRequest.Method = "POST";
webRequest.ContentType = "application/x-www-form-urlencoded";
webRequest.ContentLength = postBytes.Length;
Stream postStream = webRequest.GetRequestStream();
postStream.Write(postBytes, 0, postBytes.Length);
postStream.Close();
HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse();
Stream responseStream = webResponse.GetResponseStream();
StreamReader responseStreamReader = new StreamReader(responseStream);
result = responseStreamReader.ReadToEnd();
webResponse.Close();
responseStream.Close();
if (result.IndexOf("<xml>") > 0)
return result.Substring(0, result.IndexOf("<xml>", 0)).Trim();
}
catch (Exception ex)
{
Debug.Print(ex.Message);
}
return result;
}
Code: Alles auswählen
string sHumidity = HMGetHum("Aussen Thermostat:1");
Temperatur-Logging benötigt somit keinen 7x24 PC, die Daten können ganz einfach auf SD Card gespeichert oder via Web-Service in die grosse Wolke geschickt werden (Beispiel: http://roger.zander.ch/Temperature.aspx).
Ich hoffe, ich konnte etwas Neugierde wecken... zumindest bei denen, die ein wenig C# programmieren können ...