Da nun gerne Docker verwendet werden und ich seit Jahren die Applikation von tuxedo nutze, habe ich ein das einmal in einen Docker gegossen. War ein wenig aufwändig, aber nun funktioniert es endlich.
Danke also an tuxedo
Link zum Originalthread ist angehängt. Im Post #23 hatte ich einmal eine Anleitung gepostet, wie man das auf dem Raspberry Pi zum laufen bekommt.
Und auch von mir, danke an die Entwickler des SmartHome.py Helios Scripts, welches tuxedo als Vorlage diente und an die Calimero-Entwickler.
Also, was braucht man:
Beginnen wir vorne:
1. Installation von Docker unter Linux
Originalseite: https://docs.docker.com/install/linu...the-repository
2. Installation von Docker-compose
Dies wird benötigt, da ich eine docker-compose.yml erstellt habe, welche ausgeführt wird.
Originalseite: https://docs.docker.com/compose/install/
3. Daten anpassen:
Die folgenden Daten sind im Anhang:
HeliosKwlRemote/config.properties:
- Host-IP einstellen
- Port von ser2net einstellen
- knx_pa.softwaredevice eine Hardwareadresse geben. Diese kann man dann in ETS mit einem Dummy belegen, damit der Linienkoppler Bescheid weiß
- KNX-Adressen anpassen
- Ggf. Standardeinstellungen anpassen, wenn gewünscht
ser2net/ser2net.conf:
Im Linux-Host, wo der RS485-Adaper angeschlossen ist, folgendes ausführen:
und nachschauen, welche Adresse der Adapter hat. In meinem Fall ist es ttyUSB0.
Also in der letzten Zeile anpassen auf:
Somit wird Port 4000 genutzt. Das muss der gleiche sein, wie oben in der config.properties angegeben. Sollte es nicht ttyUSB0 sein, ggf. anpassen. Später muss der in der docker-compose.yml noch einmal angegeben werden!
docker-compose.yml:
Die Adresse anpassen:
In der docker-compose.yml ist ein Netzwerk angegeben. Das ist das Netzwerk, welches ich nutze. Ich habe es ausprobiert und wenn ich in einem anderen Subnetz bin, was vollständig geroutet wird, startet das Programm, aber es nimmt keine Änderungen entgegen.
Das muss also angepasst werden. Ich wollte eine extra IP, daher habe ich es so gemacht.
Netzwerk auf dem Hostsystem (Linux) erstellen:
Somit wird nun ein Netzwerk "macvlan20" erstellt, mit den angegebenen Daten. Parent ist bei mir eno 1. Mit "ifconfig" sieht man, wie der Schnittstelle bei einem heißt. Früher war es immer eth0.
Die folgenden Einträge sind dann dazu in der docker-compose.yml
:
Ich bleibe also in den eigentlichen Netzwerk (192.168.20.0/24) und weiße ihm statisch die Adresse 192.168.20.7 zu.
Beim Netzwerk muss man sonst ggf. einmal anpassen. Wenn man aber einfach die Werte entsprechend anpasst (Schnittstelle, subnet, gateway, parent) und dann auch noch der name (macvlan) überall gleich angepasst wird, bekommt man die zugewiesene Adresse (ipv4_address) und kann es schon nutzen.
4. Ausführen:
Hier gibt es verschiedene Arten, je nachdem, was man mag. Das dockerfile macht einen build mit dem offiziellen java-Image mit Java 8. Die compose übergibt den ttyUSB0 an den Container, stellt Netzwerkeinstellungen ein und startet ein script, welches bei jedem Start des Containers aufgerufen wird. Darin wird ser2net gestartet und die run.sh von tuxedo.
Alle Daten werden nun in ein beliebiges Verzeichnis auf dem Host kopiert und man navigiert in den Ordner, in welchem auch das dockerfile und die docker.compose.yml sind.
Einfachste Art des Aufrufs wäre dann ein:
Mit dem -d läuft es im Hintergrund. Nun wird mittels des dockerfiles das Image erstellt und ein Container gestartet.
Mit
stoppt man diesen und kann ihn mit
docker-compose start[/CODE]
starten.
Ich nutze meistens
Damit stoppt er und löscht auch den Container mit. Nur das Image bleibt.
Ändert man etwas im dockerfile muss man
ausführen, damit er einen neuen build macht.
Ich hoffe, es ist verständlich, was man machen muss.
Im Endeffekt läuft das Programm dann immer im Container und kommuniziert mit dem Bus. Nutzt man ohne Netzwekeinstellungen einfach den Host, muss man noch die ganzen Ports freigeben. Da ich aber eine statisch IP haben wollte und keine Ahnung habe, welche Ports das alles sind, ist das so am einfachsten.
Muss man etwas anpassen, stopp man alles, ändert die entsprechenden Dateien und macht ein
Denn nur so werden die geänderten Dateien in das Image kopiert und können genutzt werden.
Theoretisch braucht man nano und telnet auch nicht (dockerfile). Es war und ist aber zur Fehlersuche sehr nützlich. Daher auch der auskommentierte Eintrag in der startscript/start.sh.
Ich hoffe, es ist soweit verständlich.
Über Änderungen, oder Feedback, ob es läuft, freue ich mich natürlich.
Viel Spaß damit, vielleicht hilft es ja jemandem.
Viele Grüße
Nils
PS:tuxedo
Vielen Dank für das tolle Programm. Läuft seit >3 Jahren auf einem Raspberry Pi 1 und seit kurzem auf einem 3er...
Danke also an tuxedo
Link zum Originalthread ist angehängt. Im Post #23 hatte ich einmal eine Anleitung gepostet, wie man das auf dem Raspberry Pi zum laufen bekommt.
Und auch von mir, danke an die Entwickler des SmartHome.py Helios Scripts, welches tuxedo als Vorlage diente und an die Calimero-Entwickler.
Also, was braucht man:
- Eine Vallox/Helios KWL mit RS485 Schnittstelle
- Einen RS485 Adapter
- Einen Rechner mit Linux und installiertem Docker und Docker-Compose.
Beginnen wir vorne:
1. Installation von Docker unter Linux
Originalseite: https://docs.docker.com/install/linu...the-repository
2. Installation von Docker-compose
Dies wird benötigt, da ich eine docker-compose.yml erstellt habe, welche ausgeführt wird.
Originalseite: https://docs.docker.com/compose/install/
3. Daten anpassen:
Die folgenden Daten sind im Anhang:
Code:
├── docker-compose.yml ├── Dockerfile ├── HeliosKwlRemote │ ├── config.properties │ ├── etc │ │ └── init.d │ │ └── helioskwlremote │ ├── HeliosKwlRemote-1.0.0-SNAPSHOT-jar-with-dependencies.jar │ ├── LICENSE │ ├── log.properties │ ├── README.md │ ├── run.sh │ ├── startkwl.sh │ └── startscript │ └── start.sh └── ser2net └── ser2net.conf
- Host-IP einstellen
- Port von ser2net einstellen
- knx_pa.softwaredevice eine Hardwareadresse geben. Diese kann man dann in ETS mit einem Dummy belegen, damit der Linienkoppler Bescheid weiß
- KNX-Adressen anpassen
- Ggf. Standardeinstellungen anpassen, wenn gewünscht
ser2net/ser2net.conf:
Im Linux-Host, wo der RS485-Adaper angeschlossen ist, folgendes ausführen:
Code:
dmesg | grep tty
Also in der letzten Zeile anpassen auf:
Code:
4000:raw:0:/dev/ttyUSB0:9600 8DATABITS NONE 1STOPBIT
docker-compose.yml:
Die Adresse anpassen:
Code:
devices: - /dev/ttyUSB0:/dev/ttyUSB0:rwm
In der docker-compose.yml ist ein Netzwerk angegeben. Das ist das Netzwerk, welches ich nutze. Ich habe es ausprobiert und wenn ich in einem anderen Subnetz bin, was vollständig geroutet wird, startet das Programm, aber es nimmt keine Änderungen entgegen.
Das muss also angepasst werden. Ich wollte eine extra IP, daher habe ich es so gemacht.
Netzwerk auf dem Hostsystem (Linux) erstellen:
Code:
docker network create \ --driver=macvlan \ --subnet=192.168.20.0/24 \ --gateway 192.168.20.1 \ -o parent=eno1 \ -o macvlan_mode=bridge \ macvlan20
Die folgenden Einträge sind dann dazu in der docker-compose.yml
:
Code:
services: kwl: networks: macvlan20: ipv4_address: 192.168.20.7 networks: macvlan20: external: name: macvlan20
Beim Netzwerk muss man sonst ggf. einmal anpassen. Wenn man aber einfach die Werte entsprechend anpasst (Schnittstelle, subnet, gateway, parent) und dann auch noch der name (macvlan) überall gleich angepasst wird, bekommt man die zugewiesene Adresse (ipv4_address) und kann es schon nutzen.
4. Ausführen:
Hier gibt es verschiedene Arten, je nachdem, was man mag. Das dockerfile macht einen build mit dem offiziellen java-Image mit Java 8. Die compose übergibt den ttyUSB0 an den Container, stellt Netzwerkeinstellungen ein und startet ein script, welches bei jedem Start des Containers aufgerufen wird. Darin wird ser2net gestartet und die run.sh von tuxedo.
Alle Daten werden nun in ein beliebiges Verzeichnis auf dem Host kopiert und man navigiert in den Ordner, in welchem auch das dockerfile und die docker.compose.yml sind.
Einfachste Art des Aufrufs wäre dann ein:
Code:
docker-compose up -d
Mit
Code:
docker-compose stop
docker-compose start[/CODE]
starten.
Ich nutze meistens
Code:
docker-compose down
Ändert man etwas im dockerfile muss man
Code:
docker-compose up --build
Ich hoffe, es ist verständlich, was man machen muss.
Im Endeffekt läuft das Programm dann immer im Container und kommuniziert mit dem Bus. Nutzt man ohne Netzwekeinstellungen einfach den Host, muss man noch die ganzen Ports freigeben. Da ich aber eine statisch IP haben wollte und keine Ahnung habe, welche Ports das alles sind, ist das so am einfachsten.
Muss man etwas anpassen, stopp man alles, ändert die entsprechenden Dateien und macht ein
Code:
docker-compose up --build
Theoretisch braucht man nano und telnet auch nicht (dockerfile). Es war und ist aber zur Fehlersuche sehr nützlich. Daher auch der auskommentierte Eintrag in der startscript/start.sh.
Ich hoffe, es ist soweit verständlich.
Über Änderungen, oder Feedback, ob es läuft, freue ich mich natürlich.
Viel Spaß damit, vielleicht hilft es ja jemandem.
Viele Grüße
Nils
PS:tuxedo
Vielen Dank für das tolle Programm. Läuft seit >3 Jahren auf einem Raspberry Pi 1 und seit kurzem auf einem 3er...