Loxone via PowerShell steuern
Für die Externe Ansteuerung der Loxone über einen beliebigen Windows Server, habe ich mir eine PowerShell Klasse geschrieben. Hierrüber ist nun möglich, schnell und einfach Eingänge / Ausgänge abzufragen oder einen beliebigen Status zu setzen, sowie diverse System Kommandos an die Loxone zu schicken. Die PowerShell Klasse basiert auf einfachen REST Invokes.
Bei mir ist der aktuelle Haupteinsatz dieser Klasse zur besseren Integration meiner Wasserkühlung, damit ich schnell und einfache wichtige Werte in der Loxone anzeigen und überwachen kann. Im Notfall werden Push Nachrichten versendet oder im Worst Case der PC in den Hypernate versetzt. Letzteres basiert noch auf dem POSH Server worüber es möglich ist, von der Loxone PowerShell Befehle abzusetzen, dies ist aber ein anderes Thema
Source
Die Source für die Klasse kann direkt aus meinem GitHub herunter geladen werden (bitte immer Master Branch verwenden):
https://github.com/ThomasWilla/LoxoneHomeAutomation
Requirement:
PowerShell 5.x (Ist ab Windows 10 / Server 2016 inkludiert)
Kompatibilität:
PowerShell 6.x wird noch nicht unterstützt wird aber folgen und somit einen Support für Linux Systeme oder als Docker Container zu gewährleisten
Schritt-für-Schritt-Anleitung
Konfiguration anpassen, Server Adresse oder FQDN in der LxHomeAutomation.ps1 anpassen
[string]$server = "192.168."
PowerShell Datei einlesen
. ./LxHomeAutomation.ps1
PowerShell Objekt bilden
$LxHomeautomation = [LxHomeAutomation]::new("user","PW as plaintext")
Wurde das Objekt erstellt stehen nun folgende Proberties zur Verfügung (sollten die enumout und enumin nicht vorhanden sein, muss das Objekt nochmals erstellt werden. Hier liegt noch ein mögliches Zeit Problem vor)
Proberty | Werte |
---|---|
enumout | beinhaltet alle Ausgänge |
enumin | beinhaltet alle Eingänge |
ConStatus | Virbindungstatus |
cred | Das erstelle LX Credentinal |
server | Server Adresse |
Object | letztes übergebendes Object an eine Methode |
lastResult | Letzer REST Response als RAW |
Wurde das Objekt erstellt stehen nun folgende Methoden zur Verfügung
Methode | Aufruf | gütige Werte | Beschreibung |
---|---|---|---|
RESTRequestLANStatus | $LxHomeautomation.RESTRequestLANStatus("txp") | txp | Retrieve number of LAN packets sent |
RESTRequestSysStatus | $LxHomeautomation.RESTRequestSysStatus("cpu") | cpu | Retrieve CPU load |
RESTRequestSps | $LxHomeautomation.RESTRequestSps("status") | status | aktuelle SPS Frequenz abfragen |
RESTControllIO | $LxHomeautomation.RESTControllIO() | "on"/"off"/"impuls"/"state","IO" | Hier müssen zwei Parameter angegeben werden,
|
Beispiel Skript
Hier Teste ich einen PC ob dieser läuft, wenn ja wird einmalig ein Virtueller Eingang gesetzt. Ändert sich der Zustand des Computers wird dieser zurück gesetzt.
Warum ich das nicht mit dem Ping Module mache? Möchte schnell merken, dass der PC Offline ist und hierdurch nicht unnötig die Loxone mit zusätzlichen Pings belästigen
Die Klasse ist ein Schnellwurf und daher würde ich sagen früher Beta Status, werde hier aber noch mehr Quallität reinbringen wenn es die Zeit zulässt