Hallo,
ich habe auf einem Raspberry PI FHEM installiert an einem Arduino habe ich per Firmata am Analogen Eingang ein Temperatur Sensor.
Der mir nun in FHEM mit folgende Konfiguration:
Zitatdefine Arduino2 FRM 3020 global
attr Arduino2 room Arduino2
#
define A1 FRM_AD 15
attr A1 IODev Arduino2
attr A1 event-min-interval 60
attr A1 room Arduino2
attr A1 stateFormat reading
Leider zeigt er mir nun einen Wert an "710" wie kann ich den nun in Grad umwanlden. Um so wäremer es wird um so mehr steigt wer Wert an.
Temp Sensor ist ein: LM335Z. Mit in der Schaltung eingebaut ist ein 2kOhm Widerstand.
Die Daten werden wunderbar an FHEM übermittelt aber wie kann ich die Werte nun umwalnden?
Vielen Dank Gruß Jan
kann mir wirklich niemand helfen? :(
das Suchwort heißt 'stateFormat'. Alternativ 'UserReadings'....
Kannst du mir eine Beispiel Zeile schreiben ich hab mir die Commandrefs durchgelesen aber steh auf den Schlauch :(
Vielen Dank ;-)
Hmm... ich fand Commandref verständlich. Zur Not etwas herumprobieren.
Ich habe z.B. folgende Umrechnng am Laufen:
attr UM_HH_KS01 userReadings normalizedLuminosity {my $t=ReadingsVal($name,"luminosity",-0.55)/0.55;;int($t*100+0.5)/100;;}
Damit lese ich aus dem Device ein Reading namens "luminosity", rechne es etwas um und erzeuge ein neues Reading mit dem namen "normalizedLuminosity". Mitdem stateFormat geht es fast genau so. Dann wird eben STATE durch neuen Wert ersetzt.
Edit: In der Formel wird noch auf 2 Nachkommastellen gerundet...
Hallo,
ich habe das nun mal versucht mit deinen Perl Code am Ende klappt das auch nur möchte ich nun meinen Wert einfach durch 2 Teilen.
Habe das nun folgendermaßen versucht aber es klappt nicht ;) Was mache ich falsch?
attr A1 userReadings temp_angepasst {my $t=ReadingsVal($name,"reading",int($t/2);;}
Vielen Dank für die Hilfe Gruß Jan ;)
Der 3te Parameter ist ein Defaultwert, wenn kein Wert verfügbar ist. Ich habe bei mir ein so gewählt, das es am Ende -1 als Zeichen für ein "Problem" entsteht. Außerdem hast Du Dich mit den Klammern verzählt.
attr A1 userReadings temp_angepasst {my $t=ReadingsVal($name,"reading",0);;int($t/2);;}
oder gleich
attr A1 userReadings temp_angepasst {int(ReadingsVal($name,"reading",0)/2);;}
Zurückgegeben wird das Ergebniss des letzten Befehls.
EDIT: Dir ist klar, dass Du nicht rundest, sondern einfach die Kommastellen wegwirfst?
Top @hexenmeister Vielen Dank ;)
Hmm ja ich muss noch schauen wie ich das am besten mache das problem ist ich habe aktuell einen Temperatursensor an dem Arduino der per Firmata zum FHEM Server überträgt.
Ich habe nun als ausgabe einen Wert von 738 der sich natürlich verändert um so Wärmer um so höher., um so kälter um so niedriger.
Ich weiß noch nicht wie ich da nun einen vernüftigen Temperatur Wert rausbekomme ;) Dachte ich schau einfach wieviel Grad es wirklich ist und Teile diesen wert dann so oft bis er passt oder gibt es hier ein besseres Vorgehen?
Hat da jemand eine Idee, wie macht man so was generell?
Gruß Jan
Hm... Je nach dem, ob sich die Werte linear verteilen, oder nicht. In ersten Fall ist das einfach X*a+b
Sonst muss man genau untersuchen. Evtl. Lookup-Tabellen einsetzen.