[Gelöst] Tablet UI Problem mit Customreading

Begonnen von Nitaro, 23 Mai 2020, 14:05:50

Vorheriges Thema - Nächstes Thema

Nitaro

Hallo zusammen,

ich lese werte meines NAS aus einer Datei ein, die vom NAS generiert wird.
Das Fhem Device sieht so aus:
defmod XNAS CustomReadings
attr XNAS interval 360
attr XNAS readingDefinitions Core0_Temp:qx(sed -n '1p' /mnt/XYZ/synology_fhem_readings/readings.txt), Core1_Temp:qx(sed -n '2p' /mnt/XYZ/synology_fhem_readings/readings.txt), Core2_Temp:qx(sed -n '3p' /mnt/XYZ/synology_fhem_readings/readings.txt), Core3_Temp:qx(sed -n '4p' /mnt/XYZ/synology_fhem_readings/readings.txt), HDD1_Temp:qx(sed -n '5p' /mnt/XYZ/synology_fhem_readings/readings.txt), HDD2_Temp:qx(sed -n '6p' /mnt/XYZ/synology_fhem_readings/readings.txt), HDD3_Temp:qx(sed -n '7p' /mnt/XYZ/synology_fhem_readings/readings.txt), HDD4_Temp:qx(sed -n '8p' /mnt/XYZ/synology_fhem_readings/readings.txt), Uptime:qx(sed -n '9p' /mnt/XYZ/synology_fhem_readings/readings.txt), Raid1_Usage:qx(sed -n '10p' /mnt/XYZ/synology_fhem_readings/readings.txt), Raid2_Usage:qx(sed -n '11p' /mnt/XYZ/synology_fhem_readings/readings.txt)
attr XNAS room Ankleidezimmer

setstate XNAS OK
setstate XNAS 2020-05-23 13:59:17  Core1_Temp 33.0
setstate XNAS 2020-05-23 13:59:17  Core2_Temp 32.0
setstate XNAS 2020-05-23 13:59:17  Core3_Temp 33.0
setstate XNAS 2020-05-23 13:59:17  HDD1_Temp 28.0
setstate XNAS 2020-05-23 13:59:17  HDD2_Temp 29.0
setstate XNAS 2020-05-23 13:59:17  HDD3_Temp 29.0
setstate XNAS 2020-05-23 13:59:17  HDD4_Temp 28.0
setstate XNAS 2020-05-23 13:59:17  Raid1_Usage 44%
setstate XNAS 2020-05-23 13:59:17  Raid2_Usage 9%
setstate XNAS 2020-05-23 13:59:17  Uptime 1:58
setstate XNAS 2020-05-23 13:59:17 Core0_Temp 34.0
setstate XNAS 2020-05-23 13:59:17 state OK


Jetzt habe ich das Problem, dass sich nur bei dem Reading Core0_Temp im Tablet UI die Temperatur anzeigen lässt.
Bei Core1, Core2, HDD1 usw. wird kein Reading dargestellt.

So ist es im Tablet UI definiert:
<div style="left: 103px; top: 30px" class="ontop normal" data-type="label" data-device="XNAS" data-get="Core0_Temp" data-limits="[20,50,70]" data-unit="%B0C%0A" data-colors='["#088A08","orange","crimson"]'></div>

Es sieht mir irgendwie so aus, dass mein Device XNAS irgendwie nur die Core0_Temp als definierbar ansieht bzw.
als definition erkannt hat.

Kann mir da jemand was zu sagen ?

Danke
Nitaro


TomLee

ZitatKann mir da jemand was zu sagen ?

Es fällt auf das alle Readings ausser state und Core0_Temp ein Leerzeichen an erster Stelle haben.

Gruß

Thomas

Nitaro

 ::) Vielen Dank Thomas, das war es.
Jetzt funktioniert es auch.

TomLee

Sry, ich nochmal.

2-3 Dinge gehen mir im nachhinein durch den Kopf:

Wie genau hast du es jetzt gelöst ?  Ein Leerzeichen dem Readingnamen in data-get hinzugefügt oder das Attribut readingDefinitions korrekt ohne Leerzeichen nach dem Komma definiert ?

Es soll mich jemand korrigieren wenns nicht stimmt, ich hab mir vor kurzem sagen lassen qx is blockierend, also steht dein FHEM alle 6 Minuten kurz.

Bin kein Programmierer, aber was ich bisher so mitgenommen habe bietet FHEM für das was du machst die Funktion FileRead, das zwar etwas länger wie mit sed, aber nicht blockierend.

