FHEM Forum

FHEM => Frontends => TabletUI => Thema gestartet von: Nitaro am 23 Mai 2020, 14:05:50

Titel: [Gelöst] Tablet UI Problem mit Customreading
Beitrag von: Nitaro am 23 Mai 2020, 14:05:50
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

Titel: Antw:Tablet UI Problem mit Customreading
Beitrag von: TomLee am 23 Mai 2020, 14:30:58
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
Titel: Antw:Tablet UI Problem mit Customreading
Beitrag von: Nitaro am 23 Mai 2020, 14:58:54
 ::) Vielen Dank Thomas, das war es.
Jetzt funktioniert es auch.
Titel: Antw:[Gelöst] Tablet UI Problem mit Customreading
Beitrag von: TomLee am 23 Mai 2020, 17:14:58
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.
Titel: Antw:[Gelöst] Tablet UI Problem mit Customreading
Beitrag von: Nitaro am 23 Mai 2020, 17:25:01
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  :)
Titel: Antw:[Gelöst] Tablet UI Problem mit Customreading
Beitrag von: Nitaro am 23 Mai 2020, 18:25:54
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.
Titel: Antw:[Gelöst] Tablet UI Problem mit Customreading
Beitrag von: TomLee am 23 Mai 2020, 19:04:35
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. :-\
Titel: Antw:[Gelöst] Tablet UI Problem mit Customreading
Beitrag von: Nitaro am 23 Mai 2020, 19:12:06
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.
Titel: Antw:[Gelöst] Tablet UI Problem mit Customreading
Beitrag von: amenomade am 23 Mai 2020, 19:24:05
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] }
Titel: Antw:[Gelöst] Tablet UI Problem mit Customreading
Beitrag von: Nitaro am 23 Mai 2020, 19:33:27
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 ?
Titel: Antw:[Gelöst] Tablet UI Problem mit Customreading
Beitrag von: TomLee am 23 Mai 2020, 19:35:18
Ä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

Titel: Antw:[Gelöst] Tablet UI Problem mit Customreading
Beitrag von: amenomade am 23 Mai 2020, 19:41:50
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...

Titel: Antw:[Gelöst] Tablet UI Problem mit Customreading
Beitrag von: Nitaro am 23 Mai 2020, 19:50:27
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 ?
Titel: Antw:[Gelöst] Tablet UI Problem mit Customreading
Beitrag von: TomLee am 23 Mai 2020, 19:55:00
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
Titel: Antw:[Gelöst] Tablet UI Problem mit Customreading
Beitrag von: amenomade am 23 Mai 2020, 20:03:32
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


Titel: Antw:[Gelöst] Tablet UI Problem mit Customreading
Beitrag von: Nitaro am 23 Mai 2020, 20:16:47
if ($error) {return $error} else {return $content[1]}
Lief bei mir zwar wieder auf einen Fehler, aber ohne funktioniert es prima  :)
Vielen Dank Euch beiden !
Titel: Antw:[Gelöst] Tablet UI Problem mit Customreading
Beitrag von: TomLee am 23 Mai 2020, 20:23:07
Also ich fänds gut wenn du für künftige Leser(/Verbesserungsvorschläge) noch deine endgültige Lösung zeigst.
Titel: Antw:[Gelöst] Tablet UI Problem mit Customreading
Beitrag von: Nitaro am 23 Mai 2020, 20:38:41
Ja du hast natürlich recht.

Ich habe auf meinem Synology DS918+ Probleme mit dem auslesen via SNMP gehabt.
Daher habe ich auf einem Volume des NAS folgendes bash script angelegt um entsprechende Werte (Temperaturen, Belegung, Uptime) auszulesen:

#!/bin/sh

core0=$(cat /sys/bus/platform/devices/coretemp.0/hwmon/hwmon0/temp2_input | sed 's/...$/.0/')
core1=$(cat /sys/bus/platform/devices/coretemp.0/hwmon/hwmon0/temp3_input | sed 's/...$/.0/')
core2=$(cat /sys/bus/platform/devices/coretemp.0/hwmon/hwmon0/temp4_input | sed 's/...$/.0/')
core3=$(cat /sys/bus/platform/devices/coretemp.0/hwmon/hwmon0/temp5_input | sed 's/...$/.0/')

echo "$core0"  > /volume1/XYZ/synology_fhem_readings/readings1.txt
echo "$core1" >> /volume1/XYZ/synology_fhem_readings/readings1.txt
echo "$core2" >> /volume1/XYZ/synology_fhem_readings/readings1.txt
echo "$core3" >> /volume1/XYZ/synology_fhem_readings/readings1.txt

HDD1=$(smartctl -d sat -A /dev/sda | grep -i Temperature_Celsius | tr -s ' ' | cut -d\  -f 10 | sed 's/$/.0/')
HDD2=$(smartctl -d sat -A /dev/sdb | grep -i Temperature_Celsius | tr -s ' ' | cut -d\  -f 10 | sed 's/$/.0/')
HDD3=$(smartctl -d sat -A /dev/sdc | grep -i Temperature_Celsius | tr -s ' ' | cut -d\  -f 10 | sed 's/$/.0/')
HDD4=$(smartctl -d sat -A /dev/sdd | grep -i Temperature_Celsius | tr -s ' ' | cut -d\  -f 10 | sed 's/$/.0/')

