Ergebnis eines Befehls aus Konsole (Putty) als Reading

Begonnen von Floriky, 12 Dezember 2018, 10:52:05

Vorheriges Thema - Nächstes Thema

Floriky

#30
Zitat von: Wernieman am 12 Dezember 2018, 15:59:56
Bezüglich "/opt/fhem/totalraidsize.sh: Zeile 2: FHEM-Server=localhost: Kommando nicht gefunden."
- Mit welchem Editor hast Du das Script erstellt?
- der "-" war blöde in meinem Scipt. Nimm mal lieber meine letzte Version .....

Bezüglich "/opt/fhem/totalraidsize.sh: Zeile 20: /var/log/fhem.log: Keine Berechtigung"
Machmal (Erstmal zum lösen, Verbesserung kommt später):
sudo touch /var/log/fhem.log
sudo chmod +w /var/log/fhem.log


Erstmal nochmal ein weiteres Danke für die Mühe, die dir mit mir und meinem "Problemchen" gibst. Ja denke nano ist anfängerfreundlicher...  ;) Habe es jetzt nochmal ausprobiert, mit folgendem Ergebnis:

pi@raspberrypi:/opt/fhem $ /opt/fhem/totalraidsize.sh
1.3.6.1.4.1.6574.3.1.1.5.: Unknown Object Identifier ()


Dabei ist mir aufgefallen, dass ich eine Null am Ende des mibs (sofern man das so nennt) vergessen habe. Also mein Befehl statt:

snmpget -v2c -c GRUPPE 192.168.2.111 1.3.6.1.4.1.6574.3.1.1.5.

eigentlich

snmpget -v2c -c GRUPPE 192.168.2.111 1.3.6.1.4.1.6574.3.1.1.5.0

hätte heißen müssen. Sobald ich das in dem Script ändere kommt einfach kein Ergebnis und er bringt mir wieder die "Eingabezeile" also:


pi@raspberrypi:/opt/fhem $ /opt/fhem/totalraidsize.sh
pi@raspberrypi:/opt/fhem $


Ohne die Null hat es ja eigentlich funktioniert, denn das wäre auch die Fehlermeldung die der Befehl ohne dein Script hervor gebracht hätte. Nur mit der Null macht er irgendwie gar nichts.

Wernieman

Dann gucke mal in FHEM nach un dessen Log nach ...

Rate mal, was "set snmp ${ergebnis}" machen soll ...

P.S. Eventuell sollte snmp als Dummy angelegt werden .... bzw. anstatt set kann auch setreading (oder jeder andere FHEM Befehl) verwendet werden .....

Aber DAS mußt Du selber entscheiden ;o)
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

Floriky

Zitat von: Wernieman am 12 Dezember 2018, 18:53:33
Dann gucke mal in FHEM nach un dessen Log nach ...

Rate mal, was "set snmp ${ergebnis}" machen soll ...

P.S. Eventuell sollte snmp als Dummy angelegt werden .... bzw. anstatt set kann auch setreading (oder jeder andere FHEM Befehl) verwendet werden .....

Aber DAS mußt Du selber entscheiden ;o)

So ich bin dann mal mit dem ersten Fuß runter von der Leitung...  ;) Tut mir Leid, war ein langer Tag. Also das funktioniert jetzt schon ganz toll. Habe aus deinem

set snmp ${Ergebnis}

ein

setreading Synology_416 total_raid_size ${Ergebnis}

gemacht. Jetzt habe ich das reading auch in meinem Device. Aber warum wird es nicht mit den anderen zusammen aktualisiert? In den INTERNALS steht ja "INTERVAL 60". Oder ist FHEM nicht so schlau, dass es weiß wie das Reading da hin kam und was es machen muss um ein neues zu bekommen?

Wernieman

Naja .. das Script aktuallisiert FHEM. Mit anderen Worten es wird nur dann aktuallisiert, wenn das Script läuft ... das (s.o.) mußt Du selber machen. Per FHEM starten oder unabhängig per CRON
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

Floriky

#34
Zitat von: Wernieman am 12 Dezember 2018, 19:36:46
Per FHEM starten oder unabhängig per CRON

Kann ich das in FHEM z.B. mit einem at (hatte da die Tage mal was gelsen) automatisieren oder muss es dazu ein "Cronjob" (sowas hab ich auch noch nie gemacht) sein?

EDIT:

