Zum Inhalt springen

FHEM Installation Windows: Unterschied zwischen den Versionen

Aus FHEMWiki
K FHEM-Versionsabhängigkeit vermindert
K Installation per Skript: powershell "-ExecutionPolicy Bypass" ergänzt
 
(17 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
{{Baustelle}}
{{Baustelle}}
Aktualisierter und leicht erweiterter Inhalt von https://fhem.de/HOWTO_Windows.html in Deutsch
'''{{PAGENAME}}''' beschreibt die Installation von FHEM als portable Software für Windows (keine Eingriffe in die Registrierungsdatenbank). Die Anleitung ist sowohl für die Installation auf einem Wechseldatenträger, zum Beispiel einem USB-Stick, als auch auf einem internen Laufwerk anwendbar. Nach der Grundinstallation ist FHEM zum Ausprobieren, Experimentieren und/oder den portablen Einsatz eingerichtet. Bei Installation auf einem internen Laufwerk ist die abschließend dargestellte Einrichtung von FHEM als Dienst und damit der dauerhafte Betrieb als Hausautomations-Server unter Windows möglich.
==Manuelle Installation==
===Grundinstallation===
====Installation FHEM====
Das aktuelle [https://fhem.de/#Download fhem-X.Y.zip Paket] (momentan fhem-6.4.zip) herunterladen.


'''{{PAGENAME}}''' beschreibt wie FHEM in wenigen Minuten auf einem Windows-System installiert wird
Einen neuen Ordner für FHEM anlegen. Für diesen Artikel wurde der Ordner <code>f:\my-fhem</code> angelegt.
* auf einem USB-Stick oder anderem Wechseldatenträger als portables Programm (keine Eingriffe in die Registrierungsdatenbank!)
* auf einem internen Datenträger erweitert um die Einrichtung von FHEM als Windows-Dienst


Den gesamten Inhalt des Ordners <code>fhem-6.4\fhem-6.4</code> aus dem .zip-Paket nach <code>f:\my-fhem</code> entpacken.


==Installation FHEM==
''Zur Kontrolle:'' In <code>f:\my-fhem</code> befindet sich anschließend unter anderem die Datei <code>fhem.pl</code>.
Das aktuelle [https://fhem.de/#Download fhem-X.Y.tar.gz Paket] (momentan fhem-5.8.tar.gz) herunterladen und entpacken.


Da Windows selbst keine tar.gz-Pakete unterstützt, wird ein separater Entpacker benötigt. Hierzu eignet sich unter anderem das Open Source-Programm [http://7-zip.org/download.html 7-zip] ([https://portableapps.com/apps/utilities/7-zip_portable Download 7-zip portable]).
====Installation Perl====
Eine aktuelle [http://strawberryperl.com/releases.html Strawberry Perl Portable Edition] herunterladen und im Ordner von FHEM entpacken.  


Für diesen Artikel wurde der gesamte Inhalt des Ordners <code>fhem-5.8</code> aus dem .tar.gz-Paket nach <code>f:\mein-fhem</code> entpackt.  
Hier wurde der Inhalt des Pakets "strawberry-perl-5.42.0.1-64bit-portable.zip" nach <code>f:\my-fhem</code> entpackt.  


''Zur Kontrolle:'' In <code>f:\mein-fhem</code> befindet sich anschließend unter anderem die Datei <code>fhem.pl</code>.
''Zur Kontrolle:'' In <code>f:\my-fhem</code> existiert anschließend unter anderem ein zusätzlicher Ordner <code>perl</code>.


==Installation Perl==
====Start von FHEM====
Eine aktuelle [http://strawberryperl.com/releases.html Strawberry Perl Portable Edition] herunterladen und im Verzeichnis von FHEM entpacken.
Eine Eingabeaufforderung (cmd) in Windows öffnen, in den zuvor angelegten Ordner wechseln, portableshell.bat aufrufen und anschließend FHEM starten:


Hier wurde die Datei "strawberry-perl-5.24.1.1-32bit-portable.zip" nach <code>f:\mein-fhem</code> entpackt.
<syntaxhighlight lang="doscon">
C:\> cd f:\my-fhem
F:\my-fhem> portableshell.bat
F:\my-fhem> perl fhem.pl fhem.cfg
</syntaxhighlight>


''Zur Kontrolle:'' In <code>f:\mein-fhem</code> existiert anschließend unter anderem ein zusätzlicher Ordner <code>perl</code>.
Jetzt erscheint ein Windows-Sicherheitshinweis, dass die Windows-Firewall den Perl Interpreter blockiert. Für den Zugriff auf FHEM muss eine Firewall-Ausnahme eingerichtet werden. Hierzu ist der Sicherheitshinweis mit dem Button {{Taste|Zugriff zulassen}} zu beenden.


==Start von FHEM==
''Hinweis:'' In der Eingabeaufforderung erscheint keine Rückmeldung und das Programm beendet sich nicht. Die Eingabeaufforderung darf nicht geschlossen werden, so lange FHEM läuft.
Eine Eingabeaufforderung (cmd) in Windows öffnen, in das zuvor angelegte Verzeichnis wechseln und FHEM starten:


<source lang="doscon">
====Aufruf des FHEM-Webinterfaces (FHEMWEB)====
C:\> cd f:\mein-fhem
F:\mein-fhem> perl\bin\perl fhem.pl fhem.cfg
</source>
 
Jetzt erscheint ein Windows-Sicherheitshinweis, dass die Windows-Firewall den Perl interpreter blockiert. Für den Zugriff auf FHEM muss eine Firewall-Ausnahme eingerichtet werden. Hierzu ist der Sicherheitshinweis mit dem Button {{Taste|Zugriff zulassen}} zu beenden.
 
''Hinweis:'' In der Eingabeauffordeung erscheint keine Rückmeldung und das Programm beendet sich nicht. Die Eingabeaufforderung darf nicht geschlossen werden, so lange FHEM läuft.
 
==Aufruf des FHEM-Webinterfaces (FHEMWEB)==
Einen Browser öffnen (Firefox, Chrome und Safari werden empfohlen) und FHEM unter folgender Adresse aufrufen:
Einen Browser öffnen (Firefox, Chrome und Safari werden empfohlen) und FHEM unter folgender Adresse aufrufen:


Zeile 44: Zeile 41:
[[Datei:ErsteSchritteInFhem01.png]]
[[Datei:ErsteSchritteInFhem01.png]]


==Update von FHEM==
====Update von FHEM====
FHEM wird kontinuierlich weiterentwickelt. Daher sollte direkt ein Update auf die aktuellen Entwicklungsstand durchgeführt werden.  
FHEM wird kontinuierlich weiterentwickelt. Daher sollte direkt ein Update auf den aktuellen Entwicklungsstand durchgeführt werden.  


Im Befehls-Eingabefeld von FHEM, das ist das weiße, rechteckige Texteingabefeld rechts neben dem FHEM-Logo, den Befehl
Im Befehls-Eingabefeld von FHEM, das ist das weiße, rechteckige Texteingabefeld rechts neben dem FHEM-Logo, den Befehl
Zeile 53: Zeile 50:
eingeben und mit {{Taste|Enter}} abschließen.
eingeben und mit {{Taste|Enter}} abschließen.


Es beginnt der Update-Prozeß, der eine Weile dauern kann. Den Fortschritt zeigt FHEM an. Am Ende des Update-Prozesses fordert FHEM zu einem "shutdown restart" auf. Dies bitte ignorieren und in die Kommandozeile nur  
Es beginnt der Update-Prozeß, der eine Weile dauern kann. Den Fortschritt zeigt FHEM an. Am Ende des Update-Prozesses fordert FHEM zu einem "shutdown restart" auf. Dies bitte ignorieren und im Befehls-Eingabefeld nur  


<code>shutdown</code>
<code>shutdown</code>
Zeile 61: Zeile 58:
Nun wieder zum Fenster der Eingabeaufforderung wechseln. Das aktualisierte FHEM erneut starten; beispielsweise durch {{Taste|Pfeil hoch}} gefolgt von {{Taste|Enter}} oder erneute Eingabe von  
Nun wieder zum Fenster der Eingabeaufforderung wechseln. Das aktualisierte FHEM erneut starten; beispielsweise durch {{Taste|Pfeil hoch}} gefolgt von {{Taste|Enter}} oder erneute Eingabe von  


<source lang="doscon">F:\mein-fhem> perl\bin\perl fhem.pl fhem.cfg</source>
<syntaxhighlight lang="doscon">F:\my-fhem> perl\bin\perl fhem.pl fhem.cfg</syntaxhighlight>
 
Hiermit ist die Installation von FHEM bereits grundlegend abgeschlossen und [[Erste Schritte in FHEM]] lädt zum Ausprobieren ein.
 
===Installations-Optionen===
====Installation von FHEM als Dienst====
''Hinweis:'' Die Einrichtung von FHEM als Dienst erfordert einen automatisch im folgenden Installationsprozeß erstellten Eintrag in der Registrierungsdatenbank.
 
FHEM durch Eingabe von <code>shutdown</code> im Befehls-Eingabefeld beenden.
 
Eine Eingabeaufforderung als Administrator öffnen und die PATH Umgebungsvariable für Perl erweitern, FHEM als Dienst installieren sowie den Dienst starten:
<syntaxhighlight lang="doscon">
F:\my-fhem> PATH=F:\my-fhem\c\bin;F:\my-fhem\perl\bin;%PATH%
F:\my-fhem> powershell -NoProfile -Command ^
  "$new = 'F:\my-fhem\perl\site\bin;F:\my-fhem\perl\bin;F:\my-fhem\c\bin';" ^
  "$machine = [Environment]::GetEnvironmentVariable('Path','Machine');" ^
  "if(-not $machine){ $machine = '' };" ^
  "$parts = ($machine.Split(';') | ForEach-Object { $_.Trim() } | Where-Object { $_ -ne '' }) + ($new.Split(';') | ForEach-Object { $_.Trim() });" ^
  "$uniq = $parts | Where-Object { $_ } | Select-Object -Unique;" ^
  "$final = $uniq -join ';';" ^
  "[Environment]::SetEnvironmentVariable('Path',$final,'Machine');" ^
  "Write-Output 'PATH updated';"
F:\my-fhem> perl fhem.pl fhem.cfg -i
F:\my-fhem> net start fhem
</syntaxhighlight>
 
Im Windows-Verwaltungswerkzeug "Dienste" wird der FHEM-Dienst nach erfolgreicher Einrichtung mit dem Namen "fhem server" aufgeführt. FHEM startet nach Installation als Dienst beim Windows-Start unsichtbar (ohne offene Eingabeaufforderung) im Hintergrund.
 
Anders als beim Start von FHEM über die Eingabeaufforderung kann bei FHEM als Dienst nach einem <code>update</code> der Befehl <code>shutdown restart</code> erfolgreich ausgeführt werden.
 
==Installation per Skript==
Folgendes Skript "fhem_install.bat" installiert FHEM mit allen Installationsoptionen (PATH-Erweiterung, Dienstinstallation) auf dem internen Laufwerk C. Das Skript muss mit Administratorrechten ausgeführt werden.
 
<syntaxhighlight lang="bat">
rem fhem_install.bat
 
setlocal
 
rem -- Installationsverzeichnis (sollte keine Leer- oder Sonderzeichen enthalten und nicht zu lang sein) und Download-URLs festlegen
set "INSTALLDIR=C:\my-fhem"
set "FHEMURL=https://fhem.de/fhem-6.4.zip"
set "STRAWBERRYPERLURL=https://github.com/StrawberryPerl/Perl-Dist-Strawberry/releases/download/SP_54201_64bit/strawberry-perl-5.42.0.1-64bit-portable.zip"
 
rem -- Installationsverzeichnis anlegen
if exist "%INSTALLDIR%" (
  echo Fehler: Installationsverzeichnis "%INSTALLDIR%" existiert bereits. Abbruch.
  exit /b 1
)
md %INSTALLDIR%
cd %INSTALLDIR%


Hiermit ist die Installation von FHEM auf einem Wechseldatenträger bereits grundlegend abgeschlossen und [[Erste Schritte in FHEM]] lädt zum Ausprobieren ein.
rem -- FHEM download and install
curl -o "fhem.zip" %FHEMURL%
tar -xf fhem.zip --strip-components=1
del fhem.zip


==Installation Win32::SerialPort==
rem -- strawberryperl download and install
Für die meisten USB-Gateways (CUL, Z-Wave, EnOcean,..) wird das Modul Win32::SerialPort benötigt. Das Modul sollte erst nach erfolgreicher Windows-Treiberinstallation für das Gateway installiert werden. Zur Modulinstallation sind folgende Befehle in der Eingabeaufforderung von Windows abzusetzen:
curl -L -o "perl.zip" %STRAWBERRYPERLURL%
tar -xf perl.zip
del perl.zip


<source lang="doscon">
rem -- Alle folgenden Abschnitte benötigen zwingend Admin-Rechte!
F:\mein-fhem> PATH=F:\mein-fhem\c\bin;F:\mein-fhem\perl\bin;%PATH%
F:\mein-fhem> perl\bin\cpan -i Win32::SerialPort
</source>


==Installation von FHEM als Dienst==
rem -- Firewall-Regeln anlegen
FHEM durch Eingabe von <code>shutdown</code> im Befehls-Eingabefeld beenden.  
netsh advfirewall firewall add rule name="FHEM Perl interpreter TCP" dir=in action=allow program="%INSTALLDIR%\perl\bin\perl.exe" profile=private protocol=TCP
netsh advfirewall firewall add rule name="FHEM Perl interpreter UDP" dir=in action=allow program="%INSTALLDIR%\perl\bin\perl.exe" profile=private protocol=UDP
 
rem -- PATH Umgebungsvariable für strawberryperl (dauerhaft) erweitern statt portableshell.bat zu starten
powershell -NoProfile -ExecutionPolicy Bypass -Command ^
  "$new = '%INSTALLDIR%\perl\site\bin;%INSTALLDIR%\perl\bin;%INSTALLDIR%\c\bin';" ^
  "$machine = [Environment]::GetEnvironmentVariable('Path','Machine');" ^
  "if(-not $machine){ $machine = '' };" ^
  "$parts = ($machine.Split(';') | ForEach-Object { $_.Trim() } | Where-Object { $_ -ne '' }) + ($new.Split(';') | ForEach-Object { $_.Trim() });" ^
  "$uniq = $parts | Where-Object { $_ } | Select-Object -Unique;" ^
  "$final = $uniq -join ';';" ^
  "[Environment]::SetEnvironmentVariable('Path',$final,'Machine');" ^
  "Write-Output 'PATH updated';"
 
rem -- FHEM-Dienst installieren und starten
set PATH=%PATH%;%INSTALLDIR%\perl\site\bin;%INSTALLDIR%\perl\bin;%INSTALLDIR%\c\bin
perl fhem.pl fhem.cfg -i
net start fhem
 
endlocal
</syntaxhighlight>
 
Nach erfolgreicher Ausführung des Skriptes kann FHEM direkt genutzt werden.
 
Das nachfolgende als Administrator auszuführende Skript "fhem_uninstall.bat" entfernt die Installation von FHEM und alle geänderten Einstellungen in Windows wieder. ACHTUNG: Datensicherung vorab nicht vergessen. Das Skript entfernt alles ohne Sicherheitsabfragen.
 
<syntaxhighlight lang="bat">
rem fhem_uninstall.bat


Zum Fenster der Eingabeaufforderung wechseln und fehlende Perl-Module durch folgende Befehle installieren:
setlocal


<source lang="doscon">
rem -- Installationsverzeichnis
F:\mein-fhem> PATH=F:\mein-fhem\c\bin;F:\mein-fhem\perl\bin;%PATH%
set "INSTALLDIR=C:\my-fhem"
F:\mein-fhem> perl\bin\cpan -i Win32::Daemon
F:\mein-fhem> perl\bin\cpan -i Win32::Console
</source>


FHEM als Dienst einrichten (unter Umständen sind Administrator-Rechte erforderlich):
rem -- FHEM Dienst stoppen und entfernen
perl fhem.pl -u
net stop fhem
sc delete fhem
 
rem -- Firewall-Regeln entfernen
netsh advfirewall firewall delete rule name="FHEM Perl interpreter TCP"
netsh advfirewall firewall delete rule name="FHEM Perl interpreter UDP"


<source lang="doscon">F:\mein-fhem> perl\bin\perl fhem.pl fhem.cfg -i</source>
rem -- PowerShell: PATH für aktuelle Session und machine-Umgebungsvariable zurücksetzen
powershell -NoProfile -ExecutionPolicy Bypass -Command ^
  "$oldPaths = '%INSTALLDIR%\perl\site\bin;%INSTALLDIR%\perl\bin;%INSTALLDIR%\c\bin';" ^
  "$machine = [Environment]::GetEnvironmentVariable('Path','Machine');" ^
  "if(-not $machine){ $machine = '' };" ^
  "$parts = $machine.Split(';') | ForEach-Object { $_.Trim() } | Where-Object { $_ -ne '' };" ^
  "$filtered = $parts | Where-Object { $_ -notin $oldPaths.Split(';') };" ^
  "$final = $filtered -join ';';" ^
  "[Environment]::SetEnvironmentVariable('Path',$final,'Machine');" ^
  "[Environment]::SetEnvironmentVariable('Path',$final,'Process');" ^
  "Write-Output 'PATH updated';"


FHEM startet nach Installation als Dienst automatisch beim Windows-Start unsichtbar (ohne offene Eingabeaufforderung) mit. Im Verwaltungswerkzeug "Dienste" wird der FHEM-Dienst mit Namen "fhem server" aufgeführt.
rem -- FHEM/Perl-Verzeichnisse und Dateien löschen
rmdir /s /q %INSTALLDIR%


Anders als beim Start über die Eingabeaufforderung kann jetzt nach einem <code>update</code> der Befehl <code>shutdown restart</code> erfolgreich ausgeführt werden.
endlocal
</syntaxhighlight>


==Wie mache ich als FHEM-Einsteiger weiter?==
==Wie geht es weiter?==
[[Erste Schritte in FHEM]]
[[Erste Schritte in FHEM]]


==Links==
[[Kategorie:HOWTOS]]

Aktuelle Version vom 29. Dezember 2025, 10:36 Uhr


An dieser Seite wird momentan noch gearbeitet.


FHEM Installation Windows beschreibt die Installation von FHEM als portable Software für Windows (keine Eingriffe in die Registrierungsdatenbank). Die Anleitung ist sowohl für die Installation auf einem Wechseldatenträger, zum Beispiel einem USB-Stick, als auch auf einem internen Laufwerk anwendbar. Nach der Grundinstallation ist FHEM zum Ausprobieren, Experimentieren und/oder den portablen Einsatz eingerichtet. Bei Installation auf einem internen Laufwerk ist die abschließend dargestellte Einrichtung von FHEM als Dienst und damit der dauerhafte Betrieb als Hausautomations-Server unter Windows möglich.

Manuelle Installation

Grundinstallation

Installation FHEM

Das aktuelle fhem-X.Y.zip Paket (momentan fhem-6.4.zip) herunterladen.

Einen neuen Ordner für FHEM anlegen. Für diesen Artikel wurde der Ordner f:\my-fhem angelegt.

Den gesamten Inhalt des Ordners fhem-6.4\fhem-6.4 aus dem .zip-Paket nach f:\my-fhem entpacken.

Zur Kontrolle: In f:\my-fhem befindet sich anschließend unter anderem die Datei fhem.pl.

Installation Perl

Eine aktuelle Strawberry Perl Portable Edition herunterladen und im Ordner von FHEM entpacken.

Hier wurde der Inhalt des Pakets "strawberry-perl-5.42.0.1-64bit-portable.zip" nach f:\my-fhem entpackt.

Zur Kontrolle: In f:\my-fhem existiert anschließend unter anderem ein zusätzlicher Ordner perl.

Start von FHEM

Eine Eingabeaufforderung (cmd) in Windows öffnen, in den zuvor angelegten Ordner wechseln, portableshell.bat aufrufen und anschließend FHEM starten:

C:\> cd f:\my-fhem
F:\my-fhem> portableshell.bat
F:\my-fhem> perl fhem.pl fhem.cfg

Jetzt erscheint ein Windows-Sicherheitshinweis, dass die Windows-Firewall den Perl Interpreter blockiert. Für den Zugriff auf FHEM muss eine Firewall-Ausnahme eingerichtet werden. Hierzu ist der Sicherheitshinweis mit dem Button Zugriff zulassen zu beenden.

Hinweis: In der Eingabeaufforderung erscheint keine Rückmeldung und das Programm beendet sich nicht. Die Eingabeaufforderung darf nicht geschlossen werden, so lange FHEM läuft.

Aufruf des FHEM-Webinterfaces (FHEMWEB)

Einen Browser öffnen (Firefox, Chrome und Safari werden empfohlen) und FHEM unter folgender Adresse aufrufen:

http://localhost:8083/fhem

Es öffnet sich die FHEM-Hauptseite:

Update von FHEM

FHEM wird kontinuierlich weiterentwickelt. Daher sollte direkt ein Update auf den aktuellen Entwicklungsstand durchgeführt werden.

Im Befehls-Eingabefeld von FHEM, das ist das weiße, rechteckige Texteingabefeld rechts neben dem FHEM-Logo, den Befehl

update

eingeben und mit Enter abschließen.

Es beginnt der Update-Prozeß, der eine Weile dauern kann. Den Fortschritt zeigt FHEM an. Am Ende des Update-Prozesses fordert FHEM zu einem "shutdown restart" auf. Dies bitte ignorieren und im Befehls-Eingabefeld nur

shutdown

gefolgt von Enter zum Beenden von FHEM eingeben.

Nun wieder zum Fenster der Eingabeaufforderung wechseln. Das aktualisierte FHEM erneut starten; beispielsweise durch Pfeil hoch gefolgt von Enter oder erneute Eingabe von

F:\my-fhem> perl\bin\perl fhem.pl fhem.cfg

Hiermit ist die Installation von FHEM bereits grundlegend abgeschlossen und Erste Schritte in FHEM lädt zum Ausprobieren ein.

Installations-Optionen

Installation von FHEM als Dienst

Hinweis: Die Einrichtung von FHEM als Dienst erfordert einen automatisch im folgenden Installationsprozeß erstellten Eintrag in der Registrierungsdatenbank.

FHEM durch Eingabe von shutdown im Befehls-Eingabefeld beenden.

Eine Eingabeaufforderung als Administrator öffnen und die PATH Umgebungsvariable für Perl erweitern, FHEM als Dienst installieren sowie den Dienst starten:

F:\my-fhem> PATH=F:\my-fhem\c\bin;F:\my-fhem\perl\bin;%PATH%
F:\my-fhem> powershell -NoProfile -Command ^
  "$new = 'F:\my-fhem\perl\site\bin;F:\my-fhem\perl\bin;F:\my-fhem\c\bin';" ^
  "$machine = [Environment]::GetEnvironmentVariable('Path','Machine');" ^
  "if(-not $machine){ $machine = '' };" ^
  "$parts = ($machine.Split(';') | ForEach-Object { $_.Trim() } | Where-Object { $_ -ne '' }) + ($new.Split(';') | ForEach-Object { $_.Trim() });" ^
  "$uniq = $parts | Where-Object { $_ } | Select-Object -Unique;" ^
  "$final = $uniq -join ';';" ^
  "[Environment]::SetEnvironmentVariable('Path',$final,'Machine');" ^
  "Write-Output 'PATH updated';"
F:\my-fhem> perl fhem.pl fhem.cfg -i
F:\my-fhem> net start fhem

Im Windows-Verwaltungswerkzeug "Dienste" wird der FHEM-Dienst nach erfolgreicher Einrichtung mit dem Namen "fhem server" aufgeführt. FHEM startet nach Installation als Dienst beim Windows-Start unsichtbar (ohne offene Eingabeaufforderung) im Hintergrund.

Anders als beim Start von FHEM über die Eingabeaufforderung kann bei FHEM als Dienst nach einem update der Befehl shutdown restart erfolgreich ausgeführt werden.

Installation per Skript

Folgendes Skript "fhem_install.bat" installiert FHEM mit allen Installationsoptionen (PATH-Erweiterung, Dienstinstallation) auf dem internen Laufwerk C. Das Skript muss mit Administratorrechten ausgeführt werden.

rem fhem_install.bat

setlocal

rem -- Installationsverzeichnis (sollte keine Leer- oder Sonderzeichen enthalten und nicht zu lang sein) und Download-URLs festlegen
set "INSTALLDIR=C:\my-fhem"
set "FHEMURL=https://fhem.de/fhem-6.4.zip"
set "STRAWBERRYPERLURL=https://github.com/StrawberryPerl/Perl-Dist-Strawberry/releases/download/SP_54201_64bit/strawberry-perl-5.42.0.1-64bit-portable.zip"

rem -- Installationsverzeichnis anlegen
if exist "%INSTALLDIR%" (
  echo Fehler: Installationsverzeichnis "%INSTALLDIR%" existiert bereits. Abbruch.
  exit /b 1
)
md %INSTALLDIR%
cd %INSTALLDIR%

rem -- FHEM download and install
curl -o "fhem.zip" %FHEMURL%
tar -xf fhem.zip --strip-components=1
del fhem.zip

rem -- strawberryperl download and install
curl -L -o "perl.zip" %STRAWBERRYPERLURL%
tar -xf perl.zip
del perl.zip

rem -- Alle folgenden Abschnitte benötigen zwingend Admin-Rechte!

rem -- Firewall-Regeln anlegen
netsh advfirewall firewall add rule name="FHEM Perl interpreter TCP" dir=in action=allow program="%INSTALLDIR%\perl\bin\perl.exe" profile=private protocol=TCP
netsh advfirewall firewall add rule name="FHEM Perl interpreter UDP" dir=in action=allow program="%INSTALLDIR%\perl\bin\perl.exe" profile=private protocol=UDP

rem -- PATH Umgebungsvariable für strawberryperl (dauerhaft) erweitern statt portableshell.bat zu starten
powershell -NoProfile -ExecutionPolicy Bypass -Command ^
  "$new = '%INSTALLDIR%\perl\site\bin;%INSTALLDIR%\perl\bin;%INSTALLDIR%\c\bin';" ^
  "$machine = [Environment]::GetEnvironmentVariable('Path','Machine');" ^
  "if(-not $machine){ $machine = '' };" ^
  "$parts = ($machine.Split(';') | ForEach-Object { $_.Trim() } | Where-Object { $_ -ne '' }) + ($new.Split(';') | ForEach-Object { $_.Trim() });" ^
  "$uniq = $parts | Where-Object { $_ } | Select-Object -Unique;" ^
  "$final = $uniq -join ';';" ^
  "[Environment]::SetEnvironmentVariable('Path',$final,'Machine');" ^
  "Write-Output 'PATH updated';"

rem -- FHEM-Dienst installieren und starten
set PATH=%PATH%;%INSTALLDIR%\perl\site\bin;%INSTALLDIR%\perl\bin;%INSTALLDIR%\c\bin
perl fhem.pl fhem.cfg -i
net start fhem

endlocal

Nach erfolgreicher Ausführung des Skriptes kann FHEM direkt genutzt werden.

Das nachfolgende als Administrator auszuführende Skript "fhem_uninstall.bat" entfernt die Installation von FHEM und alle geänderten Einstellungen in Windows wieder. ACHTUNG: Datensicherung vorab nicht vergessen. Das Skript entfernt alles ohne Sicherheitsabfragen.

rem fhem_uninstall.bat

setlocal

rem -- Installationsverzeichnis
set "INSTALLDIR=C:\my-fhem"

rem -- FHEM Dienst stoppen und entfernen
perl fhem.pl -u
net stop fhem
sc delete fhem
  
rem -- Firewall-Regeln entfernen
netsh advfirewall firewall delete rule name="FHEM Perl interpreter TCP"
netsh advfirewall firewall delete rule name="FHEM Perl interpreter UDP"

rem -- PowerShell: PATH für aktuelle Session und machine-Umgebungsvariable zurücksetzen
powershell -NoProfile -ExecutionPolicy Bypass -Command ^
  "$oldPaths = '%INSTALLDIR%\perl\site\bin;%INSTALLDIR%\perl\bin;%INSTALLDIR%\c\bin';" ^
  "$machine = [Environment]::GetEnvironmentVariable('Path','Machine');" ^
  "if(-not $machine){ $machine = '' };" ^
  "$parts = $machine.Split(';') | ForEach-Object { $_.Trim() } | Where-Object { $_ -ne '' };" ^
  "$filtered = $parts | Where-Object { $_ -notin $oldPaths.Split(';') };" ^
  "$final = $filtered -join ';';" ^
  "[Environment]::SetEnvironmentVariable('Path',$final,'Machine');" ^
  "[Environment]::SetEnvironmentVariable('Path',$final,'Process');" ^
  "Write-Output 'PATH updated';"

rem -- FHEM/Perl-Verzeichnisse und Dateien löschen
rmdir /s /q %INSTALLDIR%

endlocal

Wie geht es weiter?

Erste Schritte in FHEM