Befehle an fhem vom Laptop aus senden

Begonnen von tpunkt, 16 September 2021, 21:21:15

Vorheriges Thema - Nächstes Thema

tpunkt

Hallo,

ich möchte gerne fhem (läuft auf einem raspberry) von meinem (Windows) Laptop aus über keystrokes steuern. Dazu hatte ich auch schon mal ein funktionierendes System aus .bat Dateien, die über von .vbs Dateien aktiviert wurden. Diese .bat Dateien sehen so aus

@echo off
wget -q -O NUL "https://admin:passwort@192.168.178.211:8083/fhem?cmd=set Drucker on"


Seit ich meinen raspberry samt fhem neu aufsetzen musste funktioniert das leider nicht mehr, finde aber den Grund nicht. Hat jemand von Euch eine Idee was da schief laufen könnte? Oder vielleicht einen anderen Vorschlag, wie ich Befehle über meine Windows Tastatur an fhem senden könnte?

Danke!

andies

was ist denn, wenn du die befehle in den browser eingibst?
FHEM 6.1 auf RaspPi3 (Raspbian:  6.1.21-v8+; Perl: v5.32.1)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

Jamo

#2
1) Hast Du evtl in deiner fhem WEB instanz 'allowfrom' gesetzt, und die IP von deinem Laptop ist nicht mit drin?
2) csrf token gesetzt / nicht gesetzt, dann muss es unten in die URL mit rein, also https://admin:passwort@192.168.178.211:8083/fhem?cmd=set Drucker on&fwcsrf=abcdefghij&XHR=1
3) meiner Meinung nach muessen die Leerzeichen mit %20 encodiert werden, also:https://admin:passwort@192.168.178.211:8083/fhem?cmd=set%20Drucker%20on&fwcsrf=abcdefghij&XHR=1
4) Ich bin mir nicht sicher, ob das "admin:passwort" Konstrukt in https://admin:passwort@192.168.178.211.... noch akzeptiert wird, ich meine da hat es mal eine Änderung bei den Browsern gegeben, evtl geht auch nur noch http://192.168.xxx.xxx/fhem?user=xxx&pass=yyy.
Deswegen würde ich in fhem erstmal eine WebInstanz definieren, die kein user:passwort definiert hat, und dann ohne user und passwort probieren also https://192.168.178.211:8083/fhem?cmd=set%20Drucker%20on&fwcsrf=abscdefg&XHR=1
5) stimmt die IP adresse?
6) https ?

Bullseye auf iNUC, Homematic + HMIP(UART/HMUSB), Debmatic, HUEBridge, Zigbee/ConbeeII, FB, Alexa (fhem-lazy), Livetracking, LaCrosse JeeLink, LoRaWan / TTN / Chirpstack

Otto123

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

betateilchen

#4
kennt Windows inzwischen nicht mal mehr telnet? (ich weiß es wirklich nicht.)

Aber selbst wenn: putty ist zumindest in ssh Batch-fähig, damit kann man eine Verbindung zum FHEM Server aufbauen und dann dort auf jeden Fall telnet Befehle (komplexe Dinge sogar aus einer Datei) absetzen.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Otto123

telnet muss man nachinstallieren.
ssh ist direkt vorhanden, putty braucht man dafür nicht.

Man kann damit recht simpel eine ssh Verbindung aufbauen und ein shell Script auf dem FHEM Server ausführen.
Lediglich das Tool ssh-copy-id fehlt unter Windows um den public key Zugang exakt so einrichten zu können wie unter Linux üblich.
Dafür hätte ich auch eine Beschreibung. ;)

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

tpunkt

Zitat von: andies am 16 September 2021, 21:38:03
was ist denn, wenn du die befehle in den browser eingibst?

Dann funktionieren sie

Otto123

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

tpunkt

#8
Zitat von: Jamo am 16 September 2021, 21:53:04
1) Hast Du evtl in deiner fhem WEB instanz 'allowfrom' gesetzt, und die IP von deinem Laptop ist nicht mit drin?
2) csrf token gesetzt / nicht gesetzt, dann muss es unten in die URL mit rein, also https://admin:passwort@192.168.178.211:8083/fhem?cmd=set Drucker on&fwcsrf=abcdefghij&XHR=1
3) meiner Meinung nach muessen die Leerzeichen mit %20 encodiert werden, also:https://admin:passwort@192.168.178.211:8083/fhem?cmd=set%20Drucker%20on&fwcsrf=abcdefghij&XHR=1
4) Ich bin mir nicht sicher, ob das "admin:passwort" Konstrukt in https://admin:passwort@192.168.178.211.... noch akzeptiert wird, ich meine da hat es mal eine Änderung bei den Browsern gegeben, evtl geht auch nur noch http://192.168.xxx.xxx/fhem?user=xxx&pass=yyy.
Deswegen würde ich in fhem erstmal eine WebInstanz definieren, die kein user:passwort definiert hat, und dann ohne user und passwort probieren also https://192.168.178.211:8083/fhem?cmd=set%20Drucker%20on&fwcsrf=abscdefg&XHR=1
5) stimmt die IP adresse?
6) https ?

Wie oben gerade geschrieben funktionieren die Befehle bei direkter Eingabe im Browser, leider aber trotz der folgenden Änderungen immer noch nicht mit der .bat Datei.

1) 'allowfrom' ist nicht gesetzt
2) csrf probeweise entfernt
3) es funktioniert ohne %20 bei Direkteingabe über den Browser
4) Das "admin:passwort" Konstrukt habe ich in das vorgeschlagene Format geändert und der Befehl funktioniert bei Direkteingabe über den Browser, aber leider immer noch nicht über die .bat Datei. Leider bin ich davon abgesehen damit überfordert eine WebInstanz zu definieren...
5) Die IP adresse stimmt
6) https ist richtig so