Hat sich erledigt. Crinjob einrichten ist ja ein Kinderspiel! (Referenz: https://raspberry.tips/raspberrypi-einsteiger/cronjob-auf-dem-raspberry-pi-einrichten)

Floriky

Zitat von: Wernieman am 12 Dezember 2018, 15:59:56
Machmal (Erstmal zum lösen, Verbesserung kommt später):
sudo touch /var/log/fhem.log
sudo chmod +w /var/log/fhem.log


Hierzu hätte ich auch noch eine Frage, da ich ein wenig nachgelesen habe. Mit touch habe ich die Datei erstellt und mit chmod +w die erlaubt, dass alle schreiben dürfen. Nun hat FHEM doch bereits ein Log bei mir. Das ist ewig lang und über die Weboberfläche erreichbar. Oder ist das was anderes?

Wernieman

Es ist eigentlöich dafür, wenn es mal nicht läuft eine Ausgabe führ Fehler zu haben. Da er bei Fehlern FHEM nicht erreichen kann, kann er nicht ins FHEM-log schreiben (lasse mich gerne korrigieren).

Habe das Script (so Ähnlich, d.h. ohne snmp) bei mir laufen, aber auf einem anderen Pi ....
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

Floriky

Zitat von: Wernieman am 12 Dezember 2018, 22:19:19
Da er bei Fehlern FHEM nicht erreichen kann, kann er nicht ins FHEM-log schreiben (lasse mich gerne korrigieren).

Ja das hört sich logisch an.  ;D

Also jetzt funktioniert alles. Hab es sogar noch ein wenig umgewandelt (mit einer zweiten Variable die mir den Wert vor Ausgabe umrechnet in GB). Habe heute richtig was gelernt. Jetzt muss ich nur noch das Gplot dazu richtig hinbekommen und ich bin damit durch.

Vielen Dank für deine Mühe und deine Zeit.

Wernieman

Wenn Du willst, kannst Du es hier posten. Würde dann mal "rüberschauen" ...
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

Floriky

Zitat von: Wernieman am 13 Dezember 2018, 07:57:57
Wenn Du willst, kannst Du es hier posten. Würde dann mal "rüberschauen" ...

Hallo,

klar poste der Vollständigkeit halber mal alles. Also dein Script (bei mir "totalraidsize.sh" sieht nun so aus:

#!/bin/bash
FHEMServer="localhost"
Passwort="SUPERGEHEIM"
Port="7072"
NCParameter="-w5"
# Wenn mit SSL dann: NCParameter="-w5 --ssl"
# Wenn es Probleme macht, mal mit ipv4 probieren: NCParameter="-w5 -4"

Ergebnis=$(snmpget -v2c -c GRUPPE 192.168.2.111 1.3.6.1.4.1.6574.3.1.1.5.0 | sed -e "s/^.*: //g")
ErgebnisMB=$((${Ergebnis}/1000000))

# Daten an FHEM übergeben
if ping ${FHEMServer} -c1 >/dev/null 2>&1
then
  echo -en "${Passwort}\nsetreading Synology_416 free_raid_size ${ErgebnisMB}\nquit\n" | nc ${NCParameter} ${FHEMServer} ${Port} >/dev/null
  if [ ! "$?" = "0" ]
  then
    echo "$(date "+%Y-%m-%d/%H:%M:%S") - Fehler beim Datenuebertragen an FHEM-Server" >>/var/log/fhem.log
  fi
else
  echo "$(date "+%Y-%m-%d/%H:%M:%S") - Kein FHEM-Server pingbar" >>/var/log/fhem.log
fi


Habe noch die Variable "ErgebnisMB" definiert die "${Ergebnis}" nochmal durch 1000000 teilt um aus den Byte MB zu machen. Dieses Script habe ich mit einer weiteren SNMP-Abfrage kopiert umd neben der gesamten Speichergröße auch noch den verfügbaren freien Speicher auszuwerten. Diese Datei habe ich unter "freeraidsize.sh" abgespeichert. In der crontab-Datei habe ich noch die beiden Einträge

@daily  root /opt/fhem/totalraidsize.sh
@hourly  root /opt/fhem/freeraidsize.sh


eingetragen um die beiden Scripte automatisch auszuführen. Da sich der Speicher meiner Synology ja eigentlich nicht ändert, reicht mir hier einmal täglich (@daily). Der verfügbare Speicher ändert sich öfters, deswegen "@hourly".

Bis hier lief alles wie geschmiert (Dank deiner "Hilfe" ;-) ).Den ersten Kampf habe ich mit dem Attribut stateformat verloren. Aktuell sieht das bei mir so aus:

HDD: 38°C | 40°C | 35°C | SYS: 40°C || 3102146 / 7928574 MB

Attribut-Code: HDD: temp_hdd1°C | temp_hdd2°C | temp_hdd3°C | SYS: temperature°C || free_raid_size / total_raid_size MB


Eigentlich hätte ich es hier aber gerne eher so HDD: 38°C | 40°C | 35°C | SYS: 40°C || 3102.1 / 7928.5 GB

Das hatte ich mit einer der beiden Zahlen auch noch fast hin bekommen. Und zwar so:

{ReadingsVal("Synology_416","free_raid_size",0)/1000}

Aber in Kombination mit der zweiten (also der "total_raid_size") bin ich dann gescheitert. Von den drei Dezimalstellen mal ganz abgesehen.

Mein Vorhaben dann: Das GPlot in MB anlegen (deswegen habe ich die Ausgabe in GB auch nicht über die Shell gemacht) um die Änderungen besser zu sehen. Hierbei aber eine Achsenbeschriftung in GB für die Optik.

Allerdings schreibt es die Y-Achse jetzt als Exponentialzahl (wenn ich mich noch richtig an meine Mathematikvorlesungen erinnere) und beide Graphen sind irgendiwe vertauscht, da der freie Speicher viel größer ausfällt als der gesammte Speicher - zumindest wenn ich nach der Legende gehe.

PS: Fürs Thema gplot habe ich bis jetzt weder in der Commandref noch im Wiki nachgeschaut. Nicht aus Faulheit, nur aus Zeitmangel und weil ich dir zeitnah antworten wollte.

Wernieman

Also ... ich hätte es in ein Script gepackt, auch wenn Du total nicht so häufig wie free verwendest.

fhem kannst Du dann "in einem Rutsch" aktuallisieren ... dann braucht man nur ein Script ;o)
echo -en "${Passwort}\nsetreading Synology_416 free_raid_size ${FreeMB}\nsetreading Synology_416 total_raid_size ${TotalMB}\nquit\n" | nc ${NCParameter} ${FHEMServer} ${Port} >/dev/null

