FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Heimkoenig am 18 Juni 2017, 09:39:34

Titel: Per SSH W-Lan an entferntem Router (Asus) ein/aus schalten
Beitrag von: Heimkoenig am 18 Juni 2017, 09:39:34
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/ (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?
Titel: Antw:Per SSH W-Lan an entferntem Router (Asus) ein/aus schalten
Beitrag von: Wernieman am 18 Juni 2017, 09:59:22
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.
Titel: Per SSH W-Lan an entferntem Router (Asus) ein/aus schalten
Beitrag von: RaspiLED am 18 Juni 2017, 10:29:36
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, ...
Titel: Antw:Per SSH W-Lan an entferntem Router (Asus) ein/aus schalten
Beitrag von: Heimkoenig am 19 Juni 2017, 20:37:09
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?
Titel: Antw:Per SSH W-Lan an entferntem Router (Asus) ein/aus schalten
Beitrag von: Wernieman am 19 Juni 2017, 21:07:20
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
Titel: Antw:Per SSH W-Lan an entferntem Router (Asus) ein/aus schalten
Beitrag von: RaspiLED am 19 Juni 2017, 23:47:08
"/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, ...
Titel: Antw:Per SSH W-Lan an entferntem Router (Asus) ein/aus schalten
Beitrag von: kaputt am 20 Juni 2017, 00:26:25
Schon mal einfach ssh admin@192.168.178.29 radio offversucht?

Gruß aus L.E.
Uwe
Titel: Antw:Per SSH W-Lan an entferntem Router (Asus) ein/aus schalten
Beitrag 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.
Titel: Antw:Per SSH W-Lan an entferntem Router (Asus) ein/aus schalten
Beitrag von: CoolTux am 20 Juni 2017, 19:54:08
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
Titel: Antw:Per SSH W-Lan an entferntem Router (Asus) ein/aus schalten
Beitrag von: Otto123 am 20 Juni 2017, 20:42:54
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
Titel: Antw:Per SSH W-Lan an entferntem Router (Asus) ein/aus schalten
Beitrag von: kaputt am 20 Juni 2017, 22:50:49
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.
Titel: Antw:Per SSH W-Lan an entferntem Router (Asus) ein/aus schalten
Beitrag von: CoolTux am 21 Juni 2017, 06:06:22
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.
Titel: Antw:Per SSH W-Lan an entferntem Router (Asus) ein/aus schalten
Beitrag von: Otto123 am 21 Juni 2017, 09:48:19
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
Titel: Antw:Per SSH W-Lan an entferntem Router (Asus) ein/aus schalten
Beitrag von: kaputt am 21 Juni 2017, 10:01:05
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 ..........
Titel: Antw:Per SSH W-Lan an entferntem Router (Asus) ein/aus schalten
Beitrag von: Wernieman am 21 Juni 2017, 11:54:45
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'
Titel: Antw:Per SSH W-Lan an entferntem Router (Asus) ein/aus schalten
Beitrag von: CoolTux am 21 Juni 2017, 12:01:12
Mein Reden. Und wenn er das gemacht hat wäre eine Fehlermeldung sehr hilfreich. Und es gibt definitiv eine Fehlermeldung, und sie lautet nicht "geht nicht"
Titel: Antw:Per SSH W-Lan an entferntem Router (Asus) ein/aus schalten
Beitrag von: AET_FHEM am 19 Mai 2019, 17:56:22
Hallo,

hab seit neustem auch einen Asus router gekauft => kann ich per ssh auch mein Gästenetzwerk aus/einschalten?

Grüße
AET
Titel: Antw:Per SSH W-Lan an entferntem Router (Asus) ein/aus schalten
Beitrag von: Wernieman am 19 Mai 2019, 18:07:32
Gucke bei Deinem Router, so ist eine pauschale Aussage nicht möglich ... ist Hersteller UND Routerspezifisch ...
Titel: Antw:Per SSH W-Lan an entferntem Router (Asus) ein/aus schalten
Beitrag von: AET_FHEM am 19 Mai 2019, 18:09:11
Hersteller Asus Model RT-AC86U mit WRT :-)

Titel: Antw:Per SSH W-Lan an entferntem Router (Asus) ein/aus schalten
Beitrag von: Otto123 am 05 Juni 2019, 10:33:44
Zitat von: AET_FHEM am 19 Mai 2019, 17:56:22
Hallo,

hab seit neustem auch einen Asus router gekauft => kann ich per ssh auch mein Gästenetzwerk aus/einschalten?

Grüße
AET
Falls Du mit WRT -> OpenWrt meinst, habe ich hier was gefunden:
https://blog.doenselmann.com/zeitgesteuertes-wlan-auf-openwrt-router/
Das musst Du anpassen: Mit uci show wireless kannst Du Deine Konfiguration listen lassen.
Die Lösung in dem Blog den Vor- oder Nachteil: es wird jedesmal im Flash geschrieben. Das macht das Web Interface an der Stelle aber auch.
Wenn Du das commit weglässt, ist das entsprechende Wlan weg, dass Web Interface sieht etwas komisch aus. Die Konfig wird aber nicht geschrieben, damit wäre nach einem Restart des Routers der alte Stand verfügbar.

Gruß Otto