eService 1-Wire Temperatur / Luftfeuchte Sensor verwenden

Begonnen von ritchie, 26 August 2013, 22:51:32

Vorheriges Thema - Nächstes Thema

ritchie

Hallo Zusammen,

hier ein kleines Beispiel, wie man einen eService Sensor, welcher mit Temperatur und einem Luftfeuchtesensor bestückt ist,
Auslesen und grafisch darstellen kann.

Das Modul setzt voraus, das auch der Temperatursensor eingebaut ist und verwendet die Temperatur des DS2438 ebenfalls (Mittelwert)


#
# Temperatur
#
define LuftfeuchtRaum1 OWDevice 26.<1- Wire ID des Sensors> 120
attr LuftfeuchtRaum1 model DS2438
attr LuftfeuchtRaum1 stateFormat {sprintf("%.1f",ReadingsVal("LuftfeuchtRaum1","humidity",getHumidityOfSensor("LuftfeuchtRaum1","Temperatur1")))."rH"}
attr LuftfeuchtRaum1 userReadings humidity { getHumidityOfSensor("LuftfeuchtRaum1","Temperatur1");; }
#
define Temperatur1 OWDevice 28.<1- Wire ID des Sensors> 120
attr Temperatur1 model DS18B20
attr Temperatur1 stateFormat {sprintf("%.1f",ReadingsVal("Temperatur1","temperature",0))."°C"}
#
define FileLog_Temperatur1 FileLog /media/usbstick/log/Temperatur1-%Y.log Temperatur1:(temperature).*|LuftfeuchtRaum1:(humidity).*
attr FileLog_Temperatur1 logtype mytempplot:Plot,text
define plTemperatur1 SVG FileLog_Temperatur1:mytempplot:CURRENT


Die Module für die 99_MyUtility.pm

#
# Get the Humidity of the Sensor Board
#attr flLuftfeuchtRaum1 VFunction (161.29 * V / VDD - 25.8065)/(1.0546 - 0.00216 * T)
#
sub getHumidityOfSensor($$)
{
my $HumiditySensor = shift;
my $TemperatureSensor = shift;
my $Value_VoltageOnSensor = 0;
my $Value_VoltageMeasured = 0;
my $Humidity = 0;

$Value_VoltageOnSensor = ReadingsVal($HumiditySensor,"VDD",0);
$Value_VoltageMeasured = ReadingsVal($HumiditySensor,"VAD",0);

$Humidity = (161.29 * $Value_VoltageMeasured / $Value_VoltageOnSensor - 25.8065)/(1.0546 - 0.00216 * ReadingsVal($TemperatureSensor,"temperature",0));

if ($Humidity > 100 ) # range limit
{
  Log 1, "getHumidityOfSensor: ($HumiditySensor)  Error Calculation ! VDD: $Value_VoltageOnSensor VAD : $Value_VoltageMeasured";
$Humidity =100.0;
}

return $Humidity;
}


Ist noch nicht Codeoptimiert, läuft aber.

Edit
Muss mir aber den Mittelwert ansehen, das die Kurve zu sehr zappelt.

Edit2:
Man kann wohl nicht die Temperatur des DS2438 verwenden. Zu ungenau.

Edit3:
Code Nochmals optimiert. Temperatur Mittelung entfernt.
Gruss R.
IPU662  Ipfire & Fhem (Homematic + MAX) - Produktiv
Cubietruck (1Wire - USB) - Produktiv

Grave

Hi,
Vielleicht liest hier noch jemand mit. Kann vielleicht jemand folgende zwei Zeilen erklären.

Zitatattr LuftfeuchtRaum1 stateFormat {sprintf("%.1f",ReadingsVal("LuftfeuchtRaum1","humidity",getHumidityOfSensor("LuftfeuchtRaum1","Temperatur1")))."rH"}
attr LuftfeuchtRaum1 userReadings humidity { getHumidityOfSensor("LuftfeuchtRaum1","Temperatur1");; }