Autor Thema: [Gelöst] Tablet UI Problem mit Customreading  (Gelesen 466 mal)

Offline Nitaro

  • Jr. Member
  • **
  • Beiträge: 72
Antw:[Gelöst] Tablet UI Problem mit Customreading
« Antwort #15 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 !

Offline TomLee

  • Hero Member
  • *****
  • Beiträge: 2063
Antw:[Gelöst] Tablet UI Problem mit Customreading
« Antwort #16 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.

Offline Nitaro

  • Jr. Member
  • **
  • Beiträge: 72
Antw:[Gelöst] Tablet UI Problem mit Customreading
« Antwort #17 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
« Letzte Änderung: 26 Mai 2020, 12:41:22 von Nitaro »
Gefällt mir Gefällt mir x 1 Liste anzeigen

Offline amenomade

  • Developer
  • Hero Member
  • ****
  • Beiträge: 5601
Antw:[Gelöst] Tablet UI Problem mit Customreading
« Antwort #18 am: 23 Mai 2020, 20:50:34 »
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.
FHEM 5.9 Pi 3, EchoDot, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Offline Nitaro

  • Jr. Member
  • **
  • Beiträge: 72
Antw:[Gelöst] Tablet UI Problem mit Customreading
« Antwort #19 am: 23 Mai 2020, 21:05:25 »
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  :)

Offline Nitaro

  • Jr. Member
  • **
  • Beiträge: 72
Antw:[Gelöst] Tablet UI Problem mit Customreading
« Antwort #20 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 ?

Offline TomLee

  • Hero Member
  • *****
  • Beiträge: 2063
Antw:[Gelöst] Tablet UI Problem mit Customreading
« Antwort #21 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.

Offline Nitaro

  • Jr. Member
  • **
  • Beiträge: 72
Antw:[Gelöst] Tablet UI Problem mit Customreading
« Antwort #22 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
« Letzte Änderung: 26 Mai 2020, 11:45:27 von Nitaro »

Offline TomLee

  • Hero Member
  • *****
  • Beiträge: 2063
Antw:[Gelöst] Tablet UI Problem mit Customreading
« Antwort #23 am: 26 Mai 2020, 11:39:37 »
Zitat
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:

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.

Offline Nitaro

  • Jr. Member
  • **
  • Beiträge: 72
Antw:[Gelöst] Tablet UI Problem mit Customreading
« Antwort #24 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.
« Letzte Änderung: 26 Mai 2020, 12:40:52 von Nitaro »

 

decade-submarginal