reading von "2.00 W" in "2.00" ändern ?

Begonnen von snesfhem, 12 August 2016, 13:06:02

Vorheriges Thema - Nächstes Thema

snesfhem

Hallo

sorry für die triviale Anfängerfrage.
Ich lese mit dem Fritz! 546 Powerline Adapter den aktuellen Stromverbrauch meiner Waschmaschine aus.
Leider liefert er mir nur den Wert "2.00 W"
Für das spätere Coding will ich aber Abfragen ob dieser Wert > 5 ist.

2016.08.12 12:57:10 1: PERL WARNING: Argument "2.00 W" isn't numeric in numeric gt (>) at (eval 2270) line 1.

Den Wert habe ich in einem dummy gespeichert.

Wie kann ich das umbauen?

Grüße
Achim

marvin78

Verwende zum Abfragen einfach ReadingsNum statt ReadingsVal (siehe commandref zu Perl Specials).

betateilchen

Warum speichert man eigentlich den Wert eines Readings nochmal extra in einen dummy?
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Ma_Bo

Oder zerlege das Reading mit einem

attr <device> userReadings

Ich habe von meinem Windsensor ein Reading wind_dir mit z.B. 135 NW
dieses zerlege ich mit folgendem userReadings und erhalte ein neues Reading mit dem Namen windrichtungsgrad :

attr windsensor userReadings windrichtungsgrad:wind_dir.* {(split(' ', ReadingsVal("$name","wind_dir",""), 2))[0]}

Du müsstest halt die Namen noch anpassen.
NUC mit FHEM, HM Heizungsthermostate, HM Wandthermostate, Intertechno Funksteckdosen, 10" Tablet als Wanddisplay, KeyMatic, Fensterkontakte, Fensterkontakte umgebaut als Wassermelder und Briefkastenmelder, Aussenthermostat, Anwesenheitssteuerung über Fritz Box, Google Home usw. usw.

betateilchen

Zitat von: Ma_Bo am 12 August 2016, 13:10:58
Oder zerlege das Reading mit einem

Das ist doch Quatsch, wenn es nur darum geht, den reinen numerischen Wert des readings ohne Einheit zu bekommen. Genau dafür ist ja die Standarfunktion ReadingsNum() eingebaut worden.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Ma_Bo

ZitatDas ist doch Quatsch, wenn es nur darum geht, den reinen numerischen Wert des readings ohne Einheit zu bekommen. Genau dafür ist ja die Standarfunktion ReadingsNum() eingebaut worden.

Aber es funktioniert :)
Und man hat ein schönes neues Reading ;)
NUC mit FHEM, HM Heizungsthermostate, HM Wandthermostate, Intertechno Funksteckdosen, 10" Tablet als Wanddisplay, KeyMatic, Fensterkontakte, Fensterkontakte umgebaut als Wassermelder und Briefkastenmelder, Aussenthermostat, Anwesenheitssteuerung über Fritz Box, Google Home usw. usw.

marvin78

Auch das könntest du mit ReadingsNum bekommen.

snesfhem

Hallo

wow. Danke für den super schnellen support!
ReadingsVal() hat die Lösung gebracht.

... und die SD Karte bedankt sich dank 80MB weniger Logfiles in einem Monat gleich mit :-)

Grüße

Ma_Bo

Ist meine Methode denn falsch oder überdimensioniert oder warum ist es Quatsch?

Da ich dieses mit dem userReadings öfter so eingebaut habe.


Gesendet von iPhone mit Tapatalk
NUC mit FHEM, HM Heizungsthermostate, HM Wandthermostate, Intertechno Funksteckdosen, 10" Tablet als Wanddisplay, KeyMatic, Fensterkontakte, Fensterkontakte umgebaut als Wassermelder und Briefkastenmelder, Aussenthermostat, Anwesenheitssteuerung über Fritz Box, Google Home usw. usw.

betateilchen

Zitat von: Ma_Bo am 12 August 2016, 13:22:46
Da ich dieses mit dem userReadings öfter so eingebaut habe.

Du kannst auch das userReading mit ReadingsNum() versorgen anstatt mit einem split.

Ausserdem bleibt es für mich trotzdem sinnlos, zwei Readings zu haben, in denen letztendlich die gleiche Information steht.

Dein userReading verarbeitest Du mit ReadingsVal() weiter, das originale Reading würde mit ReadingsNum() exakt das gleiche Ergebnis liefern, ohne erst zusätzliche readings erzeugen zu müssen.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Ma_Bo

Mir stellt sich aber die Frage warum sollte ich es mit ReadingNum() machen anstatt mit split?
Zu Ressourcen verbrauchend oder warum?


Gesendet von iPhone mit Tapatalk
NUC mit FHEM, HM Heizungsthermostate, HM Wandthermostate, Intertechno Funksteckdosen, 10" Tablet als Wanddisplay, KeyMatic, Fensterkontakte, Fensterkontakte umgebaut als Wassermelder und Briefkastenmelder, Aussenthermostat, Anwesenheitssteuerung über Fritz Box, Google Home usw. usw.

Ma_Bo

Zitat von: betateilchen am 12 August 2016, 13:24:46

Dein userReading verarbeitest Du mit ReadingsVal() weiter, das originale Reading würde mit ReadingsNum() exakt das gleiche Ergebnis liefern, ohne erst zusätzliche readings erzeugen zu müssen.

Ok, verstanden.


Gesendet von iPhone mit Tapatalk
NUC mit FHEM, HM Heizungsthermostate, HM Wandthermostate, Intertechno Funksteckdosen, 10" Tablet als Wanddisplay, KeyMatic, Fensterkontakte, Fensterkontakte umgebaut als Wassermelder und Briefkastenmelder, Aussenthermostat, Anwesenheitssteuerung über Fritz Box, Google Home usw. usw.