Gadgeteer Barometer mit Homematic

User stellen ihre Haussteuerung vor

Moderator: Co-Administratoren

Antworten
scrap
Beiträge: 15
Registriert: 25.01.2011, 21:26
Wohnort: Schweiz

Gadgeteer Barometer mit Homematic

Beitrag von scrap » 13.11.2012, 23:15

Mit einm FEZ Cerberus Mainboard, einem passenden Netzwerk Modul und einem Barometer Modul lässt sich mit wenig Aufwand ein Luftdruck-Sensor mit Homematic-Anbindung bauen... Die Programmierung erfolgt in VisualStudio (C#) und der Code wird via angeschlossenem USB Modul auf das Modul übertragen und läuft dort komplett autonom (ohne PC).

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);
            }
        }
Somit kann man mit dem Befehl

Code: Alles auswählen

SetHMVar("Luftdruck", sensorData.Pressure.ToString());
die Daten in der Homematic-Variable "Luftdruck" speichern...
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;
        }
Um den Wert im Gadgeteer Modul zu verwenden benötigt man nur noch folgenden Aufruf:

Code: Alles auswählen

string sHumidity = HMGetHum("Aussen Thermostat:1");
(Wobei "Aussen Thermostat:1" eine Homematic-DeviceID eines Temperatur-Sensors ist).

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 ... :wink:

Antworten

Zurück zu „Projektvorstellungen“