OnTrue // A "return true;" statement at any point of this code block, will cause the program to run. // For manually activated program, just leave a "return false" statement here. Program.Setup(()=> { // set the widget that will display this program data (the temperature,luminance). Program.AddControlWidget("homegenie/generic/sensor"); // set a configuration parameter //Program.AddInputField("PollFrequency", "10", "Pause between updates (seconds)"); // initialize program parameters Program.Parameter("Sensor.Humidity").Value = ""; Program.Parameter("Sensor.Temperature").Value = ""; Program.Parameter("Sensor.TemperatureF").Value = ""; Program.AddInputField("UpdateInterval", "600", "Update Interval (seconds)"); // it makes program to respond to webservices calls: // - http://<hg_address>/api/EmbeddedSystems.Raspberry/DHT22/Sensor.Temperature When.WebServiceCallReceived("EmbeddedSystems.Raspberry/DHT22/Sensor.Temperature", ( args ) => { return "{ 'ResponseValue' : '" + Program.Parameter("Sensor.Temperature").Value + "' }"; }); // - http://<hg_address>/api/EmbeddedSystems.Raspberry/DHT22/Sensor.Humidity When.WebServiceCallReceived("EmbeddedSystems.Raspberry/DHT22/Sensor.Humidity", ( args ) => { return "{ 'ResponseValue' : '" + Program.Parameter("Sensor.Humidity").Value + "' }"; }); }); // end program setup return true; // it makes program to respond to webservices calls: // - http://<hg_address>/api/Components.DHT22/0/Sensor.Temperature When.WebServiceCallReceived("Components.DHT22/0/Sensor.Temperature", ( args ) => { return "{ 'ResponseValue' : '" + Program.Parameter("Sensor.Temperature").Value + "' }"; }); // - http://<hg_address>/api/Components.DHT22/0/Sensor.Humidity When.WebServiceCallReceived("Components.DHT22/0/Sensor.Humidity", ( args ) => { return "{ 'ResponseValue' : '" + Program.Parameter("Sensor.Humidity").Value + "' }"; }); int[] data = new int[5]; var irpin = ConnectorPin.P1Pin7.ToProcessor(); MemoryGpioConnectionDriver driver = new MemoryGpioConnectionDriver(); while (Program.IsEnabled) { driver.Allocate(irpin, PinDirection.Output); driver.Write(irpin, true); //Pause(5); for(int a = 0; a < 30; a++) { driver.Allocate(irpin, PinDirection.Output); driver.Write(irpin, false); Pause(0.0018); //Pause(0.0006); //driver.Write(irpin, true); //Pause(0.001); // driver.Allocate(irpin, PinDirection.Input); // int i = 0; data = new int[5]; int j = 0; int counter = 0; bool laststate = true; // // detect change and read data for ( i=0; i<= 85; i++) { counter = 0; while (driver.Read(irpin) == laststate) { //Raspberry.Timers.HighResolutionTimer.Sleep(0.000001m); if (++counter == 255) { break; } } laststate = driver.Read(irpin); //Console.WriteLine(i); if (counter == 255) break; // ignore first 3 transitions if ((i >= 4) && (i%2 == 0)) { // shove each bit into the storage bytes data[j/8] <<= 1; if (counter > 40) data[j/8] |= 1; j++; } } // //Program.Notify("DHT-22", "J = " + j.ToString()); if ((j >= 40) && (data[4] == ((data[0] + data[1] + data[2] + data[3]) & 0xFF)) ) { //data[2] = data[2] - 3; // temperature adjustment, due to heat excess inside the HG box //double f = data[2] * 9D / 5D + 32; //double f = temperatura + decimale/10; //Console.WriteLine("\n\nHumidity = {0}.{1} %\nTemperature = {2}.{3} *C ({4} *F)\n\n", // data[0], data[1], data[2], data[3], f); //data[0] = (data[0] )/10; int umidita =((data[0]<<8) + data[1])/10; int decumid = ((data[0]<<8) + data[1]) - umidita*10; //var hum = data[0] + "." + data[1]; //var hum = (data[0] * 256 + data[1])/10; var hum = umidita + "." + decumid; int moltiplicatore =1; if (data[2] > 128) { moltiplicatore = -1; data[2] = data[2] - 128; } int temperatura =((data[2]<<8)+data[3])/10; int decimale = ((data[2]<<8)+data[3]) - temperatura*10; //data[2] = ((data[2]<<8)+data[3]); //data[2] /= 10; var tempc = (moltiplicatore * temperatura) + "." + decimale; //var tempc = data[2] + ".." + data[4]; var tempf = ((temperatura + decimale/10) * 9D / 5D + 32).ToString(); //if (hum != Program.Parameter("Sensor.Humidity").Value) { Program.RaiseEvent("Sensor.Humidity", hum, "DHT-22 Sensor"); } //if (tempc != Program.Parameter("Sensor.Temperature").Value) { Program.RaiseEvent("Sensor.TemperatureF", tempf, "DHT-22 Sensor"); Program.RaiseEvent("Sensor.Temperature", tempc, "DHT-22 Sensor"); } break; } else { //Console.WriteLine(j + ") Data not good, skip\n"); Pause(2); } } // //Console.WriteLine(data[0]); //Console.WriteLine(data[1]); //Console.WriteLine(data[2]); //Console.WriteLine(data[3]); //Console.WriteLine(data[4]); // var pause = Program.InputField("UpdateInterval").DecimalValue; if (pause == 0) pause = 600; // default pause is 10 minutes Pause(pause); } [] true true HomeAutomation.HomeGenie.Automation
70
DHT-22 Sensor Temperature and Humidity sensing using DHT-22. For wirings see http://www.homegenie.it/docs/doityourself.php . Raspberry Pi 2014-11-05T22:17:40.217125Z 2014-11-05T22:17:40.764971Z CSharp true