So könnte das dann aussehen wie ich deinen Inhalt in der Textdatei verstehe:

attr XNAS readingDefinitions Core0_Temp:{(my (@content) = FileRead({FileName => "/mnt/XYZ/synology_fhem_readings/readings.txt", ForceType => "file"});;return $content[1])},Core1_Temp:{(my (@content) = FileRead({FileName => "/mnt/XYZ/synology_fhem_readings/readings.txt", ForceType => "file"});;return $content[2])},Core2_Temp:{(my (@content) = FileRead({FileName => "/mnt/XYZ/synology_fhem_readings/readings.txt", ForceType => "file"});;return $content[3])},Core3_Temp:{(my (@content) = FileRead({FileName => "/mnt/XYZ/synology_fhem_readings/readings.txt", ForceType => "file"});;return $content[4])},HDD1_Temp:{(my (@content) = FileRead({FileName => "/mnt/XYZ/synology_fhem_readings/readings.txt", ForceType => "file"});;return $content[5])},HDD2_Temp:{(my (@content) = FileRead({FileName => "/mnt/XYZ/synology_fhem_readings/readings.txt", ForceType => "file"});;return $content[6])},HDD3_Temp:{(my (@content) = FileRead({FileName => "/mnt/XYZ/synology_fhem_readings/readings.txt", ForceType => "file"});;return $content[7])},HDD4_Temp:{(my (@content) = FileRead({FileName => "/mnt/XYZ/synology_fhem_readings/readings.txt", ForceType => "file"});;return $content[8])},Uptime:{(my (@content) = FileRead({FileName => "/mnt/XYZ/synology_fhem_readings/readings.txt", ForceType => "file"});;return $content[9])},Raid1_Usage:{(my (@content) = FileRead({FileName => "/mnt/XYZ/synology_fhem_readings/readings.txt", ForceType => "file"});;return $content[10])},Raid2_Usage:{(my (@content) = FileRead({FileName => "/mnt/XYZ/synology_fhem_readings/readings.txt", ForceType => "file"});;return $content[11])}

Auch gefällt mir an deiner Lösung nicht das du stets alle 6 Minuten die Werte abfrufst, egal ob sich was ändert oder nicht, es gibt das Modul inotify (nicht in FHEM enthalten (oder jetzt doch, hab nicht nachgeschaut), mal suchen), das reagiert auf Änderungen an der Textdatei, das würd ich dir empfehlen es so zu lösen.

Nitaro

Zitat von: TomLee am 23 Mai 2020, 17:14:58
Sry, ich nochmal.

2-3 Dinge gehen mir im nachhinein durch den Kopf:

Zitat von: TomLee am 23 Mai 2020, 17:14:58Wie genau hast du es jetzt gelöst ?  Ein Leerzeichen dem Readingnamen in data-get hinzugefügt oder das Attribut readingDefinitions korrekt ohne Leerzeichen nach dem Komma definiert ?
Ich habe die readingDefinitions ohne Leerzeichen nach dem Komma definiert.

Zitat von: TomLee am 23 Mai 2020, 17:14:58Es soll mich jemand korrigieren wenns nicht stimmt, ich hab mir vor kurzem sagen lassen qx is blockierend, also steht dein FHEM alle 6 Minuten kurz.
Bis jetzt stell ich nichts in der Richtung fest, Freezmon sagt auch nichts, falls es das melden würde.

Zitat von: TomLee am 23 Mai 2020, 17:14:58Bin kein Programmierer, aber was ich bisher so mitgenommen habe bietet FHEM für das was du machst die Funktion FileRead, das zwar etwas länger wie mit sed, aber nicht blockierend.

So könnte das dann aussehen wie ich deinen Inhalt in der Textdatei verstehe:

