FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Floriky am 12 Dezember 2018, 10:52:05

Titel: Ergebnis eines Befehls aus Konsole (Putty) als Reading
Beitrag von: Floriky am 12 Dezember 2018, 10:52:05
Hallo Zusammen,

Da ich per SYSSTAT einen bestimmten mib(s) meiner Synology nicht auslesen kann (https://forum.fhem.de/index.php/topic,94351.0.html (https://forum.fhem.de/index.php/topic,94351.0.html)), würde ich gerne das Ergebnis des Konsolen-Befehls:

snmpget -v2c -c GRUPPE 192.168.2.111 1.3.6.1.4.1.6574.3.1.1.5.0


als Reading bei diesem SYSSTAT-Device anlegen. Geht das? Und wenn ja, wie?

Vielen Dank vorab an alle Lesenden und Helfenden

PS: Bitte korrigiert mich bei falschen Termini - lerne gern etwas dazu!
Titel: Antw:Ergebnis eines Befehls aus Konsole (Putty) als Reading
Beitrag von: Wernieman am 12 Dezember 2018, 11:08:23
Ich würde anders herum gehen.

Ein Script schreiben (Du hast den Anfang gemacht), dieses per cron (oder fhem) aufrufen und per telnet-Schnitstelle an FHEM liefern.

echo -en "<set blablabla>\nquit\n" | nc -w 5 <fhem-server> 7072 >/dev/null
Bitte <set blablabla> und <fhem-server> passend ändern. Geht übrigens auch mit Passwort und wenn eingerichtet verschlüsselt (siehe Command-Ref). Damit wird dann auich fhem nicht blockiert, falls das Script Probleme macht.
Titel: Antw:Ergebnis eines Befehls aus Konsole (Putty) als Reading
Beitrag von: Floriky am 12 Dezember 2018, 12:36:30
Zitat von: Wernieman am 12 Dezember 2018, 11:08:23
Ich würde anders herum gehen.

Ein Script schreiben (Du hast den Anfang gemacht), dieses per cron (oder fhem) aufrufen und per telnet-Schnitstelle an FHEM liefern.

echo -en "<set blablabla>\nquit\n" | nc -w 5 <fhem-server> 7072 >/dev/null
Bitte <set blablabla> und <fhem-server> passend ändern. Geht übrigens auch mit Passwort und wenn eingerichtet verschlüsselt (siehe Command-Ref). Damit wird dann auich fhem nicht blockiert, falls das Script Probleme macht.

Hallo Werniemann,

vielen Dank für deine Antwort. Hab noch nie ein Script geschrieben und habe jetzt mal ein wenig im Internet rumgelesen und da ist mir aufgefallen, dass das was du gepostet ja schon ein Script sein müsste. Nur wo füge ich dort mein "snmpget -v2c -c GRUPPE 192.168.2.111 1.3.6.1.4.1.6574.3.1.1.5." ein? Und warum beginnt es nicht mit "#!/bin/bash" Oder ist das gar kein Script?

Was ich bereits davon verstehe ist (glaube ich zumindest):
- bei echo gibt er was aus, wobei das "-e" dafür sorgt das er alles nach "\" als Befehl erkennt und das -n dafür dass er das "|" nicht mit ausgibt.
- am Ende speicher ich das ganze mit dem vi-Editor unter bspw. "/opt/fhem/blutschweissundtraenen.sh" und schreibe irgendwo in fhem "function {`sudo /opt/fhem/blutschweissundtraenen.sh`}" rein.
- "<fhem-server>" ist die IP meiner FHEM-Instanz
- mit "nc -w 5 <fhem-server> 7072 >" öffnet er die Verbindung zu FHEM Port 7072 und beendet bei Misslingen nach 5 Sekunden die Verbindung
- sorgt dafür, dass sich irgendwas nicht aufhängt

Was ich nicht versteh:
- was macht "\nquit\n" und warum steht es mit einem Befehl der sich, glaube ich, an FHEM richtet in Hochkommas?
- müsste nicht "echo ("snmpget -v2c -c GRUPPE 192.168.2.111 1.3.6.1.4.1.6574.3.1.1.5.)" noch irgendwo rein?

