Autor Thema: Readings formatieren, konkret: Einheiten entfernen  (Gelesen 1615 mal)

Offline chrille76

  • Jr. Member
  • **
  • Beiträge: 50
Readings formatieren, konkret: Einheiten entfernen
« am: 04 März 2017, 19:41:18 »
Guten Abend,

ich habe verschiedene Fibaro Produkte im Einsatz, deren Werte ich z. B. in ein DbLog schreibe. Konkret geht es z. B. um die Readings "temperature" des Motion Sensors und "power" beim Wall Plug. Diese enthalten bspw. folgende Werte: "22.3 C" oder "195.2 W"

Wenn ich damit Berechnungen durchführen oder ein SVG Plot erzeugen möchte, bekomme ich natürlich Fehler der Art "PERL WARNING: Argument "22.3 C" isn't numeric in sprintf at ./FHEM/98_SVG.pm line 209".

Ich suche jetzt schon eine Weile, kann aber irgendwie nicht das richtige finden. Alles beschäftigt sich irgendwie damit eine Einheit anzuhängen, nicht aber, sie abzuschneiden. Wie kann ich das Reading ändern? UserReading wäre evtl. eine Variante...!? Ich benötige allerdings das Reading im Originalzustand gar nicht und würde das am liebsten gleich anders erzeugen (lassen). Also so, dass von mir aus von vornherein gleich "22.3" im Reading steht.

Benötige einen Tipp für den Einstieg oder einen Hinweis, wonach genau ich suchen sollte.

Danke und Gruß,
Christian

Offline CoolTux

  • Developer
  • Hero Member
  • ****
  • Beiträge: 16011
Antw:Readings formatieren, konkret: Einheiten entfernen
« Antwort #1 am: 04 März 2017, 19:44:14 »
Hallo Christian,

Das Reading selber kannst Du nicht beeinflussen. Es sei denn Du fummelst am Modulcode ein. Am besten Du machst ein userReading und logst das mit.
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.me/MOldenburg
Mein GitHub: https://github.com/LeonGaultier
kein Support für cfg Editierer

Offline JoWiemann

  • Tester
  • Hero Member
  • ****
  • Beiträge: 2432
Antw:Readings formatieren, konkret: Einheiten entfernen
« Antwort #2 am: 04 März 2017, 19:47:25 »
Kannst Du mit einem UserReading und der Perl Funktion split() regeln.

(split(/ /,<reading>))[0]

Grüße Jörg
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

Offline betateilchen

  • Developer
  • Hero Member
  • ****
  • Beiträge: 15081
  • s/fhem\.cfg/configDB/g
Antw:Readings formatieren, konkret: Einheiten entfernen
« Antwort #3 am: 04 März 2017, 19:48:52 »
Oder Du nimmst einfach den Wert des readings und addierst 0 dazu.
-----------------------
Unaufgeforderte Anfragen per email werden von mir nicht beantwortet. Dafür ist das Forum da.
-----------------------
Nächster Hamburg-Stammtisch: 14.12.2018 - 18:30 Uhr

Offline CoolTux

  • Developer
  • Hero Member
  • ****
  • Beiträge: 16011
Antw:Readings formatieren, konkret: Einheiten entfernen
« Antwort #4 am: 04 März 2017, 19:52:56 »
Oder Du nimmst einfach den Wert des readings und addierst 0 dazu.

Interessant. Das muss ich mir mal ansehen.
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.me/MOldenburg
Mein GitHub: https://github.com/LeonGaultier
kein Support für cfg Editierer

Offline chrille76

  • Jr. Member
  • **
  • Beiträge: 50
Antw:Readings formatieren, konkret: Einheiten entfernen
« Antwort #5 am: 04 März 2017, 20:14:25 »
Danke für eure Tipps. Werde dann mit userReadings arbeiten. Zum Glück mache ich bisher damit noch nicht so viel, sonst hätte ich jetzt eine DB-Migration vor mir.

Kannst Du mit einem UserReading und der Perl Funktion split() regeln.

(split(/ /,<reading>))[0]

Grüße Jörg