tpunkt

Zitat von: Otto123 am 17 September 2021, 12:14:58
Weil der Browser den csrf token ordentlich behandelt. Siehe: https://wiki.fhem.de/wiki/CsrfToken-HowTo

Ich versuche jetzt mal telnet zu definieren

Otto123

#10
Zitat von: tpunkt am 17 September 2021, 12:19:13
Leider bin ich davon abgesehen damit überfordert eine WebInstanz zu definieren...
Und einfach mal den Weg über das Powershellscript magst Du nicht probieren? https://github.com/heinz-otto/fhemcl
Falls dir die Beschreibung dort zu knapp oder zu umfangreich ist :)
# windowstaste + x -> Windows Powershell öffnen
# Einmalig Script herunterladen
wget -OutFile fhemcl.ps1 https://raw.githubusercontent.com/heinz-otto/fhemcl/master/fhemcl.ps1
# Deine Befehle einfach so absetzen
.\fhemcl.ps1 "https://admin:passwort@192.168.178.211:8083" "set Drucker on"

Falls die Ausführung von PS Scripts noch nicht aktiviert wurde - vorher:
# windowstaste + x -> Windows Powershell (Administrator) öffnen
set-ExecutionPolicy RemoteSigned
# Mit Ja bestätigen
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

tpunkt

#11
Danke Otto für die Anleitung. Es klappt leider immer noch nicht, aber ich schreibe mal auf, was ich genau gemacht habe:

1. wget -OutFile fhemcl.ps1 https://raw.githubusercontent.com/heinz-otto/fhemcl/master/fhemcl.ps1 auf meinem Windows-Laptop in der Powershell ausgeführt im Standardordner C:\Windows\system32
2. set-ExecutionPolicy in der Windows Powershell (Administrator) ausgeführt und bestätigt
3. den Befehl .\fhemcl.ps1 "https://admin:passwort@192.168.178.211:8083" "set Drucker on" in eine .bat Datei gepackt und ausgeführt

Edit: Habe den Schritt 1. für den Ordner wiederholt, wo die .bat Datei gespeichert ist und nach dem Ausführen dieser öffnet sich jetzt ein cmd-Fenster mit der Meldung C:\Users\xxxxx\xxxxx\xxxxx\scripts>.\fhemcl.ps1 "https://pi:password@192.168.178.211:8083" "set Drucker on"

und ein Textfenster mit dem Code der Datei fhemcl.ps1

Otto123

#12
Hast Du denn wenigsten einmal den Befehl so ausgeführt wie ich vorgeschlagen habe? Also in der Powershellkonsole?  ::)
Wenn Du das ganze in einem batch Script ausführen willst musst Du folgendes beachten:
Den Pfad für das Script und den Aktuellen Pfad, also verwende für den Aufruf am einfachsten den kompletten Pfad.
Beispiel: C:\Users\xxxxx\xxxxx\xxxxx\scripts\fhemcl.ps1

Das Script braucht die Powershell, also musst Du das Script auch mit der Powershell aufrufen:
powershell C:\Users\xxxxx\xxxxx\xxxxx\scripts\fhemcl.ps1 'https://admin:passwort@192.168.178.211:8083' 'set Drucker on'
Du musst beachten nur einfache Hochkommas zu verwenden, aus irgendwelchen Gründen funktionieren die doppelten bei diesem Aufruf in der cmd nicht.
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

tpunkt

#13
ZitatHast Du denn wenigsten einmal den Befehl so ausgeführt wie ich vorgeschlagen habe?
Das war mir nicht klar.

ZitatWenn Du das ganze in einem batch Script ausführen willst musst Du folgendes beachten:
Den Pfad für das Script und den Aktuellen Pfad, also verwende für den Aufruf am einfachsten den kompletten Pfad Beispiel C:\Users\xxxxx\xxxxx\xxxxx\scripts\fhemcl.ps1

Das Script braucht die Powershell, also musst Du das Script auch mit der Powershell aufrufen:
powershell C:\Users\xxxxx\xxxxx\xxxxx\scripts\fhemcl.ps1 'https://admin:passwort@192.168.178.211:8083' 'set Drucker on'
Du musst beachten nur einfache Hochkommas zu verwenden, aus irgendwelchen Gründen funktionieren die doppelten in der cmd nicht.

Habe ich so ausprobiert, bekomme jetzt die Fehlermeldung: Invoke-WebRequest: Es konnte kein geschützter SSL/TLS-Kanal erstellt werden. Muss ich dann etwas an der powershell ändern?

laberlaib

#14
Ich will jetzt nicht verwirren, will nur hierauf kurz eingehen:

Zitat von: tpunkt am 17 September 2021, 12:19:13
4) Das "admin:passwort" Konstrukt habe ich in das vorgeschlagene Format geändert und der Befehl funktioniert bei Direkteingabe über den Browser, aber leider immer noch nicht über die .bat Datei. Leider bin ich davon abgesehen damit überfordert eine WebInstanz zu definieren...

Die einfachste aller WebIstanzen müsste eigentlich das hier sein:
define WEBapi FHEMWEB 8088 global
attr WEBapi csrfToken none

Läuft dann über Port 8088, keine Einschränkung nach IP (allowedfrom), kein csrfToken und kein https.


Edit für die Nachwelt:
Die Instanz hat dann keinerlei Schutz. Das ist zum Testen von Verbindungen, Skripten o.ä. ganz nützlich. Nach und nach kann (und sollte) man dann die Schutzmaßnahmen (BasicAuth, SSL, allowed from, ...)hochziehen.
--
Proxmox, Homematic, G-Tags, Zigbee2MQTT, Rhasspy Sprachsteuerung im Aufbau (beta)