Ich hoffe, die Antwort verursacht nicht allzu viel Arbeit! 
Titel: Antw:Ergebnis eines Befehls aus Konsole (Putty) als Reading
Beitrag von: Wernieman am 12 Dezember 2018, 12:44:55
1. Es ist kein komplettes script
2. Mann kann eine telnetverbindung bei fhem mit einem "quit" beenden. ich mag es, wenn man "so nett" ist
also mal echo -en "<set blablabla>\nquit\n" umschrieben
<set blablabla>
quit

das "\n" wird durch "echo -en" zu einem "Enter"
3. Braucht das Script root-Rechte? Wahrscheinlich nicht, also kein sudo!


Richtig wäre es (Ungetestet!!)
#!/bin/bash
FHEM-Server="localhost"

ergebnis=$(snmpget -v2c -c GRUPPE 192.168.2.111 1.3.6.1.4.1.6574.3.1.1.5.)
echo -en "set snmp $ergebnis\nquit\n" | nc -w 5 $FHEM-Server 7072 >/dev/null


Um es mal "richtig" zu machen, könntest Du mir den Output von Deinem snmpget geben?
Titel: Antw:Ergebnis eines Befehls aus Konsole (Putty) als Reading
Beitrag von: Beta-User am 12 Dezember 2018, 12:47:25
Kurzer Hinweis:

Wenn das FHEM relativ frisch installiert ist, ist telnet vermutlich nicht aktiv und muß erst eingerichtet werden (spätestens seit dem 5.9-er Release).
Ist leider noch nicht in allen Anleitungen etc. berücksichtigt.
Titel: Antw:Ergebnis eines Befehls aus Konsole (Putty) als Reading
Beitrag von: Wernieman am 12 Dezember 2018, 12:48:27
Ups .. danke für den Hinweis.
http://www.fhem.de/commandref.html#telnet (http://www.fhem.de/commandref.html#telnet)
Titel: Antw:Ergebnis eines Befehls aus Konsole (Putty) als Reading
Beitrag von: Beta-User am 12 Dezember 2018, 12:54:22
Zitat von: Wernieman am 12 Dezember 2018, 12:48:27
Ups .. danke für den Hinweis.
http://www.fhem.de/commandref.html#telnet (http://www.fhem.de/commandref.html#telnet)
[OT]
Wenn du als Linux-Spezialist eine Idee hast, wie man das eine oder andere von der Konsole aus erledigen kann, ohne telnet aktiviert zu haben, würde sich Otto123 vermutlich sehr freuen (z.B. wegen hier: https://wiki.fhem.de/wiki/Raspberry_Pi#Empfohlener_Patch)
Habe das nicht im Detail verfolgt, meine aber, dass das bisher nicht geklärt wurde, wie man das u.ä. zukünftig lösen kann, ohne ausgerechnet Noobs auf cfg-Editieren zu verweisen...).
[/OT]
Titel: Antw:Ergebnis eines Befehls aus Konsole (Putty) als Reading
Beitrag von: Floriky am 12 Dezember 2018, 13:09:03
Zitat von: Wernieman am 12 Dezember 2018, 12:44:55
1. Es ist kein komplettes script
2. Mann kann eine telnetverbindung bei fhem mit einem "quit" beenden. ich mag es, wenn man "so nett" ist
also mal echo -en "<set blablabla>\nquit\n" umschrieben
<set blablabla>
quit

das "\n" wird durch "echo -en" zu einem "Enter"
3. Braucht das Script root-Rechte? Wahrscheinlich nicht, also kein sudo!


Richtig wäre es (Ungetestet!!)
#!/bin/bash
FHEM-Server="localhost"

ergebnis=$(snmpget -v2c -c GRUPPE 192.168.2.111 1.3.6.1.4.1.6574.3.1.1.5.)
echo -en "set snmp $ergebnis\nquit\n" | nc -w 5 $FHEM-Server 7072 >/dev/null