Danke für den Tipp!

Oder Du nimmst einfach den Wert des readings und addierst 0 dazu.


Interessante Variante. Hilft vermutlich bei Berechnungen, bei der Ploterzeugung wäre das Problem immer noch da. Oder beziehst du dich auf den Tipp von Jörg?


Offline chrille76

  • Jr. Member
  • **
  • Beiträge: 50
Antw:Readings formatieren, konkret: Einheiten entfernen
« Antwort #6 am: 04 März 2017, 21:01:06 »
Kleine Anmerkung noch. Die Variante mit der Addition mit 0 funktioniert grundsätzlich, sorgt im Log aber für unschöne Einträge der Art:

2017.03.04 20:38:43 3: eval: {(ReadingsVal($name,"power",0.0)) + 0}
2017.03.04 20:38:44 1: PERL WARNING: Argument "0.0 W" isn't numeric in addition (+) at (eval 13669) line 1.

Von daher scheint split besser geeignet zu sein.

Offline CoolTux

  • Developer
  • Hero Member
  • ****
  • Beiträge: 16011
Antw:Readings formatieren, konkret: Einheiten entfernen
« Antwort #7 am: 04 März 2017, 21:04:30 »
Kannst auch gleich ReadingsNum nehmen. Das brauchst x 0 nicht
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.me/MOldenburg
Mein GitHub: https://github.com/LeonGaultier
kein Support für cfg Editierer

Offline betateilchen

  • Developer
  • Hero Member
  • ****
  • Beiträge: 15081
  • s/fhem\.cfg/configDB/g
Antw:Readings formatieren, konkret: Einheiten entfernen
« Antwort #8 am: 04 März 2017, 21:09:47 »
ReadingsNum() funktioniert aber nicht, wenn man Daten aus dem Log im Plot verarbeiten will ;)

Zitat
Wenn ich damit Berechnungen durchführen oder ein SVG Plot erzeugen möchte,

Kleine Anmerkung noch. Die Variante mit der Addition mit 0 funktioniert grundsätzlich, sorgt im Log aber für unschöne Einträge der Art:
...
Von daher scheint split besser geeignet zu sein.

Die perl Warnung tut erstens nicht wirklich weh und zweitens könnte man sie sogar abschalten. Aber wozu?

Und von der performance ist eine Addition immer besser geeignet als ein split.
-----------------------
Unaufgeforderte Anfragen per email werden von mir nicht beantwortet. Dafür ist das Forum da.
-----------------------
Nächster Hamburg-Stammtisch: 14.12.2018 - 18:30 Uhr

Offline chrille76

  • Jr. Member
  • **
  • Beiträge: 50
Antw:Readings formatieren, konkret: Einheiten entfernen
« Antwort #9 am: 04 März 2017, 21:20:24 »
ReadingsNum() funktioniert aber nicht, wenn man Daten aus dem Log im Plot verarbeiten will ;)

Naja, zukünftig ist das Ziel, die Plots aus dem DbLog zu erzeugen. Von daher spielt das dann keine Rolle mehr. Schaue mir also auch mal ReadingsNum an, hab ich bisher noch nicht verwendet.

Die perl Warnung tut erstens nicht wirklich weh und zweitens könnte man sie sogar abschalten. Aber wozu?

Und von der performance ist eine Addition immer besser geeignet als ein split.

Nein, tut nicht weh. Außer, dass es momentan mein Log vollmüllt. Da muss ich aber sowieso noch optimieren. War ich noch nicht dran, das Device ist neu. Schreibt alle paar Sekunden den aktuellen Stromverbrauch und dementsprechend auch das Warning ins Log.

Performance ist ein Argument, hab ich mir schon gedacht, kenne den Nachteil von Stringoperationen aus anderen Programmiersprachen.

Edit: Kriege das erste Zitat irgendwie nicht hin :(
Edit2: Jetzt hab ich's :)
« Letzte Änderung: 04 März 2017, 21:43:15 von chrille76 »

Offline CoolTux

  • Developer
  • Hero Member
  • ****
  • Beiträge: 16011
Antw:Readings formatieren, konkret: Einheiten entfernen
« Antwort #10 am: 04 März 2017, 22:19:18 »
ReadingsNum() funktioniert aber nicht, wenn man Daten aus dem Log im Plot verarbeiten will ;)

