Automatische Rolladensteuerung mit Java und Loxone

Rolladensteuern mit Loxone und Java.

Motivation

Loxone ist ein bekannter Anbieter für Smarthome Rolläden. Während sich über die mitgelieferte Oberfläche allerlei Funktionen konfigurieren lassen, ist es nur mit Zusatzkosten möglich, die Wetterdaten miteinzubeziehen. Diese Wetterdaten werden allerdings benötigt, um die Rolladen gemäß der aktuellen Sonneneinstrahlung, Wärme und Weiteres automatisch zu steuern. Im Netz sind die Wetterdaten allerdings öffentlich und kostenlos verfügbar. Glücklicherweise liefert Loxone eine Auswahl an Schnittstellen – unter anderem Http- mit. Und genau mit dieser Http-Schnittstelle lassen sich Rolläden, Steckdosen und Sensoren ansteuern. Dieser Blogeintrag zeigt wie das geht.

Benötigte Komponenten

  1. Installierte Loxone Komponenten wie z.b. Rolläden
  2. Loxon Adminbenutzerdaten
  3. Java 8

einbinden

Die Hauptkommunikation findet über die org.Apache.Http Bibliothek statt. Über Maven lassen sich bequem die benötigten Komponenten hierzu einbinden.

<dependency>
 <groupId>javax.websocket</groupId>
 <artifactId>javax.websocket-api</artifactId>
 <version>1.0</version>
</dependency>
<dependency>
 <groupId>com.google.code.gson</groupId>
 <artifactId>gson</artifactId>
 <version>2.8.6</version>
</dependency>
<dependency>
 <groupId>org.json</groupId>
 <artifactId>json</artifactId>
 <version>20200518</version>
</dependency>
<dependency>
 <groupId>javax.json</groupId>
 <artifactId>javax.json-api</artifactId>
 <version>1.1.4</version>
</dependency>
<dependency>
 <groupId>org.glassfish</groupId>
 <artifactId>javax.json</artifactId>
 <version>1.1</version>
</dependency>
<dependency>
 <groupId>org.apache.httpcomponents</groupId>
 <artifactId>httpcore</artifactId>
 <version>4.4.8</version>
</dependency>
<dependency>
 <groupId>org.apache.httpcomponents</groupId>
 <artifactId>httpclient</artifactId>
 <version>4.5.13</version>
</dependency>
<dependency>
 <groupId>commons-io</groupId>
 <artifactId>commons-io</artifactId>
 <version>2.8.0</version>
</dependency>

Loxone Befehlssyntax

Zum Aufbau der Kommunikation werden sowohl Benutzername, Passwort als auch die IP des Miniservers benötigt. Diese Daten werden dann zusammengefügt und ergeben die Basis. Anschließend folgt der gewünschte Loxone Befehl.

Beispiel:

"http://" + user + ":" + password + "@" + server+"/" + Befehl
http://user:Test123@192.168.170.99/dev/sps/io/Steckdose1/Ein

In diesem Beispiel wird die Steckdose mit dem Namen "Steckdose1" eingeschaltet.

Aufbau der Kommunikation zum Miniserver

Zunächst wird ein HttpClient Objekt geschaffen und daran die Url übergeben. Über einen Postrequest erfolgt eine Übertragung.

Da sich in dieser Url sowohl Benutzerdaten als auch gewünschter Befehl befinden, erfolgt direkt auch der Versand an den Loxone Miniserver. Dieser liefert uns auch direkt eine Anwort in Form eines JsonObjects.

private JsonObject setState(URL url) throws IOException, ProtocolException, LoxoneException, URISyntaxException {
    final HttpClient client = HttpClients.createDefault();
    final URIBuilder builder = new URIBuilder(url.toString());
    final String listStubsUri = builder.build().toString();
    HttpPost setStubMethod = new HttpPost(listStubsUri);
    HttpResponse stubResponse = client.execute(setStubMethod);
    return executeCommand(stubResponse);
}
private JsonObject executeCommand(HttpResponse stubResponse) throws LoxoneException, IOException {
    int getStubStatusCode = stubResponse.getStatusLine().getStatusCode();
    handleStatusException(getStubStatusCode);
    HttpEntity entity = stubResponse.getEntity();
    String responseBody = EntityUtils.toString(entity);
    JsonReader jsonReader = Json.createReader(new StringReader(responseBody));
    return jsonReader.readObject();
}