Um es mal "richtig" zu machen, könntest Du mir den Output von Deinem snmpget geben?

Vielen lieben Dank für deine Mühen. Das Ergebnis ist: iso.3.6.1.4.1.6574.3.1.1.5.0 = Counter64: 7928574496768. Die 7928574496768 ist die "total_raid_size" meiner Synology in Bytes und um die geht es mir. Einen User und Passwort habe ich im Telnet nicht vergeben. Ist das ok?
Titel: Antw:Ergebnis eines Befehls aus Konsole (Putty) als Reading
Beitrag von: Floriky am 12 Dezember 2018, 13:15:50
Zitat von: Beta-User am 12 Dezember 2018, 12:47:25
Kurzer Hinweis:

Wenn das FHEM relativ frisch installiert ist, ist telnet vermutlich nicht aktiv und muß erst eingerichtet werden (spätestens seit dem 5.9-er Release).
Ist leider noch nicht in allen Anleitungen etc. berücksichtigt.

Vielen Dank für den Hinweis. Bei mir (v5.9) war es sogar nötig Telnet vorher zu installieren.

sudo apt-get install telnet
Titel: Antw:Ergebnis eines Befehls aus Konsole (Putty) als Reading
Beitrag von: Floriky am 12 Dezember 2018, 13:20:44
Zitat von: Beta-User am 12 Dezember 2018, 12:47:25
Kurzer Hinweis:

Wenn das FHEM relativ frisch installiert ist, ist telnet vermutlich nicht aktiv und muß erst eingerichtet werden (spätestens seit dem 5.9-er Release).
Ist leider noch nicht in allen Anleitungen etc. berücksichtigt.

Noch eine Frage:

