Ergebnis eines Befehls aus Konsole (Putty) als Reading

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

Vorheriges Thema - Nächstes Thema

Floriky

#15
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?

Beta-User

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)?
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

Floriky

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.

Wernieman

#18
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......
- 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

Beta-User

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)
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

Floriky

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.

Floriky

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.....  >:(

Wernieman

VDu meinst ala:
Variable1="${Variable2} ${Variable3}"
- 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

#23
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")
...


Wernieman

- 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

Beta-User

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!).
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

Floriky

#26
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://unix.stackexchange.com/questions/147420/what-is-in-a-command
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?

Wernieman

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


- 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

#28
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...

Wernieman

Nee .. nano sollte gehen (auch wenn ich vi (bzw. vim) mag und nano hasse, aber es gibt bekanntlich auch emacs)
- 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