attr XNAS readingDefinitions Core0_Temp:{(my (@content) = FileRead({FileName => "/mnt/XYZ/synology_fhem_readings/readings.txt", ForceType => "file"});;return $content[1])},Core1_Temp:{(my (@content) = FileRead({FileName => "/mnt/XYZ/synology_fhem_readings/readings.txt", ForceType => "file"});;return $content[2])},Core2_Temp:{(my (@content) = FileRead({FileName => "/mnt/XYZ/synology_fhem_readings/readings.txt", ForceType => "file"});;return $content[3])},Core3_Temp:{(my (@content) = FileRead({FileName => "/mnt/XYZ/synology_fhem_readings/readings.txt", ForceType => "file"});;return $content[4])},HDD1_Temp:{(my (@content) = FileRead({FileName => "/mnt/XYZ/synology_fhem_readings/readings.txt", ForceType => "file"});;return $content[5])},HDD2_Temp:{(my (@content) = FileRead({FileName => "/mnt/XYZ/synology_fhem_readings/readings.txt", ForceType => "file"});;return $content[6])},HDD3_Temp:{(my (@content) = FileRead({FileName => "/mnt/XYZ/synology_fhem_readings/readings.txt", ForceType => "file"});;return $content[7])},HDD4_Temp:{(my (@content) = FileRead({FileName => "/mnt/XYZ/synology_fhem_readings/readings.txt", ForceType => "file"});;return $content[8])},Uptime:{(my (@content) = FileRead({FileName => "/mnt/XYZ/synology_fhem_readings/readings.txt", ForceType => "file"});;return $content[9])},Raid1_Usage:{(my (@content) = FileRead({FileName => "/mnt/XYZ/synology_fhem_readings/readings.txt", ForceType => "file"});;return $content[10])},Raid2_Usage:{(my (@content) = FileRead({FileName => "/mnt/XYZ/synology_fhem_readings/readings.txt", ForceType => "file"});;return $content[11])}

Der bin ich auch nicht, mit mit Perl tue ich mich sehr schwer. Danke dafür, das versuche ich dann mal.


Zitat von: TomLee am 23 Mai 2020, 17:14:58Auch gefällt mir an deiner Lösung nicht das du stets alle 6 Minuten die Werte abfrufst, egal ob sich was ändert oder nicht, es gibt das Modul inotify (nicht in FHEM enthalten (oder jetzt doch, hab nicht nachgeschaut), mal suchen), das reagiert auf Änderungen an der Textdatei, das würd ich dir empfehlen es so zu lösen.
Bei den Werten die ich Abfrage wird sich wohl leider immer etwas ändern. Die Textdatei wird vom NAS via Cron erstellt und fügt die Werte der ausgelesenen Sensoren in die Textdatei ein.

Verbesserungen sind immer Willkommen  :)

Nitaro

Zitat von: TomLee am 23 Mai 2020, 17:14:58
Sry, ich nochmal.
attr XNAS readingDefinitions Core0_Temp:{(my (@content) = FileRead({FileName => "/mnt/XYZ/synology_fhem_readings/readings.txt", ForceType => "file"});;return $content[1])},Core1_Temp:{(my (@content) = FileRead({FileName => "/mnt/XYZ/synology_fhem_readings/readings.txt", ForceType => "file"});;return $content[2])},Core2_Temp:{(my (@content) = FileRead({FileName => "/mnt/XYZ/synology_fhem_readings/readings.txt", ForceType => "file"});;return $content[3])},Core3_Temp:{(my (@content) = FileRead({FileName => "/mnt/XYZ/synology_fhem_readings/readings.txt", ForceType => "file"});;return $content[4])},HDD1_Temp:{(my (@content) = FileRead({FileName => "/mnt/XYZ/synology_fhem_readings/readings.txt", ForceType => "file"});;return $content[5])},HDD2_Temp:{(my (@content) = FileRead({FileName => "/mnt/XYZ/synology_fhem_readings/readings.txt", ForceType => "file"});;return $content[6])},HDD3_Temp:{(my (@content) = FileRead({FileName => "/mnt/XYZ/synology_fhem_readings/readings.txt", ForceType => "file"});;return $content[7])},HDD4_Temp:{(my (@content) = FileRead({FileName => "/mnt/XYZ/synology_fhem_readings/readings.txt", ForceType => "file"});;return $content[8])},Uptime:{(my (@content) = FileRead({FileName => "/mnt/XYZ/synology_fhem_readings/readings.txt", ForceType => "file"});;return $content[9])},Raid1_Usage:{(my (@content) = FileRead({FileName => "/mnt/XYZ/synology_fhem_readings/readings.txt", ForceType => "file"});;return $content[10])},Raid2_Usage:{(my (@content) = FileRead({FileName => "/mnt/XYZ/synology_fhem_readings/readings.txt", ForceType => "file"});;return $content[11])}

Bringt leider nur "ERROR" in den Readings.

TomLee

Das FileRead-Beispiel hatte ich nur in einem notifiy getestet (da klappt das auslesen) und dann einfach auf deine readingDefinitions angepasst.