Ich hab hier ein Device das heißt "telnetForBlockingFn_1544616830". Muss ich hiermit was tun? HAbe nur den Wiki-Eintrag dazu gefunden (https://wiki.fhem.de/wiki/Blocking_Call (https://wiki.fhem.de/wiki/Blocking_Call)) und kann mich nicht erinnern das mal angelegt zu haben. Das hat aber nichts mit dem Telnet zu tun, das ich laut "commandref" anlegen muss, oder?
Titel: Antw:Ergebnis eines Befehls aus Konsole (Putty) als Reading
Beitrag von: Beta-User am 12 Dezember 2018, 13:37:06
Zitat von: Floriky am 12 Dezember 2018, 13:15:50
Vielen Dank für den Hinweis. Bei mir (v5.9) war es sogar nötig Telnet vorher zu installieren.

sudo apt-get install telnet
Bin nicht sicher, ob das erforderlich war (mein rudimentäres Verständnis: das ist ein Serverdienst, den stellt aber FHEM (bzw. das tenet-Modul) selbst bereit => nein).

ZitatEinen User und Passwort habe ich im Telnet nicht vergeben. Ist das ok?
Ebenfalls nein: Der Grund, warum telnet aus der "Basis-cfg" raus ist, ist der, dass Sicherheitsbedenken bestanden, wenn eine Schnittstelle ungeschützt offen ist (und oft auch bleibt). Bitte also in der commandref nach allowed suchen!

Zitat von: Floriky am 12 Dezember 2018, 13:20:44
Noch eine Frage:

Ich hab hier ein Device das heißt "telnetForBlockingFn_1544616830". Muss ich hiermit was tun? HAbe nur den Wiki-Eintrag dazu gefunden (https://wiki.fhem.de/wiki/Blocking_Call (https://wiki.fhem.de/wiki/Blocking_Call)) und kann mich nicht erinnern das mal angelegt zu haben. Das hat aber nichts mit dem Telnet zu tun, das ich laut "commandref" anlegen muss, oder?
Da bin ich nicht sicher, aber wenn du eine offene telnet-Verbindung hast, dürfte da - wie bei anderen Verbindungen auch - pro Verbindung ein temporäres Device auftauchen, das dann auch wieder verschwindet, wenn die Verbindung beendet wird.
Titel: Antw:Ergebnis eines Befehls aus Konsole (Putty) als Reading
Beitrag von: Beta-User am 12 Dezember 2018, 13:39:56
Zitat von: Beta-User am 12 Dezember 2018, 12:54:22
[OT]
Wenn du als Linux-Spezialist eine Idee hast, wie man das eine oder andere von der Konsole aus erledigen kann, ohne telnet aktiviert zu haben, würde sich Otto123 vermutlich sehr freuen (z.B. wegen hier: https://wiki.fhem.de/wiki/Raspberry_Pi#Empfohlener_Patch (https://wiki.fhem.de/wiki/Raspberry_Pi#Empfohlener_Patch))
Habe das nicht im Detail verfolgt, meine aber, dass das bisher nicht geklärt wurde, wie man das u.ä. zukünftig lösen kann, ohne ausgerechnet Noobs auf cfg-Editieren zu verweisen...).
[/OT]
Nachtrag dazu: Da (hoffentlich) ein Pi doch startet, wenn nix an USB hängt, habe ich wenigstens den Hinweis ins Wiki gepackt, dass man eben abstöpseln kann, um dann mit FHEMWEB arbeiten zu können...
Titel: Antw:Ergebnis eines Befehls aus Konsole (Putty) als Reading
Beitrag von: Wernieman am 12 Dezember 2018, 13:43:21
Nein .. das sie die Verbindungen für "non-Blocking-Module"

Telnet selber brauchst Du nicht für die telnet-Verbindung!, kannst Du also auch wieder deinstallieren (purgen). Eventuell brauchst Du aber netcat, in kurzform nc:
apt-get install netcat

Dann mal besser, damit geht nur die Zahl ins FHEM (ungetestet!):
#!/bin/bash
FHEM-Server="localhost"

ergebnis=$(snmpget -v2c -c GRUPPE 192.168.2.111 1.3.6.1.4.1.6574.3.1.1.5. | sed -e "s/^.*: //g")
echo -en "set snmp $ergebnis\nquit\n" | nc -w 5 $FHEM-Server 7072 >/dev/null


Hinweis:
Hier sind keine Fehlerroutinen eingebaut. Also auch wenn snmpget nicht funktioniert (z.B. Device nicht erreichbar), wird an FHEM Daten übergeben. Das wäre die Optimierung des Skriptes, welches eben hier nur rudimentär ist.

Edit:
Bin zwar beruflich ein Linux-Systemadmin und damit Konsolenbasiertes Editieren gewohnt, aber wie man ohne telnet-Device FHEM bearbeitet .....

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
Titel: Antw:Ergebnis eines Befehls aus Konsole (Putty) als Reading
Beitrag von: Beta-User am 12 Dezember 2018, 13:56:15
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
Danke für die Rückmeldung. Ohne das im Detail bewerten zu können empfinde ich den Umweg auch als nicht empfehlenswert. Ging v.a. um diese Einsteiger-Hürde mit initialUsbCheck.

Wer mehr scripting braucht, sollte telnet aktivieren und entsprechend absichern, das ist m.E. die einfachste Variante.
Titel: Antw:Ergebnis eines Befehls aus Konsole (Putty) als Reading
Beitrag von: Wernieman am 12 Dezember 2018, 14:06:28
Bezüglich Absicherung steht sogar einiges in der CommandRef

Und wenn man dann SSL + Passwort aktiviert hat, einfach eine Zeile umschreiben in:
echo -en "${Passwort\n}${Befehl}\nquit\n" | /usr/bin/ncat -w5 -4 --ssl ${FHEM-Server} 7073

Sende so Daten von "externen"-Systemen zum FHEM-Server (Mag Push lieber als Pull)

Mit "externen" meine ich Sensoren im gleichen Netz, aber nicht im I-Netz
Titel: Antw:Ergebnis eines Befehls aus Konsole (Putty) als Reading
Beitrag von: Floriky am 12 Dezember 2018, 14:11:40
Zitat von: Wernieman am 12 Dezember 2018, 13:43:21

#!/bin/bash
FHEM-Server="localhost"

ergebnis=$(snmpget -v2c -c GRUPPE 192.168.2.111 1.3.6.1.4.1.6574.3.1.1.5. | sed -e "s/^.*: //g")
echo -en "set snmp $ergebnis\nquit\n" | nc -w 5 $FHEM-Server 7072 >/dev/null


Hinweis:
Hier sind keine Fehlerroutinen eingebaut. Also auch wenn snmpget nicht funktioniert (z.B. Device nicht erreichbar), wird an FHEM Daten übergeben. Das wäre die Optimierung des Skriptes, welches eben hier nur rudimentär ist.

Vielen Dank nochmals! Also Telnet ist gepurged und NC installiert. Mögliche Fehlerroutinen sind nur nice-to-have aber nicht notwendig damit FHEM ordnungsgemäß läuft oder? Hast du mir noch ein Stichwort wie ich das im Device als mit "{`sudo /opt/fhem/totalraidsize.sh`}" als Reading anlegen kann?

Und bei der absichereten Variante das Passwort als Hash oder "normal? Und kann ich als ohne SSL die 7073 wieder in 7072 ändern?




Zitat von: Beta-User am 12 Dezember 2018, 13:37:06
Ebenfalls nein: Der Grund, warum telnet aus der "Basis-cfg" raus ist, ist der, dass Sicherheitsbedenken bestanden, wenn eine Schnittstelle ungeschützt offen ist (und oft auch bleibt). Bitte also in der commandref nach allowed suchen!

Also das habe ich jetzt nachgeholt gemäß:

Konsole (Putty):
echo -n meinbenutzername:meinpasswort | base64
-> Ergebnis: SGF1czpHYXJ0ZW4=

FHEM:
define allowedtPort allowed
attr allowedtPort basicAuth SGF1czpHYXJ0ZW4=
attr allowedtPort validFor tPort

Ist das so besser?
Titel: Antw:Ergebnis eines Befehls aus Konsole (Putty) als Reading
Beitrag von: Beta-User am 12 Dezember 2018, 14:22:28
Zitat von: Floriky am 12 Dezember 2018, 14:11:40
Also das habe ich jetzt nachgeholt gemäß:

Konsole (Putty):
echo -n meinbenutzername:meinpasswort | base64
-> Ergebnis: [xyz]

FHEM:
define allowedtPort allowed
attr allowedtPort basicAuth [xyz]
attr allowedtPort validFor tPort

Ist das so besser?
Sieht für mich auf den ersten Blick nach dem aus, was die cref sagt.

Vielleicht wirfst du die Echtdaten aus Deinem Post noch raus (für den Fall, dass es welche waren)?
Titel: Antw:Ergebnis eines Befehls aus Konsole (Putty) als Reading
Beitrag von: Floriky am 12 Dezember 2018, 14:28:23
Zitat von: Beta-User am 12 Dezember 2018, 14:22:28
Sieht für mich auf den ersten Blick nach dem aus, was die cref sagt.

Vielleicht wirfst du die Echtdaten aus Deinem Post noch raus (für den Fall, dass es welche waren)?

Sehr gut - nur für den Fall, dass das mal jemand in der Zukunft liest. Dann hat er gleich alles Nötige. Hehe, nein sind sie nicht - aber danke.
Titel: Antw:Ergebnis eines Befehls aus Konsole (Putty) als Reading
Beitrag von: Wernieman am 12 Dezember 2018, 14:30:35
1. Wenn Passwort vergeben, muß das mit ins echo:
echo -en "${Passwort}\nset snmp ${ergebnis}\nquit\n" | nc -w 5 ${FHEM-Server} 7072 >/dev/null


(Hinweis:
$Variable und ${Variable} ist in bash gleich, besser aber die 2. Variante verwenden)

2. Welchen Port Du verwendest, ist mir (und dem Script) ziemlich "Wurscht". Nur muß in der nc-Zeile der Port richtig angegeben werden. also "7072" durch Deinen Port ändern.

3. Siehe mein Beitrag, sudo ist UNNÖTIG!
Das Script muß nur für fhem aufrufbar sein, wenn Du es von fhem aus startest!

Also in Summe (Mit einigen Verbesserungen)(und UNGETESTET!!)

#!/bin/bash
FHEMServer="localhost"
Passwort="DeinTollesPasswort"
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. | sed -e "s/^.*: //g")

# Daten an FHEM übergeben
if ping ${FHEMServer} -c1 >/dev/null 2>&1
then
  echo -en "${Passwort}\nset snmp ${Ergebnis}\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


Kannst Du übrigens direkt aus der Konsole probieren......
Titel: Antw:Ergebnis eines Befehls aus Konsole (Putty) als Reading
Beitrag von: Beta-User am 12 Dezember 2018, 14:33:38
Zitat von: Floriky am 12 Dezember 2018, 14:28:23
Sehr gut - nur für den Fall, dass das mal jemand in der Zukunft liest. Dann hat er gleich alles Nötige.
:)
Löblicher Gedankenansatz, aber m.E. leider nicht bis zum Ende gedacht:
Wenn jemand das hier liest, sollte er sagen "Aha, das steht - wie die meisten Dinge auch - in der jeweils aktuellen Form in der commandref. Dann schaue ich mal da rein und tue, was da steht!" (Und nicht einfach nur gedankenlos aus irgendeinem Thread abtippen, was dann ggf. veraltet ist...)
(Further reading: https://wiki.fhem.de/wiki/Dokumentationsstruktur)
Titel: Antw:Ergebnis eines Befehls aus Konsole (Putty) als Reading
Beitrag von: Floriky am 12 Dezember 2018, 14:42:58
Zitat von: Wernieman am 12 Dezember 2018, 14:30:35
1. Wenn Passwort vergeben, muß das mit ins echo:
echo -en "${Passwort}\nset snmp ${ergebnis}\nquit\n" | nc -w 5 ${FHEM-Server} 7072 >/dev/null


(Hinweis:
$Variable und ${Variable} ist in bash gleich, besser aber die 2. Variante verwenden)

2. Welchen Port Du verwendest, ist mir (und dem Script) ziemlich "Wurscht". Nur muß in der nc-Zeile der Port richtig angegeben werden. also "7072" durch Deinen Port ändern.

3. Siehe mein Beitrag, sudo ist UNNÖTIG!
Das Script muß nur für fhem aufrufbar sein, wenn Du es von fhem aus startest!

Also in Summe (Mit einigen Verbesserungen)(und UNGETESTET!!)

#!/bin/bash
FHEMServer="localhost"
Passwort="DeinTollesPasswort"
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. | sed -e "s/^.*: //g")

