Hauptmenü

Reading Format ändern

Begonnen von choetzu, 05 März 2017, 00:02:32

Vorheriges Thema - Nächstes Thema

choetzu

Hallo,

Mein PoolController übermittelt die Pooltemperatur als Readingwert immer mit einer Zahl und einem C dahinter, also z.B. 4,5 C. Ich möchte gerne das C aus dem Reading entfernen. Macht man das mit dem attr StateFormat? oder UserReading?

Danke für die Hilfe.

Lg C
Raspi3, EnOcean, Zwave, Homematic

CoolTux

Am besten mit userReading machen. Hierfür kannst du ReadingsNum nehmen.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

chrille76


choetzu

Guten Morgen,
Danke.

Leider gehen beide nicht.

Wenn ich als UserReadings (split(/ /,Pool))[0] mache, erscheint weiterhin 4.5 C

Auch bei UserReadings ReadingNum(Pool) passiert nix.

Mach ich was falsch?
Raspi3, EnOcean, Zwave, Homematic

betateilchen

falsche Syntax in beiden Fällen.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

CoolTux

In der Commandref findest Du unter Perl Specials einen Hinweis darauf wie man die Funktion ReadingsNum verwendet.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

betateilchen

und in jeder perl Grundlagendoku steht, wie man "split" richtig benutzt. Das ist nix FHEM spezifisches.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

choetzu

#7
Danke für die Hinweise.. Ich komme der Sache näher, es wird wärmer ;)

Zitat von: CoolTux am 05 März 2017, 10:28:04
In der Commandref findest Du unter Perl Specials einen Hinweis darauf wie man die Funktion ReadingsNum verwendet.

Danke. im Commandref steht:
ZitatReadingsVal(<devicename>,<reading>,<defaultvalue>)
Gibt den Inhalt der "readings" zurück (den Inhalt der in dem "Readings"-Abschnitt von "list device" angezeigt wird)

ReadingsNum(<devicename>,<reading>,<defaultvalue>)
Wie ReadingsVal, löscht aber alles, was kein Zahl ist, um den Wert bei Berechnungen verwenden zu können.

soweit eigentlich klar. Bis auf <defaultvalue>. Was muss man da eingeben? Ich will ja die Temperatur als absolute Zahl. Da gibt es doch kein defaultvalue. Leider ist das dort auch nicht beschrieben.

Was bedeutet "Gibt den Inhalt des "readings" zurück? Wo zurück? Ins reading selbst?


Zitat von: betateilchen am 05 März 2017, 10:29:02
und in jeder perl Grundlagendoku steht, wie man "split" richtig benutzt. Das ist nix FHEM spezifisches.

Auch hier habe ich was für Anfänger einfaches gefunden..

split()
Hiermit kann eine Zeichenkette an bestimmten Stellen aufgetrennt werden. Die jeweilige Trennstelle gibt ein Suchmuster im ersten Argument an (siehe Regula ̈re Ausdru ̈cke).

#!/usr/local/bin/perl -w
use strict;
my $zeile = join('-','a','b','c','d');
print $zeile."\n";


#!/usr/local/bin/perl -w
use strict;
my $zeile = "a-b-c-d";
my @a = split(/-/,$zeile);     # Anzahl der Elemente
print "@a\n";

abcd
Um die Anzahl der Teilstrings zu begrenzen, kann als drittes Argument noch eine Zahl angegeben werden, die die maximale Anzahl der gebildeten Stu ̈cke darstellt.
#!/usr/local/bin/perl -w
use strict;
my $zeile = "a-b-c-d";
my @a = split(/-/,$zeile,2);
print "@a\n";

a b-c-d


somit sollte der code m.E. im UserReading
(split(/C/,Pool))[0]
stehen. Wofür aber das [0] steht, erschliesst sich mir nicht in der Doku. Und leider funktioniert es auch nicht.

bin ich auf dem richtigen Weg?
Raspi3, EnOcean, Zwave, Homematic

CoolTux

Zitat von: choetzu am 05 März 2017, 11:27:34
Danke für die Hinweise.. Ich komme der Sache näher, es wird wärmer ;)

Danke. im Commandref steht:
soweit eigentlich klar. Bis auf <defaultvalue>. Was muss man da eingeben? Ich will ja die Temperatur als absolute Zahl. Da gibt es doch kein defaultvalue. Leider ist das dort auch nicht beschrieben.

Was bedeutet "Gibt den Inhalt des "readings" zurück? Wo zurück? Ins reading selbst?


Auch hier habe ich was für Anfänger einfaches gefunden..

split()
Hiermit kann eine Zeichenkette an bestimmten Stellen aufgetrennt werden. Die jeweilige Trennstelle gibt ein Suchmuster im ersten Argument an (siehe Regula ̈re Ausdru ̈cke).

#!/usr/local/bin/perl -w
use strict;
my $zeile = join('-','a','b','c','d');
print $zeile."\n";


#!/usr/local/bin/perl -w
use strict;
my $zeile = "a-b-c-d";
my @a = split(/-/,$zeile);     # Anzahl der Elemente
print "@a\n";

