FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Stippy19 am 27 April 2017, 23:12:08

Titel: [Gelöst] Vergleich von Text Ausschnitt mit Zahl
Beitrag von: Stippy19 am 27 April 2017, 23:12:08
Ich versuche gerade den Waschmaschinen-Status auszulesen und mit einem notify darauf zu reagieren (Ähnlich https://www.youtube.com/watch?v=D9CdKLxnayI&feature=youtu.be (https://www.youtube.com/watch?v=D9CdKLxnayI&feature=youtu.be) ).
Von der Steckdose bekomme ich ein reading "power" mit Inhalt "0 W previous: 0 delta_time: 301 s".
Ich will jetzt die 0W Angabe auswerten.
if ({sprintf("%.2f", ReadingsVal("Bad_PowerPlug_Waschmaschine","power",0))} > 1.00)
Wenn also die power > 1 W ist möchte ich etwas machen. Bekomme leider nur den Fehler
PERL WARNING: Argument " 0 W previous: 0 delta_time: 301 s" isn't numeric in sprintf at (eval 37722) line 3.

Jemand ne Idee? sprintf gibt wie gewünscht "0.00" aus. Ich dachte Pearl konvertiert das direkt in eine Zahl und dann sollte ich doch 0.00 mit 1.00 vergleichen können?
Titel: Antw:Vergleich von Text Ausschnitt mit Zahl
Beitrag von: CoolTux am 27 April 2017, 23:15:33
Wenn Räder userReading erstellen oder split nehmen.
Titel: Antw:Vergleich von Text Ausschnitt mit Zahl
Beitrag von: franky08 am 27 April 2017, 23:16:40
ZitatWenn Räder...

Mmh?? Dann geh ich nur noch zu Fuß...
Titel: Antw:Vergleich von Text Ausschnitt mit Zahl
Beitrag von: Stippy19 am 28 April 2017, 00:46:12
Ich würde vermuten dass "Wenn Räder" = "Entweder" sein sollte =)

Vielen Dank!

Hab es jetzt mal so gebaut und scheint zu funktionieren:

my $temp = ReadingsVal("Bad_PowerPlug_Waschmaschine","power",0);
my @temp=split(/W/, $temp);

if (@temp[0] > 1.00)
{}


Ergibt:

$temp = "0 W previous: 1.52 delta_time: 11 s"
@temp[0] = 0
@temp[1] = previous: 1.52 delta_time: 11 s



Gibt es da noch etwas zu verschönern oder kann man das so lassen? = aka hat noch jemand Tipps dazu?

/Edit: Also, ich bekomm immernoch die Meldung:
2017.04.28 00:56:09 1: PERL WARNING: Argument " 1.51 W previous: 0 delta_time: 215 s" isn't numeric in sprintf at (eval 39597) line 3.
2017.04.28 00:56:31 1: PERL WARNING: Argument " 0 W previous: 0 delta_time: 301 s" isn't numeric in sprintf at (eval 39599) line 4.

Woran liegt das? Ich komm mit Peal noch nicht wirklich zurecht... Bin C gewöhnt von früher, Pearl macht mir irgendwie Schwierigkeiten mit dem Syntax
Titel: Antw:Vergleich von Text Ausschnitt mit Zahl
Beitrag von: CoolTux am 28 April 2017, 05:06:20
Guten Morgen.

Ja das sollte ein entweder werden. War bisschen spät gestern. Da Du ja nur ne Zahl haben willst nimm ReadingsNum statt ReadingsVal dann haste erstmal nur Zahlen. Musst halt dann noch deine benötigte raus suchen.
Titel: Antw:Vergleich von Text Ausschnitt mit Zahl
Beitrag von: Stippy19 am 28 April 2017, 17:34:19
Die Idee versteh ich, nur nicht wie ich es umsetze.
Der Wert ist
0 W previous: 0 delta_time: 301 s
Wenn ich nun ReadingsNum nutze, bekomme ich
00301
Ich kann nicht nach Anzahl der Werte gehen, da die 0W auch 1.65W sein können.
Titel: Antw:Vergleich von Text Ausschnitt mit Zahl
Beitrag von: KernSani am 28 April 2017, 17:46:33
dann muss wohl 'ne regex her...

irgendwie sowas (quick & dirty und ungetestet)

my $string = ReadingsVal(x,y,z);
my @zahlen = $string =~ /(.*) W previous: (.*) delta_time: (.*) s/


Hoffe das gibt einen Ansatzpunkt...

Titel: Antw:Vergleich von Text Ausschnitt mit Zahl
Beitrag von: Stippy19 am 28 April 2017, 19:00:30
Danke KernSani für deinen Input.
Aber, da habe ich doch wieder das selbe "Problem"
my $temp = ReadingsVal("Bad_PowerPlug_Waschmaschine","power",0);
my @temp = $temp =~ /(.*) W previous: (.*) delta_time: (.*) s/;

if ($temp[0] > 4.00) {}

Ergibt
2017.04.28 18:58:28 1: PERL WARNING: Argument " 0 W previous: 0 delta_time: 301 s" isn't numeric in sprintf at (eval 48166) line 4.

Bitte nicht falsch verstehen, es funktioniert! Die Zahl wird richtig ausgewertet, ich würde nur gerne wissen, wie man es richtig macht, damit dieses Warning eben nicht kommt.
Titel: Antw:Vergleich von Text Ausschnitt mit Zahl
Beitrag von: CoolTux am 28 April 2017, 19:04:12
Lass Dir doch erstmal ausgeben was da überhaupt übrig bleibt.
Kommentier also Deine Bedingung erstmal aus und mache ein

Log(1,$temp[0]);
Titel: Antw:Vergleich von Text Ausschnitt mit Zahl
Beitrag von: DeeSPe am 28 April 2017, 19:12:24
my $temp = (split " ",ReadingsVal("Bad_PowerPlug_Waschmaschine","power","0 W previous: 0 delta_time: 301 s"))[0];

Gruß
Dan
Titel: Antw:Vergleich von Text Ausschnitt mit Zahl
Beitrag von: Stippy19 am 28 April 2017, 19:40:03
 :-[ Der Fehler PERL WARNING: Argument " 1.51 W previous: 0 delta_time: 215 s" isn't numeric in sprintf at (eval 39597) line 3.
kam leider garnicht von dem notify in der letzten Version, sondern von einer anderen Baustelle, wo ich Ihn übersehen hatte.
Sry, war mein Fehler.

Diese Lösung hier, scheint mir aber die eleganteste zu sein:
Zitat von: DeeSPe am 28 April 2017, 19:12:24
my $temp = (split " ",ReadingsVal("Bad_PowerPlug_Waschmaschine","power","0 W previous: 0 delta_time: 301 s"))[0];

Gruß
Dan

Vielen Dank euch!
Titel: Antw:[Gelöst] Vergleich von Text Ausschnitt mit Zahl
Beitrag von: CoolTux am 28 April 2017, 19:45:04
Dan seine Lösung kannst Du prima als userReading nehmen.
Titel: Antw:[Gelöst] Vergleich von Text Ausschnitt mit Zahl
Beitrag von: DeeSPe am 28 April 2017, 20:00:27
Eine weitere Lösung wäre der Einsatz des Moduls readingsChange.

Gruß
Dan