# Daten an FHEM übergeben
if ping ${FHEMServer} -c1 >/dev/null 2>&1
then
  echo -en "${Passwort}\nset snmp ${Ergebnis}\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


Nur der Vollständigkeit halber: Kann ich eine Variable in einer Variable verwenden? Denn die "GRUPPE" ist eigentlich de SNMP-Community der Nas? Falls ja würde ich das noch ergänzen. Und hier einstellen.
Titel: Antw:Ergebnis eines Befehls aus Konsole (Putty) als Reading
Beitrag von: Floriky am 12 Dezember 2018, 14:44:53
Zitat von: Beta-User am 12 Dezember 2018, 14:33:38
Wenn jemand das hier liest, sollte er sagen "Aha, das steht - wie die meisten Dinge auch - in der jeweils aktuellen Form in der commandref. Dann schaue ich mal da rein und tue, was da steht!" (Und nicht einfach nur gedankenlos aus irgendeinem Thread abtippen, was dann ggf. veraltet ist...)

Stimmt halt auch wieder! Hätte mir selbst so einiges an Zeit erspart.  :P Insbesondere was 2 Jahre alt Youtube-Videos angeht.....  >:(
Titel: Antw:Ergebnis eines Befehls aus Konsole (Putty) als Reading
Beitrag von: Wernieman am 12 Dezember 2018, 14:46:30
VDu meinst ala:
Variable1="${Variable2} ${Variable3}"
Titel: Antw:Ergebnis eines Befehls aus Konsole (Putty) als Reading
Beitrag von: Floriky am 12 Dezember 2018, 14:51:51
Zitat von: Wernieman am 12 Dezember 2018, 14:46:30
VDu meinst ala:
Variable1="${Variable2} ${Variable3}"

Nein, ich mein ala:


...
SNMPCOMMUNITY="Deine-SNMP-Community"

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

Titel: Antw:Ergebnis eines Befehls aus Konsole (Putty) als Reading
Beitrag von: Wernieman am 12 Dezember 2018, 14:58:43
Im Endeffeckt das gleiche ;o)

