Per SSH W-Lan an entferntem Router (Asus) ein/aus schalten

Begonnen von Heimkoenig, 18 Juni 2017, 09:39:34

Vorheriges Thema - Nächstes Thema

Heimkoenig

Hallo,

an FHEM Neueinsteiger habe ich dank der tollen Comunity hier schon einiges hinbekommen. Im Moment hänge ich aber an einem relativ einfachen Anwendungsfall.

Was möchte ich tun:
Per FHEM device (on/off) das W-Lan Modul eines entfernten Access Points (Asus RTAC68U) mittels ssh Verbindung ein- oder ausschalten.

Was habe ich bereits gemacht:
Einrichtung einer SSH Verbindung ohne Passwortabfrage nach folgender Anleitung http://www.linuxfun.de/homeautomation/fhem/ssh-befehle-auf-anderen-rechnern-mit-fhem-ausfuehren/
In der Console kann ich wenn ich als User pi oder als User fhem angemeldet bin per folgendem Befehl eine SSH Verbindung zum Router aufbauen und brauche dafür kein Passwort:

ssh admin@192.168.178.29

hierbei bin ich dann als user admin angemeldet und kann mit dem Befehl "radio on" oder "radio off" das W-Lan des Accessooints ein- bzw. ausschalten.

Diesen Befehl möchte ich nun per FHEM absetzen. Ich habe dafür einen Schalter-Dummy und 2 Doifs gebastelt. Irgendwie scheine ich aber einen Fehler zu machen da FHEM immer Errors bringt und der Befehl am Accesspoint nicht ausgeführt wird.

Schalter Dummy:
define UG_Wohnzimmer_Router_AsusRTAC68U_WLAN dummy
attr UG_Wohnzimmer_Router_AsusRTAC68U_WLAN group Router
attr UG_Wohnzimmer_Router_AsusRTAC68U_WLAN room UG--Wohnzimmer
attr UG_Wohnzimmer_Router_AsusRTAC68U_WLAN webCmd on:off


Doif fürs Einschalten:
efine DOIF_UG_Wohnzimmer_Router_AsusRTAC68U_WLAN_an DOIF ([UG_Wohnzimmer_Router_AsusRTAC68U_WLAN] eq "on" ){ system("ssh admin\@192.168.178.29 radio on") }
attr DOIF_UG_Wohnzimmer_Router_AsusRTAC68U_WLAN_an group Router
attr DOIF_UG_Wohnzimmer_Router_AsusRTAC68U_WLAN_an room UG--Wohnzimmer


Doif fürs Ausschalten:
define DOIF_UG_Wohnzimmer_Router_AsusRTAC68U_WLAN_aus DOIF ([UG_Wohnzimmer_Router_AsusRTAC68U_WLAN] eq "off" ){ system("ssh admin\@192.168.178.29 radio off") }
attr DOIF_UG_Wohnzimmer_Router_AsusRTAC68U_WLAN_aus group Router
attr DOIF_UG_Wohnzimmer_Router_AsusRTAC68U_WLAN_aus room UG--Wohnzimmer


Wenn ich das so ausführe, dann bekomme ich folgenden Fehler im Reading des Doifs angezeigt:
error { system("ssh admin\@192.168.178.29 radio on") }: -1

Wo liegt denn hier mein Fehler?

Wernieman

1. Warum in einem einfachen Falle DOIF, wenn auch Notify geht?

Du willst doch, das beim Schalten von UG_Wohnzimmer_Router_AsusRTAC68U_WLAN der WLAN an/ausgeschaltet wird?

also reicht:
define xxx notify UG_Wohnzimmer_Router_AsusRTAC68U_WLAN:on {`ssh admin\@192.168.178.29 "radio on"`}

Allerdings habe ich bei mir den ssh Teil, in ein eigenes Script ausgelagert, ala:
#!/bin/bash
ssh <user>@<server> "$1"