echo "$HDD1" >> /volume1/XYZ/synology_fhem_readings/readings1.txt
echo "$HDD2" >> /volume1/XYZ/synology_fhem_readings/readings1.txt
echo "$HDD3" >> /volume1/XYZ/synology_fhem_readings/readings1.txt
echo "$HDD4" >> /volume1/XYZ/synology_fhem_readings/readings1.txt

UPTIME1=$(uptime | awk '{print $3" "$4}' | cut -d ',' -f1)
echo "$UPTIME1" >> /volume1/XYZ/synology_fhem_readings/readings1.txt

DISKUSAGE1=$(df | tr -s ' ' $'\t' | grep cachedev_0 | cut -f5)
DISKUSAGE2=$(df | tr -s ' ' $'\t' | grep volume_2 | cut -f5)


echo "$DISKUSAGE1" >> /volume1/XYZ/synology_fhem_readings/readings1.txt
echo "$DISKUSAGE2" >> /volume1/XYZ/synology_fhem_readings/readings1.txt


Dann habe ich auf dem NAS unter Systemsteuerung->Aufgabenplanung eine Aufgabe für das Script angelegt
(Erstellen->Geplante Aufgabe->Benutzerdefiniertes Script). Unter Zeitplan habe ich die Ausführung alle 5 Minuten ausgewählt.
In der Registerkarte "Aufgabeneinstellungen" habe ich bei "Befehl ausführen" folgendes eingetragen:
bash /volume1/XYZ/synology_fhem_readings/synology_fhem.sh

Mein fhem Server hat das Laufwerk des NAS unter /mnt/ gemountet.
Das fhem Device welches nun alle 6 Minuten die erzeugte Datei des Nas einliest sieht so aus:

defmod NAS CustomReadings
attr NAS interval 360
attr NAS readingDefinitions Core0_Temp:{ my ($error,@content) = FileRead({FileName => "/mnt/XYZ/synology_fhem_readings/readings1.txt", ForceType => "file"});;if ($error) {return $error} else {return $content[0]} },Core1_Temp:{ my ($error,@content) = FileRead({FileName => "/mnt/XYZ/synology_fhem_readings/readings1.txt", ForceType => "file"});;if ($error) {return $error} else {return $content[1]} },Core2_Temp:{ my ($error,@content) = FileRead({FileName => "/mnt/XYZ/synology_fhem_readings/readings1.txt", ForceType => "file"});;if ($error) {return $error} else {return $content[2]} },Core3_Temp:{ my ($error,@content) = FileRead({FileName => "/mnt/XYZ/synology_fhem_readings/readings1.txt", ForceType => "file"});;if ($error) {return $error} else {return $content[3]} },HDD1_Temp:{ my ($error,@content) = FileRead({FileName => "/mnt/XYZ/synology_fhem_readings/readings1.txt", ForceType => "file"});;if ($error) {return $error} else {return $content[4]} },HDD2_Temp:{ my ($error,@content) = FileRead({FileName => "/mnt/XYZ/synology_fhem_readings/readings1.txt", ForceType => "file"});;if ($error) {return $error} else {return $content[5]} },HDD3_Temp:{ my ($error,@content) = FileRead({FileName => "/mnt/XYZ/synology_fhem_readings/readings1.txt", ForceType => "file"});;if ($error) {return $error} else {return $content[6]} },HDD4_Temp:{ my ($error,@content) = FileRead({FileName => "/mnt/XYZ/synology_fhem_readings/readings1.txt", ForceType => "file"});;if ($error) {return $error} else {return $content[7]} },Uptime:{ my ($error,@content) = FileRead({FileName => "/mnt/XYZ/synology_fhem_readings/readings1.txt", ForceType => "file"});;if ($error) {return $error} else {return $content[8]} },Raid1_Usage:{ my ($error,@content) = FileRead({FileName => "/mnt/XYZ/synology_fhem_readings/readings1.txt", ForceType => "file"});;if ($error) {return $error} else {return $content[9]} },Raid2_Usage:{ my ($error,@content) = FileRead({FileName => "/mnt/XYZ/synology_fhem_readings/readings1.txt", ForceType => "file"});;if ($error) {return $error} else {return $content[10]} }
attr NAS room Ankleidezimmer