Ergebnis= ist die Zuordnung
$() Der Inhalt (Ausgabe) wird als Text verwendet (vereinfacht)

Kurze google-Suche, mal zum lesen:
https://de.wikipedia.org/wiki/Bash_(Shell) (https://de.wikipedia.org/wiki/Bash_(Shell))
https://unix.stackexchange.com/questions/147420/what-is-in-a-command (https://unix.stackexchange.com/questions/147420/what-is-in-a-command)
https://superuser.com/questions/935374/difference-between-and-in-shell-script (https://superuser.com/questions/935374/difference-between-and-in-shell-script)
Titel: Antw:Ergebnis eines Befehls aus Konsole (Putty) als Reading
Beitrag von: Beta-User am 12 Dezember 2018, 14:59:42
Zitat von: Floriky am 12 Dezember 2018, 14:44:53
Stimmt halt auch wieder! Hätte mir selbst so einiges an Zeit erspart.  :P Insbesondere was 2 Jahre alt Youtube-Videos angeht.....  >:(
YMMD!

Diese gnadenlos langweiligen (zumindest die ersten) und (teilweise) irreführenden Videos waren der Auslöser, warum ich mir irgendwann den Wiki-Account zugelegt habe.

Doof ist halt, dass scheinbar immer noch viele zu glauben scheinen, diese Videos wären "offiziell" oder gar "richtig". Aber dagegen hilft auch kein Wiki, man lernt erst später, wo man wirklich nachsehen muß :( . Und commandref ist halt oft trocken und wenig einsteigerfreundlich (dafür aber aktuell!).
Titel: Antw:Ergebnis eines Befehls aus Konsole (Putty) als Reading
Beitrag von: Floriky am 12 Dezember 2018, 15:01:57
Zitat von: Wernieman am 12 Dezember 2018, 14:58:43
Im Endeffeckt das gleiche ;o)

Ergebnis= ist die Zuordnung
$() Der Inhalt (Ausgabe) wird als Text verwendet (vereinfacht)

Kurze google-Suche, mal zum lesen:
https://de.wikipedia.org/wiki/Bash_(Shell) (https://de.wikipedia.org/wiki/Bash_(Shell))
https://unix.stackexchange.com/questions/147420/what-is-in-a-command (https://unix.stackexchange.com/questions/147420/what-is-in-a-command)
https://superuser.com/questions/935374/difference-between-and-in-shell-script (https://superuser.com/questions/935374/difference-between-and-in-shell-script)

Okay, das habe ich soweit verstanden. Danke dir! Wusste nur nicht ob er damit ein Problem hat wenn die einer innerhalb der anderen steht.

Bekomme jetzt in Putty folgende Fehlermeldung:


fhem@raspberrypi:/home/pi$ /opt/fhem/totalraidsize.sh
/opt/fhem/totalraidsize.sh: Zeile 2: FHEM-Server=localhost: Kommando nicht gefunden.
/opt/fhem/totalraidsize.sh: Zeile 20: /var/log/fhem.log: Keine Berechtigung


Auch wenn ich statt localhost die IP von FHEM eintrage klappt das nicht.
Und warum hat der FHEM-User keine Berechtigung? Das ist doch sein Log?
Titel: Antw:Ergebnis eines Befehls aus Konsole (Putty) als Reading
Beitrag 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


Titel: Antw:Ergebnis eines Befehls aus Konsole (Putty) als Reading
Beitrag von: Floriky am 12 Dezember 2018, 18:26:02
Zitat von: Wernieman am 12 Dezember 2018, 15:59:56
- Mit welchem Editor hast Du das Script erstellt?


Sodele, jetzt hab ich erfolgreich den Schreibtisch gewechselt... ;)