Habs jetzt auch mal in einer CustomReadings-Definition ausprobiert, bekomme auch ERROR im Reading, keine Logausgaben.
Keinen Schimmer an was es liegt, kann man vlt. kein Perl verwenden ?

Ehrlich gesagt les ich heute das erste mal von CustomReadings und alles (Wiki, Forumthread) deutet daraufhin das ich das mit dem blockierenden qx wohl nicht ganz verstanden habe oder es nicht immer (je nachdem wo man es verwendet) blockierend ist. :-\

Nitaro

Ich habe in einem anderen Thread auch was davon gelesen das qx blockierend sein soll.
Sitze gerade daran das nicht als Datei von fhem direkt einzulesen, sondern das der fhem server die Datei linuxseitig "einliest" und dann
über das Script ein setreading macht. Ist zwar etwas umständlich aber soll wohl gehen.
Ich mache das von anderen Systemen mit netcat, das möchte ich aber nicht auf das NAS installieren.

amenomade

#8
Zitat von: TomLee am 23 Mai 2020, 19:04:35
Habs jetzt auch mal in einer CustomReadings-Definition ausprobiert, bekomme auch ERROR im Reading, keine Logausgaben.
Keinen Schimmer an was es liegt, kann man vlt. kein Perl verwenden ?
Zu viele Klammern. Das bringt auch aus dem Kommandofeld eine Fehlermeldung.


{ my (@content) = FileRead({FileName => "/mnt/XYZ/synology_fhem_readings/readings.txt", ForceType => "file"});;return $content[0] }
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Nitaro

Zitat von: amenomade am 23 Mai 2020, 19:24:05
Zu viele Klammern. Das bringt auch aus dem Kommandofeld eine Fehlermeldung.


{ my (@content) = FileRead({FileName => "/mnt/XYZ/synology_fhem_readings/readings.txt", ForceType => "file"});;return $content[0] }

Heißt das, dass man kein Perl verwenden kann weil dann zuviele Klammern in der readingDefinitions sind ?

TomLee

Ändert nix:

defmod XNAS CustomReadings
attr XNAS interval 60
attr XNAS readingDefinitions Core0_Temp:{ my (@content) = FileRead({FileName => "/opt/fhem/UMFHEME.csv", ForceType => "file"});;;;return $content[0] }
attr XNAS room Test
attr XNAS verbose 5

setstate XNAS Errors
setstate XNAS 2020-05-23 19:33:18 Core0_Temp ERROR
setstate XNAS 2020-05-23 19:33:18 state Errors


amenomade

#11
Zitat von: Nitaro am 23 Mai 2020, 19:33:27
Heißt das, dass man kein Perl verwenden kann weil dann zuviele Klammern in der readingDefinitions sind ?

Doch kann man. Was ich dir gegeben habe funktioniert bei mir.

Probiere einfach dein Kommando direkt im Eingabefeld von Fhem, Du wirst sehen, was der Fehler ist. Kann wohl z.B. ein Berechtigungsproblem sein...

Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Nitaro

Zitat von: amenomade am 23 Mai 2020, 19:41:50
Kann wohl z.B. ein Berechtigungsproblem sein...
Schließe ich mal aus.

Kannst du mir bitte mal den kompletten Befehl schicken ?

TomLee

Zitat von: TomLee am 23 Mai 2020, 19:35:18
Ändert nix:

:), weils $content[0] auch nicht gibt, jetzt klappts:

defmod XNAS CustomReadings
attr XNAS interval 60
attr XNAS readingDefinitions Core0_Temp:{ my (@content) = FileRead({FileName => "/opt/fhem/UMFHEME.csv", ForceType => "file"});;;;return $content[1]}
attr XNAS room Test
attr XNAS verbose 5

setstate XNAS OK
setstate XNAS 2020-05-23 19:52:56 Core0_Temp 123
setstate XNAS 2020-05-23 19:52:56 state OK

amenomade

Ja, weil $content[0] der $error Rückgabewert von FileRead ist. Kein Fehler => undef.

Eigentlich wäre es deswegen besser, $error von FileRead zu testen!


defmod cr1 CustomReadings
attr cr1 readingDefinitions custom1:{ my ($error, @content) = FileRead({FileName => "/opt/fhem/existiert.nicht", ForceType => "file"});;;; if ($error) {return $error} else {return $content[1]} }
attr cr1 room 1

setstate cr1 OK
setstate cr1 2020-05-23 20:02:56 custom1 Can't open /opt/fhem/existiert.nicht: No such file or directory
setstate cr1 2020-05-23 20:02:56 state OK


Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus