mit fhem windows steuern - alternativensuche

Begonnen von the ratman, 03 Juli 2023, 08:34:51

Vorheriges Thema - Nächstes Thema

the ratman

grüß euch!

im zuge einiger umstellungen bei mir, frage ich mich grade, welche alternativen es zu winconnect unter fhem so gibt?
nicht, dass ich winconnect für schlecht halten würde! das gegenteil ist der fall. allerdings möchte ich mich auch mal nach alternativen umsehen.
bei fhem sind das ja gern auch mal mehrere möglichkeiten und so manche "versteckt" sich auch ganz gern mal vor mir *g*.

konkret also die fragen:
1) wie krieg' ich am einfachsten und sparsamsten, die wichtigsten statistiken von einer windose in mein fhem? (sysstat ist zumindest theoretisch bekannt)
2) wie steuere ich eine windows-programm von fhem aus  (start/stop/...) *)


*) ein beispiel der steuerung eines musikplayers von fhem über ein doif (auszug). dies ist foobar2000, der freundlicherweise automatisch startet, wenn man ihm befehle zusendet:
~snip~

([$SELF:cmd_1])
( set littlebastard_winconnect commandhide "C:\Users\xxx\Music\foobar2000\foobar2000.exe" /playpause )

DOELSEIF
~snip~
weitere anwendungsbeispiele wären: eine notifymsg in windows absetzen, oder hier z.b. das abspielen einer mp3 am win-pc (ebenfalls wieder als doif-teil):
~snip~
(
[$SELF:captcha] eq "true"
and
[?doif_tag_nacht:zustand] eq "tag"
)

( set luke7_winconnect showfile C:\Users\xxx\biep1.wav )
( set luke7_winconnect commandhide taskkill /F /IM wmplayer.exe )

DOELSEIF
~snip~
hier wird automatisch der windows mediaplayer aufgerufen und auch wieder beendet.
→do↑p!dnʇs↓shit←

Otto123

#1
Moin,

ich nehme da meist eine Kombination aus ssh und powershell. Beispielhaft der Aufruf in FHEM um Virtuelle Maschinen zu stoppen oder zu starten.
"ssh -T user@WindowsPC powershell Invoke-Command -ScriptBlock { Stop-Vm ubuntu -ErrorAction SilentlyContinue}"Voraussetzung ist die Installation von ssh Server im Windows (direkt vorhanden, wissen nur die wenigsten)
Aber natürlich kannst Du über ssh auch direkt Deine Beispiele als Befehle absetzen.

Den Remote Zugriff per ssh nehme ich gern im Linux Umfeld und Windows muss da keine Ausnahme machen ;)

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

the ratman

#2
super ansatz würde ich sagen. ich mag es, wenn schon alles da ist *g*
echt wahr:PS C:\Users\xxx> Get-Service -Name *ssh*

Status   Name               DisplayName
------   ----               -----------
Stopped  ssh-agent          OpenSSH Authentication Agent
hatte wieder mal keinen dunst ...

ich kann mir grade ned vorstellen, dass mein befehl dann so einfach in einem doif rausginge? nö, das wär doch zu einfach, gelle?(ssh -T user@WindowsPC powershell Invoke-Command -ScriptBlock {"C:\Users\xxx\Music\foobar2000\foobar2000.exe" /playpause})
→do↑p!dnʇs↓shit←

Otto123

Installation Get-WindowsCapability -Online -Name OpenSSH.Server* | Add-WindowsCapability -Online
Get-Service -Name sshd | Set-Service -StartupType Automatic
Get-Service -Name sshd | Start-Service
Dann den public key Zugang für FHEM einrichten, da gibt es viele Möglichkeiten. Du musst "bloß" den public key vom User fhem auf dem FHEM System in die Datei .ssh/authorized_keys des Windows Users übertragen. Du koppelst damit einen User auf System A mit einem User auf System B!
Ich hatte hier mal eine für mich "kompakte" Variante zusammen geschrieben: https://heinz-otto.blogspot.com/2023/01/ssh-zugang-fur-fhem-uber-script.html
Wenn das prinzipiell geht, dann gibt es manchmal noch Tücken (Quotes und Variablen) mit der Übergabe der Kommandozeile, aber Dein Befehl sollte sogar ohne Powershell funktionieren:
 ("ssh -T user@WindowsPC 'C:\Users\xxx\Music\foobar2000\foobar2000.exe /playpause'")
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

the ratman

also wenn da nicht noch was einfacheres kommt, wirds wohl dein ssh werden.
auf jeden fall ist das zukünftige befehle absetzen so wirklich nach meinen geschmack. und es war klar, dass ich mit den umschließenden zeichen blödsinn mach.

deine anleitung muss ich mir allerdings noch ein oder zweimal durch meine 3 gehirnzellen ziehen.
ich weiß ... ist sicher jetzt schon idioten einfach für nicht-klick-bunti-user ... aber man kennt mich ja mittlerweile, nehm ich an *g*.
ginge das ssh-zeugs zur not auch ohne puplic keys? das ganze rennt ja eh nur lokal, also sicherheit muss da nicht unbedingt groß dahinter sein. ja ja, dumme frage ...

auf jeden fall: schon mal jetzt ein fettes dankeschön, für eine scheinbar echt gute alternative!
→do↑p!dnʇs↓shit←

Otto123

Zitat von: the ratman am 03 Juli 2023, 15:00:53zur not auch ohne puplic keys
Das ist wirklich die einfachste Variante. Keine Sicherheit kennt ssh nicht, es geht nicht ohne autorisierung. Du müsstest alternativ das Passwort mitgeben und das ist aus meiner Sicht echt aufwendig :).

Das mit dem public key ist immer das gleiche Verfahren, egal ob linux -> linux oder linux -> Windows (sogar windows -> linux und windows -> windows). Das finde ich den großen Vorteil, einmal eingerichtet funktioniert es einfach in alle Richtungen.

Ich schreibe manchmal viel drumherum, weil ich beim Weg ermitteln selbst ein paar Erkenntnisse hatte. Und ich mache immer mal wieder einen neuen Weg.

Die Erklärung ist vielleicht zielgerichteter https://heinz-otto.blogspot.com/2020/09/ssh-mit-public-key.html
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

the ratman

#6
deine infos sind sicher gut, verwirren mich aber eher derzeit - x verschiedene anleitungen machts definitiv nicht besser *g* überhaupt, wenn die dann auch noch untereinander verlinken.

dumme fragen für den anfang also:
1) installieren von ssh auf beiden seiten (wenn noch nicht vorhanden) - o.k. - aber brauch' ich auf beiden seiten 'nen ssh-server? eher nein, aber auf welcher seite? was ist dann besser?
2) puplic key auf welcher seite machen? eher unter linux, nehm ich an?
3) puplic key wie zur anderen seite bringen? der muss ja auch irgendwo auf win liegen, oder?
4) neuer puplic key für jedes windows? ich hab ja dann 1 mal linux mit fhem und x mal windows.
5) noch n fettnäpfchen vergessen?

haben wir nix einfacheres?
fhem kriegt seine infos ja von sysstat. ich brauch' also nur was, was befehle von fhem an win sendet.
anders rum kann ichs eh schon mit z.b. webpost: dummes bspl. vom rainmeter weg: LeftMouseUpAction=["#CURRENTPATH#WebPost.exe" "http://192.168.178.8:8083/fhem?cmd.doif_dremel3d45_schalten=set doif_dremel3d45_schalten stop ja"]|[!ToggleMeterGroup "NA"]
→do↑p!dnʇs↓shit←

Otto123

#7
Zitat von: the ratman am 03 Juli 2023, 16:12:36haben wir nix einfacheres?
mMn ist ssh das einfachste und universellste :)
  • ssh als client ist auf beiden Seiten sowieso vorhanden, auf linux und Windows Standard seit vielen Jahren. Server für Deinen Fall brauchst Du auf Windows, deswegen musst Du ihn dort aktivieren.
  • Du erzeugst ein public/private Key Pärchen für den Benutzer fhem, auf dem Linux wo FHEM läuft, das ist ein Befehl. Der Public key wird später auf das System kopiert auf das Du zugreifen willst, deine Windosen.
  • Der Ort der Datei, die die Public Keys zur Autorisierung hält, ist normalerweise auf allen Systemen gleich: Pfad .ssh im User Homedir, dort die Datei authorized_keys. Es ist eine Textdatei, jeder Public Key ist dort eine Textzeile:
    • Windows: c:\users\willi\.ssh\authorized_keys
    • Linux: /home/willi/.ssh/authorized_keys
  • Nein, ein user ein key Pärchen.
  • Es gibt gar keine :)