Dann geht auch:
define xxx notify UG_Wohnzimmer_Router_AsusRTAC68U_WLAN:on {`/opf/fhem/<scriptname> "radio on"`}

Natürlich müssen dann <user>, <server> und <scriptname> passend gesetzt werden.
- 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

RaspiLED

#2
Moin,
In Perl ist der "Unterschied zwischen einfachen und doppelten Anführungszeichen besteht in der sogenannten Variableninterpolation"
siehe https://de.m.wikibooks.org/wiki/Perl-Programmierung:_Variablen
Kurzum bei einfachen ' wird der Inhalt nicht ersetzt!
Bei dem " wird Dein @ als Arrayname interpretiert ;-).
Vielleicht hilft auch ein dreifaches \\\ !?
Gruß Arnd


Raspi2 mit FHEM, CUL, Signalduino, MySensors, HomeBridge, Presence, Bravia, ...
Raspberry Pi mit FHEM, CUL, Signalduino, MySensors, HomeBridge, Presence, WifiLight2, Bravia, ...

Heimkoenig

Irgendwie funktioniert es immer noch nicht. Wenn ich als user "pi" im Terminal den Befehl
pi@raspberrypi:~ $ ssh admin@192.168.178.29 "/tmp/home/root radio off"
eingebe, dann bekomme ich:
sh: /tmp/home/root: Permission denied

Der Befehl wird nicht ausgeführt.

Wenn ich nur:
pi@raspberrypi:~ $ ssh admin@192.168.178.29 "radio off"
eingebe, dann bekommen ich:
sh: radio: not found

Wenn ich mich aber über den Befehl:
ssh admin@192.168.178.29
einlogge (geht ohne PW-Abfrage), und dann
radio off
schreibe, dann funktioniert es und das W-Lan wird ausgeschaltet.

Brauche ich noch irgendwelche Rechte auf dem Access Point?

Wernieman

also ...

was soll den der Pfad so??
Zitat/tmp/home/root
Das ist bestimmt kein Ausführbares Programm, wenn doch stimmen die Berechtigungen nicht ...

Ruf das Kommando doch mit vollem Pfad auf. Wenn Du den nicht weißt, mach doch mal ein
whereis radio
- 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

RaspiLED

"/tmp/home/root/radio off" wenn das programm radio in /tmp/home/root liegt. Also pfad/programmname parameter ;-)
Gruß Arnd


Raspi2 mit FHEM, CUL, Signalduino, MySensors, HomeBridge, Presence, Bravia, ...
Raspberry Pi mit FHEM, CUL, Signalduino, MySensors, HomeBridge, Presence, WifiLight2, Bravia, ...

kaputt

Schon mal einfach ssh admin@192.168.178.29 radio offversucht?

Gruß aus L.E.
Uwe
Gruß aus L.E.
Uwe

Bei U/Linux hilfreich aber nicht nötig, bei Windows nötig aber nicht hilfreich!
Rechtschreibfehler sind beabsichtigt und Ausdruck meiner Persönlichkeit

Heimkoenig

Das funktioniert alles nicht.

Den Befehl whereis kennt das System auch nicht.

Wie gesagt, wenn ich mich einfach per ssh auf den Access Point verbinde, dort als User admin angemeldet bin und einfach nur "radio off" oder "radio on" eingebe, dann schaltet er sauber entweder das W-Lan aus oder ein.

CoolTux

Zitat von: Heimkoenig am 20 Juni 2017, 18:31:47
Das funktioniert alles nicht.

Den Befehl whereis kennt das System auch nicht.

Wie gesagt, wenn ich mich einfach per ssh auf den Access Point verbinde, dort als User admin angemeldet bin und einfach nur "radio off" oder "radio on" eingebe, dann schaltet er sauber entweder das W-Lan aus oder ein.

Das Problem ist das Du wenn Du es über FHEM machst nichts als Admin angemeldet bist sondern als User fhem. Sofern dieser überhaupt existiert auf dem Accespoint.