Nach dem gleichen Schema kann man auch noch mehr Parameter übergeben. z.B. pusht mein Pi seinee Temperatur/Speicher auf dem Weg nach FHEM. Da ich fhem selber keine root Rehte geben wollte, werden bei mir auch die SMART-Daten vom FHEM-Rehner so reingepusht .... eigentlich total easy ...
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

Floriky

Zitat von: Wernieman am 13 Dezember 2018, 18:17:22
Also ... ich hätte es in ein Script gepackt, auch wenn Du total nicht so häufig wie free verwendest.

Nach dem gleichen Schema kann man auch noch mehr Parameter übergeben. z.B. pusht mein Pi seinee Temperatur/Speicher auf dem Weg nach FHEM. Da ich fhem selber keine root Rehte geben wollte, werden bei mir auch die SMART-Daten vom FHEM-Rehner so reingepusht .... eigentlich total easy ...

Hätte ich gewusst, dass ich nur die entsprechende Zeile ergänzen muss, hätte ich das selbstverständlich gleich so gemacht. Habe die bei snmpgets bereits zusammengefasst und in die anderen beiden rausgenommen.  8) Grazie!

Und zur Übung versuch ich das mit dem Pi auch gleich mal!  ;)

Hast du bezüglich des "stateformat" auch eine Idee? Ich finde beim Googeln immer nur Beispiele ala "{ReadingsVal("Synology_416","free_raid_size",0)/1000}" aber nirgends sind diese mit regulären ausdrücken wie meinen "HDD: temp_hdd1°C | temp_hdd2°C | temp_hdd3°C | SYS: temperature°C" gepaart.

amenomade

Zitat von: Wernieman am 12 Dezember 2018, 13:43:21
Irgendwo hatte zwar jemand gepostet, wie man es über fhemweb (wget, curl) machen kann, nur ..... sehe ich wegen des Overhead für mehrfach laufenden Scripte da eher Nachteile
Meinst Du das? https://wiki.fhem.de/wiki/CsrfToken-HowTo#Einzeiler
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Wernieman

@Floriky:

Für stateformat fragst Du lieber andere ...

@amenomade
Eigentlich meinte ich einen anderen Thread, aber das geht in die gleiche Richtung.

Dank Dir ....

- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

Floriky

Zitat von: Wernieman am 14 Dezember 2018, 08:42:12
@Floriky:

Für stateformat fragst Du lieber andere ...

Mach ich! Trotzdem nochmals vielen Dank für deine Hilfe. Es läuft alles perfekt!!!!