Autor Thema: Befehle an fhem vom Laptop aus senden  (Gelesen 983 mal)

Offline tpunkt

  • Jr. Member
  • **
  • Beiträge: 60
Befehle an fhem vom Laptop aus senden
« am: 16 September 2021, 21:21:15 »
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!

Offline andies

  • Tester
  • Hero Member
  • ****
  • Beiträge: 3179
Antw:Befehle an fhem vom Laptop aus senden
« Antwort #1 am: 16 September 2021, 21:38:03 »
was ist denn, wenn du die befehle in den browser eingibst?
FHEM 6.0 auf RaspPi3 (Raspbian:  4.19.97-v7+ ); Perl: v5.28.1
SIGNALduino (433 MHz) und HM-UART (868 MHz)
wenige Brennenstuhl-IT, Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

Offline Jamo

  • Hero Member
  • *****
  • Beiträge: 1408
Antw:Befehle an fhem vom Laptop aus senden
« Antwort #2 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=13) 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=14) 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=15) stimmt die IP adresse?
6) https ?

« Letzte Änderung: 16 September 2021, 22:02:20 von Jamo »
Linux Debian, Homematic (UART/HMUSB), HUEBridge, Zigbee, FB, Alexa (fhem-lazy), livetracking, fhemApp Frontend für FHEM

Offline Otto123

  • Tester
  • Hero Member
  • ****
  • Beiträge: 19508
  • schon mal restore trainiert?
    • Otto's Technik Blog
Antw:Befehle an fhem vom Laptop aus senden
« Antwort #3 am: 16 September 2021, 23:04:01 »
Hi,

ich hätte nach ein Powershell Script zu bieten: https://github.com/heinz-otto/fhemcl/blob/master/fhemcl.ps1

Gruß Otto
Viele Grüße aus Leipzig
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7490+7412,WRT1900ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266
Zustimmung Zustimmung x 1 Liste anzeigen

Offline betateilchen

  • Developer
  • Hero Member
  • ****
  • Beiträge: 17432
  • s/fhem\.cfg/configDB/g
Antw:Befehle an fhem vom Laptop aus senden
« Antwort #4 am: 17 September 2021, 10:06:44 »
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.
« Letzte Änderung: 17 September 2021, 10:25:23 von betateilchen »
-----------------------
Unaufgeforderte Anfragen per email werden von mir nicht beantwortet. Dafür ist das Forum da.
-----------------------
Lesen gefährdet die Unwissenheit!

Offline Otto123

  • Tester
  • Hero Member
  • ****
  • Beiträge: 19508
  • schon mal restore trainiert?
    • Otto's Technik Blog
Antw:Befehle an fhem vom Laptop aus senden
« Antwort #5 am: 17 September 2021, 10:57:56 »
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
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7490+7412,WRT1900ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266

Offline tpunkt

  • Jr. Member
  • **
  • Beiträge: 60
Antw:Befehle an fhem vom Laptop aus senden
« Antwort #6 am: 17 September 2021, 12:11:27 »
was ist denn, wenn du die befehle in den browser eingibst?

Dann funktionieren sie

Offline Otto123

  • Tester
  • Hero Member
  • ****
  • Beiträge: 19508
  • schon mal restore trainiert?
    • Otto's Technik Blog
Antw:Befehle an fhem vom Laptop aus senden
« Antwort #7 am: 17 September 2021, 12:14:58 »
Dann funktionieren sie
Weil der Browser den csrf token ordentlich behandelt. Siehe: https://wiki.fhem.de/wiki/CsrfToken-HowTo
Viele Grüße aus Leipzig
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7490+7412,WRT1900ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266

Offline tpunkt

  • Jr. Member
  • **
  • Beiträge: 60
Antw:Befehle an fhem vom Laptop aus senden
« Antwort #8 am: 17 September 2021, 12:19:13 »
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=13) 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=14) 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=15) 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
« Letzte Änderung: 17 September 2021, 12:21:57 von tpunkt »

Offline tpunkt

  • Jr. Member
  • **
  • Beiträge: 60
Antw:Befehle an fhem vom Laptop aus senden
« Antwort #9 am: 17 September 2021, 12:20:28 »
Weil der Browser den csrf token ordentlich behandelt. Siehe: https://wiki.fhem.de/wiki/CsrfToken-HowTo

Ich versuche jetzt mal telnet zu definieren

Offline Otto123

  • Tester
  • Hero Member
  • ****
  • Beiträge: 19508
  • schon mal restore trainiert?
    • Otto's Technik Blog
Antw:Befehle an fhem vom Laptop aus senden
« Antwort #10 am: 17 September 2021, 12:28:32 »
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
« Letzte Änderung: 17 September 2021, 13:31:41 von Otto123 »
Viele Grüße aus Leipzig
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7490+7412,WRT1900ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266

Offline tpunkt

  • Jr. Member
  • **
  • Beiträge: 60
Antw:Befehle an fhem vom Laptop aus senden
« Antwort #11 am: 17 September 2021, 14:14:44 »
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
 
« Letzte Änderung: 17 September 2021, 14:23:46 von tpunkt »

Offline Otto123

  • Tester
  • Hero Member
  • ****
  • Beiträge: 19508
  • schon mal restore trainiert?
    • Otto's Technik Blog
Antw:Befehle an fhem vom Laptop aus senden
« Antwort #12 am: 17 September 2021, 14:38:36 »
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.
« Letzte Änderung: 17 September 2021, 14:58:13 von Otto123 »
Viele Grüße aus Leipzig
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7490+7412,WRT1900ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266

Offline tpunkt

  • Jr. Member
  • **
  • Beiträge: 60
Antw:Befehle an fhem vom Laptop aus senden
« Antwort #13 am: 17 September 2021, 15:01:44 »
Zitat
Hast Du denn wenigsten einmal den Befehl so ausgeführt wie ich vorgeschlagen habe?
Das war mir nicht klar.

Zitat
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 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?
« Letzte Änderung: 17 September 2021, 15:16:01 von tpunkt »

Offline laberlaib

  • Full Member
  • ***
  • Beiträge: 217
Antw:Befehle an fhem vom Laptop aus senden
« Antwort #14 am: 17 September 2021, 15:17:14 »
Ich will jetzt nicht verwirren, will nur hierauf kurz eingehen:

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.
« Letzte Änderung: 18 September 2021, 10:28:01 von laberlaib »
--
Proxmox, Homematic, G-Tags, Zigbee2MQTT, Rhasspy Sprachsteuerung im Aufbau (beta)