Folgende Voraussetzungen müssen geschaffen werden. Der User fhem muss sich als User Admin am AP per ssh ohne Passwort anmelden können.
Vorgehen. Informiere Dich über die Datei .ssh/config und deren Syntax. Lege dort eine Sektion an für die Anmeldung an den AP als User Admin mit Zertifikat. Diese config Datei gehört natürlich unter /opt/fhem/.ssh/ .
Grund ist das /opt/fhem das Homeverzeichniss für den User fhem ist.
Testen kann man das ganze als User root auf dem fhem Server mit
su -s /bin/bash -c 'ssh hostname' fhem

Damit wird der Befehl -c im Kontext des Users fhem in der Shell /bin/bash ausgeführt
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Otto123

Hallo Heimkönig,

Voraussetzung ist natürlich, dass Du überhaupt den Befehl am Stück absetzen kannst. Hast Du schon
ssh admin@192.168.178.29 'radio off'
versucht?
Das mit den " und ' ist dann aus FHEM heraus auch noch etwas "schwierig", deshalb empfehle ich Dir, wenn es funktioniert -> schreib die Zeile in eine Scriptdatei und rufe diese auf.

Rufe dann die Scriptdatei unbedingt mit "" auf, damit der Befehl nicht blockiert -> https://fhem.de/commandref_DE.html#command

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

kaputt

Zitat von: Heimkoenig am 20 Juni 2017, 18:31:47Wie gesagt, wenn ich mich einfach per ssh auf den Access Point verbinde, dort als User admin angemeldet bin und einfach nur "radio off" oder "radio on" eingebe, dann schaltet er sauber entweder das W-Lan aus oder ein.
Wenn das stimmt (wovon ich aus gehe) dann muss auch ssh admin@192.168.178.29 radio offfunktionieren, wenn du es als Kommando in der Konsole eingibst. NICHT aus fhem heraus!
Einfach Konsole öffnen (oder Terminal oder xterm oder oder oder) und am Prompt eingeben.
Wenn es funktioniert dann gut, noch mal mit .....radio on testen wenn gut dann gut. Wenn nicht Logs anschauen sind eigentlich immer ziemlich gesprächig.
Jetzt kannst du dich der fhem Syntax widmen. Hier würde ich dann Otto's Vorschlag bevorzugen.

P.S.: Der Asus AP wird im besten Fall eine BuysBoy als Shell haben, erwarte da nicht allzu viel davon.
Gruß aus L.E.
Uwe

Bei U/Linux hilfreich aber nicht nötig, bei Windows nötig aber nicht hilfreich!
Rechtschreibfehler sind beabsichtigt und Ausdruck meiner Persönlichkeit

CoolTux

Der Kollege schreibt ja das es funktioniert wen er es aus der Shell raus macht. Das Problem ist das er es als User pi oder root macht. Später soll aber User fhem das machen. Er muss ssh ohne Zertifikat entsprechend für den User fhem einrichten.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Otto123

Moin Leon,

ne er schreibt schon es geht als fhem ->
ZitatIn der Console kann ich wenn ich als User pi oder als User fhem angemeldet bin per folgendem Befehl eine SSH Verbindung zum Router aufbauen und brauche dafür kein Passwort:
Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

kaputt

Dann Plan X.
ssh admin@zumAP
dann
find / -name radiound merken aufschreiben, auslogen.
dann, local in einer shell
ssh admin@zumAP /voller/pfad/zum/kommando/radio off
Geht? Wenn ja dann weiter mit fhem, wenn nein Kopfkratz ..........
Gruß aus L.E.
Uwe

Bei U/Linux hilfreich aber nicht nötig, bei Windows nötig aber nicht hilfreich!
Rechtschreibfehler sind beabsichtigt und Ausdruck meiner Persönlichkeit

Wernieman

Er sollte aber vor allem, wie schon vorgeschlagen, mal als User fhem auf der Konsole den Befehl absetzen. Sonst kommen wir nicht weiter ....
ssh admin@192.168.178.29 'radio off'
- 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