FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: eldrik am 01 März 2014, 10:13:42

Titel: userreadings in Funktion in 99_myUtils auslagern?
Beitrag von: eldrik am 01 März 2014, 10:13:42
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
Titel: Antw:userreadings in Funktion in 99_myUtils auslagern?
Beitrag von: justme1968 am 01 März 2014, 10:20:23
doch. das geht.

was steht im log? übergibst du alles nötige in deine routine?

gruss
  andre
Titel: Antw:userreadings in Funktion in 99_myUtils auslagern?
Beitrag von: eldrik am 01 März 2014, 10:24:58
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
Titel: Antw:userreadings in Funktion in 99_myUtils auslagern?
Beitrag von: justme1968 am 01 März 2014, 10:59:41
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
Titel: Antw:userreadings in Funktion in 99_myUtils auslagern?
Beitrag von: eldrik am 02 März 2014, 08:58:23
Klasse!

Ein paar Anpassungen waren zwar noch notwendig, aber jetzt lübbt es wie befohlen :)

Danke und Gruß
Jens