Ah jetzt verstehe ich erst die Zusammenhänge.


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.me/MOldenburg
Mein GitHub: https://github.com/LeonGaultier
kein Support für cfg Editierer

Offline christian66

  • New Member
  • *
  • Beiträge: 16
Antw:Readings formatieren, konkret: Einheiten entfernen
« Antwort #11 am: 12 August 2018, 21:40:30 »
Hallo,
ich komme einfach nicht klar! Möchte mir ein UserReading "power_2" schaffen, das den wert von "power" ohne Einheit hat bekomme das aber einfach nicht hin. Was mache ich falsch??
Internals:
   CHANGED   
   DEF        Powerline546E:E8_DF_70_16_6C_27 powerMeter,switch
   IODev      Powerline546E
   LASTInputDev Powerline546E
   MSGCNT     4704
   NAME       FBDECT_Powerline546E_E8_DF_70_16_6C_27
   NR         154
   Powerline546E_MSGCNT 4704
   Powerline546E_TIME 2018-08-12 21:32:23
   STATE      on
   TYPE       FBDECT
   id         E8_DF_70_16_6C_27
   props      powerMeter,switch
   READINGS:
     2018-08-12 21:32:23   AIN             E8:DF:70:16:6C:27
     2018-08-12 21:32:23   FBNAME          Garage-Freddy
     2018-08-12 21:32:23   FBPROP          powerMeter,switch
     2018-08-12 21:32:23   FBTYPE          FRITZ!Powerline 546E
     2018-08-12 21:32:23   ID              1000
     2018-08-12 21:32:23   devicelock      no
     2018-08-12 21:32:23   energy          476 Wh
     2018-08-12 21:32:23   fwversion       06.93
     2018-08-12 21:32:23   locked          no
     2018-08-12 21:32:23   mode            manuell
     2018-08-12 21:32:23   power           0.28 W
     2018-08-12 21:32:23   power_2         Error evaluating FBDECT_Powerline546E_E8_DF_70_16_6C_27 userReading power_2: Bareword "power" not allowed while "strict subs" in use at (eval 198483) line 1.

     2018-08-12 21:32:23   present         yes
     2018-08-12 21:32:23   state           on
Attributes:
   IODev      Powerline546E
   alias      Freddy_2
   devStateIcon on:remotecontrol/black_btn_GREEN off:remotecontrol/black_btn_RED
   event-on-change-reading power,state
   group      Freddy
   icon       message_socket
   room       1.2_Garten,FBDECT
   userReadings power_2 {(split(/ /,power))[0]}

Wäre für Hilfe echt dankbar!!

Christian

Offline CoolTux

  • Developer
  • Hero Member
  • ****
  • Beiträge: 16011
Antw:Readings formatieren, konkret: Einheiten entfernen
« Antwort #12 am: 13 August 2018, 06:07:25 »
userReadings power_2:power:.* { ReadingsNum($name,'power',0) }
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.me/MOldenburg
Mein GitHub: https://github.com/LeonGaultier
kein Support für cfg Editierer

Offline christian66

  • New Member
  • *
  • Beiträge: 16
Antw:Readings formatieren, konkret: Einheiten entfernen
« Antwort #13 am: 13 August 2018, 12:43:09 »
Hm,
bleibt eigentlich das gleiche, im Error hat es sich nur auf  (eval 2799037) geändert ... ???

Offline CoolTux

  • Developer
  • Hero Member
  • ****
  • Beiträge: 16011
Antw:Readings formatieren, konkret: Einheiten entfernen
« Antwort #14 am: 13 August 2018, 13:48:35 »
Zeig mal bitte noch mal ein list und die genaue Fehlermeldung aus dem Log
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.me/MOldenburg
Mein GitHub: https://github.com/LeonGaultier
kein Support für cfg Editierer

 

decade-submarginal