Antwort des Loxonservers

<LL control="dev/sps/io/Steckdose1/" value="1" Code="200"/>

Rolladensteuerung

Um nunmehr den Rolladen anzusteuern gibt es unterschiedliche Befehle. Eine kurze Aufstellung ohne jeglichen Anspruch auf Vollständigkeit:

//Liefert eine Liste mit allen verfügbaren Geräten
http://Benutzer:Kennwort@IP/dev/sps/enumin
//Liefert den aktuellen Status eines Gerätes
http://Benutzer:Kennwort@IP/data/status
//Den Rolladen komplett schließen
http://Benutzer:Kennwort@IP/jdev/sps/io/RolladenName/FullDown
//Den Rolladen komplett öffnen
http://Benutzer:Kennwort@IP/jdev/sps/io/RolladenName/FullUp
//Den Rolladen zu x% schließen/öffnen
http://Benutzer:Kennwort@IP/jdev/sps/io/RolladenName/ManualPosition/x

Fazit

Die API von Loxone ist sehr übersichtlich und leicht zu bedienen. In der Dokumentation gibt es auch einige Hinweise über weitere Einsatzgebiete. Mit den Befehlen und Beispielen in diesem Blogpost lässt sich eine eigene Rolladensteuerung bauen, die individuelle Wünsche berücksichtigt. Für meine Rolladensteuerung habe ich die Berechnung der Sonnenposition, Lichtstärke, Wetterbedingungen und natürlich Sonnenaufgang, sowie Sonnenuntergang berücksichtigt.Außerdem kann über dieses Vorgehen auch selbstverständlich ein Sprachassistent angebunden werden. Die Möglichkeiten sind also längst nicht ausgeschöpft.

Interne Schulungen in Cucumber & Selenium


In geschützter Umgebung lernt und festigt Ihr Team individuelles Wissen für Ihre aktuellen Anforderungen. Damit Ihr Projekt erfolgreich und wie geplant abgeschlossen wird.

Das könnte Sie auch interessieren

Testautomatisierung mit Selenium Schulung

Testautomatisierung mit Selenium Schulung Schulungsbeschreibung Die Selenium Schulung vermittelt Basiswissen und die wichtigsten Aspekte zur Testautomatisierung. Nach...

Devops mit Cucumber, Jira und Xray

Devops mit Cucumber, Jira und Xray "Hat auf meiner Maschine funktioniert, ist jetzt Operating Problem“ Diese oder vergleichbare Aussagen sind nicht neu und...

ReSpeaker 4 LEDs mit Pi4J steuern

ReSpeaker 4 LEDs mit Pi4J steuern Motivation Für ReSpeaker im allgemeinen gibt es bereits zahlreiche Bibliotheken, auch einige die LEDs über die GPIO Pins ansteuern....

Licht steuern mit Java und Philips Hue

Licht steuern mit Java und Philips Hue Motivation Für meinen selbstprogrammierten Sprachassistenten wollte ich ein Modul für die Lichtsteuerung entwickeln. Ziel war es,...

Erinnerungsassistent für Medikamente mit Sprachausgabe

Erinnerungsassistent für Medikamenteinnahme mit Sprachausgabe Motivation Bevor Corona began, besuchten Ich und meine Familie meine Großeltern regelmäßig. Dabei...

Akzeptanztests mit Gauge und Java

Akzeptanztests mit Gauge und Java 1. Einführung In diesem Blogeintrag werde ich zunächst auf Gauge eingehen, die Installation vorstellen und anschließend ein Beispiel...

Sealed Classes mit Java JDK 17

Sealed Classes mit Java JDK 17 Was sind Sealed Classes? Mit dem kommenden Java Release 17 werden sogenannte Sealed Classes eingeführt. Diese waren zuvor bereits seit...

Fünf Tipps für besseren Testcode

Fünf Tipps für besseren Testcode Good Practices In diesem Blogpost zeige ich fünf Good Practices auf, um den eigenen Testcode zu verbessern. Aber wieso nur "Good...

API Testing mit Java und WireMock

API Testing mit Java und WireMock Motivation Ein bekanntes Problem: Öffentliche APIs werden abgefragt und liefern Daten in Form von JSON oder anderen Formaten zurück....