setstate NAS OK
setstate NAS 2020-05-26 12:38:00 Core0_Temp 34.0
setstate NAS 2020-05-26 12:38:00 Core1_Temp 35.0
setstate NAS 2020-05-26 12:38:00 Core2_Temp 33.0
setstate NAS 2020-05-26 12:38:00 Core3_Temp 33.0
setstate NAS 2020-05-26 12:38:00 HDD1_Temp 28.0
setstate NAS 2020-05-26 12:38:00 HDD2_Temp 29.0
setstate NAS 2020-05-26 12:38:00 HDD3_Temp 29.0
setstate NAS 2020-05-26 12:38:00 HDD4_Temp 28.0
setstate NAS 2020-05-26 12:38:00 Raid1_Usage 44%
setstate NAS 2020-05-26 12:38:00 Raid2_Usage 9%
setstate NAS 2020-05-26 12:38:00 Uptime 19:39
setstate NAS 2020-05-26 12:38:00 state OK
Titel: Antw:[Gelöst] Tablet UI Problem mit Customreading
Beitrag von: amenomade am 23 Mai 2020, 20:50:34
Zitat von: Nitaro am 23 Mai 2020, 20:16:47
if ($error) {return $error} else {return $content[1]}
Lief bei mir zwar wieder auf einen Fehler, aber ohne funktioniert es prima  :)
Vielen Dank Euch beiden !
Natürlich hattest Du auch am Anfang my ($error, @content) geändert, und das letzte } nicht vergessen? ;)

Aber wiederum: man kann die Befehle direkt im Eingabefeld von Fhem inkl. die { } testen! So sieht man sofort, was der Fehler ist. Auch ggf wenn es ein Syntax-Fehler ist.
Titel: Antw:[Gelöst] Tablet UI Problem mit Customreading
Beitrag von: Nitaro am 23 Mai 2020, 21:05:25
Zitat von: amenomade am 23 Mai 2020, 20:50:34
Natürlich hattest Du auch am Anfang my ($error, @content) geändert, und das letzte } nicht vergessen? ;)
Natürlich hatte ich das $error am Anfang nicht aber die } am Ende  ;D

Wenn ich mal ganz viel Geduld aufbringen kann, versuche ich der
der Perl Syntax nochmal die Freundschaft anzubieten  :)
Titel: Antw:[Gelöst] Tablet UI Problem mit Customreading
Beitrag von: Nitaro am 26 Mai 2020, 10:26:51
Kann mir noch mal bitte jemand bei der Syntax helfen ?

Ich habe den obrigen Vorschlag mit $error versucht einzubauen, das sieht dann wie folgt aus:
{ my ($error,@content) = FileRead({FileName => "/mnt/XYZ/synology_fhem_readings/readings1.txt", ForceType => "file"});if ($error) {return $error} else {return $content[9]} }

Ich bekomme bei dem Versuch, die über die Kommandozeile dann die Fehlermeldung:
Unknown command {, try help.
IF: no left bracket:  {return $error} else {return $content[9]} }


Wo hab ich da den Fehler ?
Titel: Antw:[Gelöst] Tablet UI Problem mit Customreading
Beitrag von: TomLee am 26 Mai 2020, 10:38:46
Für die Kommandozeile nimm mal zwei Semikolon:

Zitat{ my ($error,@content) = FileRead({FileName => "/mnt/XYZ/synology_fhem_readings/readings1.txt", ForceType => "file"});;if ($error) {return $error} else {return $content[9]} }

Bekomme zwar ne 1 zurück, das aber denk ich korrekt so, keine Meldung im Log.
Titel: Antw:[Gelöst] Tablet UI Problem mit Customreading
Beitrag von: Nitaro am 26 Mai 2020, 11:15:19
Danke, das funktionert...etwas  :D
Er gibt den Wert aus Zeile 10 der Textdatei zurück, nicht wie angegeben aus der 9.
Auch wenn ich das so unter readingDefinitions eintrage:
Uptime:{ my ($error,@content) = FileRead({FileName => "/mnt/XYZ/synology_fhem_readings/readings1.txt", ForceType => "file"});if ($error) {return $error} else {return $content[9]} }
Erhalte ich den Wert aus Zeile 10.

Wenn ich es, so wie ich es hatte ohne error, eintrage:
Uptime:{ my (@content) = FileRead({FileName => "/mnt/XYZ/synology_fhem_readings/readings1.txt", ForceType => "file"});return $content[9] }
Erhalte ich den Wert aus Zeile 9
Titel: Antw:[Gelöst] Tablet UI Problem mit Customreading
Beitrag von: TomLee am 26 Mai 2020, 11:39:37
ZitatEr gibt den Wert aus Zeile 10 der Textdatei zurück, nicht wie angegeben aus der 9.
Auch wenn ich das so unter readingDefinitions eintrage:

Ist bei mir auch so, habs nochmal ausprobiert.
Das 1 bei mir zurückkam lag daran das ich wegen schnell schnell das 9. Element (wie du) versucht hatte auszulesen, welches bei meiner Testdatei nicht existiert  ::), die Datei hat nur 3 Zeilen.
Titel: Antw:[Gelöst] Tablet UI Problem mit Customreading
Beitrag von: Nitaro am 26 Mai 2020, 11:52:33
Ich bekomme den Wert der ersten Zeile mit Hilfe von [0] und nicht mit [1].
Sieht aus als würde die Zählweise jetzt bei 0 beginnen.