Hi,
Ich habe seit einiger Zeit zur Ermittlung und Darstellung, der Luftfeuchte, über meine 1Wire Geräte, ein userreadings definiert, welches ich jetzt, in meine 99_myUtils.pm, auslagern wollte.
Wenn ich jetzt jedoch, in userreadings, folgendes zum Aufruf der Funktion eintrage, werden keine userreadings mehr aktualisiert
{humidity_og_rechts()}
Ist der Inhalt von userreadings nicht auszulagern?
Greetz
Eldrik
doch. das geht.
was steht im log? übergibst du alles nötige in deine routine?
gruss
andre
hier mal die Funktion
sub humidity_og_rechts(){
Luftfeuchte_Flur_klein_oben { int(((ReadingsVal("Hum_Light_OG_rechts","volt.A",0)/ReadingsVal("Hum_Light_OG_rechts","volt.D",5) - 0.1515) / 0.00636) / (1.0546 - 0.00216 * ReadingsVal("Temp.Flur_klein_oben","temperature",0)))},
Luftfeuchte_Gaestezimmer { int(((ReadingsVal("Hum_Light_OG_rechts","volt.C",0)/ReadingsVal("Hum_Light_OG_rechts","volt.D",5) - 0.1515) / 0.00636) / (1.0546 - 0.00216 * ReadingsVal("Temp.Gaestezimmer","temperature",0)))},
Luftfeuchte_Bad_klein { int(((ReadingsVal("Hum_Light_OG_rechts","volt.B",0)/ReadingsVal("Hum_Light_OG_rechts","volt.D",5) - 0.1515) / 0.00636) / (1.0546 - 0.00216 * ReadingsVal("Temp.Bad_klein","temperature",0)))},
Luftfeuchte_Bad_klein_Wert {if(ReadingsVal("Hum_Light_OG_rechts","Luftfeuchte_Bad_klein","55") < 55) {"niedrig";}else {if(ReadingsVal("Hum_Light_OG_rechts","Luftfeuchte_Bad_klein","60") > 60){"hoch";}}}
}
Sollte alles über die ReadingsVal kommen oder?
Greetz
Eldrik
so funktioniert das nicht. du darfst das natürlich nicht 1:1 übernehmen. unter anderem stimmt die syntax nicht, die zuordnung zum reading namen ist weg.
wenn du mehr als ein user reading hast brauchst du pro user reading eine sub die aufgerufen wird oder du machst es mit einem notify und erzeugst das reading dann selber mit setreading.
du solltest auch nicht alle werte bei jeder änderung erzeugen sondern immer nur wenn sich das zu gründe liegende reading geändert hat. also Luftfeuchte_Flur_klein_oben nur wenn sich volt.A geändert hat. und nicht wenn sich irgendeins geändert hat. der unterschied sind 25 updates statt der 4 benötigten.
wenn man es so macht wie im beispiel unten gibt es eine sub um die feuchte auszurechnen und die wird für alle drei räume verwendet:
attr xxx userReadings Luftfeuchte_Flur_klein_oben {voltToHum("A","Flur_klein_oben"}, Luftfeuchte_Bad_klein {voltToHum("B","Gaestezimmer"}...
sub voltToHum($$) {
my($volt,$temp) = @_;
my $ref = ReadingsVal("Hum_Light_OG_rechts","volt.$volt",0);
$volt = ReadingsVal("Hum_Light_OG_rechts","volt.$volt",0);
$temp = ReadingsVal("Temp.$temp","temperature",18);
my $hum= ($volt/$ref - 0.1515) / 0.00636) / (1.0546 - 0.00216 * $temp)
return int( $hum );
};
die sub für den string kannst du dann entsprechend bauen.
gruss
andre
Klasse!
Ein paar Anpassungen waren zwar noch notwendig, aber jetzt lübbt es wie befohlen :)
Danke und Gruß
Jens