Der private key ist Dein Schlüssel, der public Key ist Deine Kennung. Wenn jemand (Dein Windowsbenutzer) sagt: ich kenne den public key und vertraue ihm, dann kannst Du jederzeit mit deinem private key Eintritt erlangen und wie der Windowsbenutzer arbeiten.
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

the ratman

5. hast du 'ne ahnung - ich bade in verbindung mit linux normal darin!

fangt ja schon bei solchen problemchen an: wo ist das homedir des users fhem? ich kann mich ned erinnern, eines angelegt zu haben ... von omv aus lässt sich der nicht bearbeiten, also steh' ich schon wieder an *g*
→do↑p!dnʇs↓shit←

Otto123

Zitat von: the ratman am 04 Juli 2023, 10:29:51wo ist das homedir des users fhem?

/opt/fhem

Aber in meiner Anleitung musst Du das nicht explizit wissen :)
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

the ratman

sag ichs nicht? punkt 5 ...

wissen täte ich schon gern mehr. irgendwann kommt dann nämlich der punkt, wo ichs zumindest ansatzweise kapiere. is immer nur die frage: wann.
gut ... we probier ich nach deiner anleitung mal. ansonsten bleib' ich tatsächlich bei winconnect und hoffe, dass das noch möglichst lange lebt.

so zwischendurch mal *g* danke für deine geduld.
→do↑p!dnʇs↓shit←

Otto123

Ziel: Du hast es verstanden und meine Beschreibung wird durch eine solche Aktion besser ;)

Homedir unter linux ermitteln: Eine Möglichkeit: Terminal öffnen und Befehl pwd eingeben. Warum? pwd gibt den aktuellen Pfad zurück und eine Terminalsitzung wird im Homedir begonnen ;)
Wie macht man das in FHEM?
FHEM Kommandozeile und dann Perl Befehl qx verwenden, der gibt die Ausgabe von pwd zurück:
{qx(pwd)}
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

the ratman

ja, wenn man's weiß ... ich gehe dann auch gleich mal davon aus, dass ich alles per fhem kommandozeile erledigen kann? das in {qx(blabla-befehl)} zu kopieren, sollte sich sogar für mich machen lassen.

btw - genau das sind die stolpersteine ... wenn ich "pwd" lese, geh' ich von irgendwas fürs passwort aus, nicht, dass ich dort das heimverzeichnis erfahre. das ist genau das an linux, das mich zur verzweiflung bringt, weil ich nicht mal im traum dran denken würde, dass das eine mit dem anderen was zu tun haben könnte.

alternativ, nur, weil ichs wissen will: kann ich als z.b. user root, dem user fhem seinen key generieren lassen, oder muss ich da tatsächlich als user fhem 'rum gurken?
→do↑p!dnʇs↓shit←

Otto123

Du willst als User fhem agieren, da musst Du user fhem auch seinen Key erstellen lassen. Aber wie so immer - es ginge auch als user root, ist aber viel umständlicher ;)
Du kannst Dich auch im Terminal zum user fhem machen, so arbeite ich immer:
sudo -su fhemIst einfacher als das Vorgehen, welches man häufig im Internet findet: user fhem ein login und passwort spendieren.

Im übrigen ist die Sache mit dem key Pärchen und dem Public Key übertragen keine Hexerei!
  • Das key Pärchen erzeugen ist ein Befehl und zwei Dateien stehen danach am richtigen Ort mit den richtigen Berechtigungen.
  • Der public Key ist eine Zeile Text, die kopiert man auf das andere System in eine andere Textdatei! Das kann man in zwei cmd Fenstern auch mit den Editoren seiner Vorliebe über die Zwischenablage machen! ;)
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

the ratman

jo, is sicher einfacher. war auch nur 'ne frage, obs geht. Lustigerweise dachte ich genau an dein erwähntes "anderes" vorgehen. fhem zum vollen user machen, ohne wiederum zu wissen, was das hintenrum für folgen haben könnte.

na immerhin bin ich mal positiv genug gestimmt, dass ich auf einer win-maschine mal den server nachinstalliert hab zum zukünftigen testen. der rest kommt wahrscheinlich am we (wenns mir genug ruhe lässt bis dahin *g*).

[bitte hier ein weiteres dankeschön hindenken und für zukünftige beiträge weiter kopieren]
→do↑p!dnʇs↓shit←