Habe es mit dem Nano erstellt (wahrscheinlich soll ich den Vi nehmen, stimmts?!).

Werde beides gleich ausprobieren und berichten...
Titel: Antw:Ergebnis eines Befehls aus Konsole (Putty) als Reading
Beitrag von: Wernieman am 12 Dezember 2018, 18:39:02
Nee .. nano sollte gehen (auch wenn ich vi (bzw. vim) mag und nano hasse, aber es gibt bekanntlich auch emacs)
Titel: Antw:Ergebnis eines Befehls aus Konsole (Putty) als Reading
Beitrag von: Floriky am 12 Dezember 2018, 18:42:59
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.
Titel: Antw:Ergebnis eines Befehls aus Konsole (Putty) als Reading
Beitrag 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)
Titel: Antw:Ergebnis eines Befehls aus Konsole (Putty) als Reading
Beitrag von: Floriky am 12 Dezember 2018, 19:34:26
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?
Titel: Antw:Ergebnis eines Befehls aus Konsole (Putty) als Reading
Beitrag von: Wernieman am 12 Dezember 2018, 19:36:46
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
Titel: Antw:Ergebnis eines Befehls aus Konsole (Putty) als Reading
Beitrag von: Floriky am 12 Dezember 2018, 19:43:31
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 (https://raspberry.tips/raspberrypi-einsteiger/cronjob-auf-dem-raspberry-pi-einrichten))
Titel: Antw:Ergebnis eines Befehls aus Konsole (Putty) als Reading
Beitrag von: Floriky am 12 Dezember 2018, 19:55:53
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?
Titel: Antw:Ergebnis eines Befehls aus Konsole (Putty) als Reading
Beitrag von: Wernieman am 12 Dezember 2018, 22:19:19
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 ....
Titel: Antw:Ergebnis eines Befehls aus Konsole (Putty) als Reading
Beitrag von: Floriky am 12 Dezember 2018, 22:59:21
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.
Titel: Antw:Ergebnis eines Befehls aus Konsole (Putty) als Reading
Beitrag von: Wernieman am 13 Dezember 2018, 07:57:57
Wenn Du willst, kannst Du es hier posten. Würde dann mal "rüberschauen" ...
Titel: Antw:Ergebnis eines Befehls aus Konsole (Putty) als Reading
Beitrag von: Floriky am 13 Dezember 2018, 11:46:12
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.
Titel: Antw:Ergebnis eines Befehls aus Konsole (Putty) als Reading
Beitrag 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.

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 ...
Titel: Antw:Ergebnis eines Befehls aus Konsole (Putty) als Reading
Beitrag von: Floriky am 13 Dezember 2018, 18:59:20
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.
Titel: Antw:Ergebnis eines Befehls aus Konsole (Putty) als Reading
Beitrag von: amenomade am 14 Dezember 2018, 01:09:44
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
Titel: Antw:Ergebnis eines Befehls aus Konsole (Putty) als Reading
Beitrag von: Wernieman am 14 Dezember 2018, 08:42:12
@Floriky:

Für stateformat fragst Du lieber andere ...

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

Dank Dir ....

Titel: Antw:Ergebnis eines Befehls aus Konsole (Putty) als Reading
Beitrag von: Floriky am 26 Dezember 2018, 13:44:20
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!!!!