abcd
Um die Anzahl der Teilstrings zu begrenzen, kann als drittes Argument noch eine Zahl angegeben werden, die die maximale Anzahl der gebildeten Stu ̈cke darstellt.
#!/usr/local/bin/perl -w
use strict;
my $zeile = "a-b-c-d";
my @a = split(/-/,$zeile,2);
print "@a\n";

a b-c-d


somit sollte der code m.E. im UserReading
(split(/C/,Pool))[0]
stehen. Wofür aber das [0] steht, erschliesst sich mir nicht in der Doku. Und leider funktioniert es auch nicht.

bin ich auf dem richtigen Weg?

Defaultvalue gibt an was genommen werden soll wenn das Reading nicht gelesen werden soll.
Da müsste eigentlich stehen liest aus und nicht gibt zurück


{ ReadingsNum("Device","Reading","Hoelle") }

Gib das mal in die cmd Line oben im FHEM Web ein und passe Device und Reading an. Dann sollte der Wert des Readings ausgegeben werden. Das Beispiel geht natürlich nur wenn auch wenigstens eine Zahl im Reading steht.

Hier ist die offizielle Doku zu Split
http://perldoc.perl.org/functions/split.html

Desweiteren gibt du in Google ein
perl split only first element

Und dann fügst du alles zusammen.



Grüße
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

choetzu

Zitat von: CoolTux am 05 März 2017, 11:47:38


{ ReadingsNum("Device","Reading","Hoelle") }

Gib das mal in die cmd Line oben im FHEM Web ein und passe Device und Reading an. Dann sollte der Wert des Readings ausgegeben werden. Das Beispiel geht natürlich nur wenn auch wenigstens eine Zahl im Reading steht.

Hier ist die offizielle Doku zu Split
http://perldoc.perl.org/functions/split.html

Desweiteren gibt du in Google ein
perl split only first element

Und dann fügst du alles zusammen.

Grüße

hallo,

herzlichen Dank. ReadingNum hat funktioniert. Es gibt den richtigen Wert aus.. Super, danke. Aber wie spiele ich nun diesen Wert zurück in das entsprechende Reading

mit attr PoolController userReadings Pool { ReadingsNum("PoolController","Pool","default") } geht das nicht..

Und hinsichtlich Perl-Split habe ich mich da nun ca. 1 Std damit befasst.. Ich komme vermutlich nicht drum herum mich grundsätzlich mit perl auseinander zu setzen... Das klingt noch sehr spanisch mit den variablen und den verschiedenen Platzhaltern... Aber heute ist ein guter Tag um etwas tiefer in die Materie zu gucken..
Raspi3, EnOcean, Zwave, Homematic

CoolTux

Zurück spielen kann man nicht. Mit userReading erzeugt Du ein neues Reading.


attr PoolController userReadings numPool { ReadingsNum("PoolController","Pool","none") }


So sollte es gehen. Komme aber gerade aus dem Mittagsschlaf und mein Kurzer hüpft auf meinen Bauch Rum, also ohne Gewähr.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

choetzu

perfekt, das wars.. Ich musste ein neues Reading generieren. Das macht Sinn.. ;)

Danke für deine Hilfestellung..

Viel Spass mit den Bauchübungen, du kannst es ja aushalten mit deiner Muskelkonstellation ;)
Raspi3, EnOcean, Zwave, Homematic

CoolTux

Zitat von: choetzu am 05 März 2017, 16:48:25
perfekt, das wars.. Ich musste ein neues Reading generieren. Das macht Sinn.. ;)

Danke für deine Hilfestellung..

Viel Spass mit den Bauchübungen, du kannst es ja aushalten mit deiner Muskelkonstellation ;)

Du kannst den Devicenamen PoolController noch gegen $name ohne Anführungszeichen ändern da Du ja aus dem selben Device list.

Das mit den Muskeln ist leider schon 3 Jahre her. Wenn du kleine Kinder hast fehlt Dir die Zeit für sowas. Ist schade, aber die Kleinen sind es wert. In paar Jahren komme ich bestimmt wieder zum trainieren.


Grüße
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

andies

Darf ich mir hier noch einmal hineinhängen? Bei mir klappte
userReadings power_no { ReadingsNum($name,"power",0)}
wobei (analog oben) das Reading "power" den Eintrag "120 W" hatte. Wäre es auch gegangen, den Wert des Readings in ein Attribut einzulesen, auch wenn dabei der Zeitstempel verloren geht? Mir gelang nicht wirklich so etwas wie
userattr power_no { ReadingsNum($name,"power",0)}
und gibt es eine Begründung, warum man das nicht tun soll oder tun kann?
FHEM 6.3 auf RaspPi4 (Raspbian:  6.6.28+; Perl: v5.36.0)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

CoolTux

Nein das kann auch nicht gehen. Alleine schon wenn Du Dir an liest was userattr eigentlich genau macht.
Es gibt Dir die Möglichkeit eigene Attribute in die Attribute Liste hinzufügen.
Man kann aus einer 99_myUtils Sub heraus ein Userattribut befüllen, hat aber das Problem das man die Änderung jedesmal speichern muß, ist also irgendwie die doof.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net