Da ich das für mein privates Wiki geschrieben habe, kann ich es ja auch mal hier einstellen, vielleicht hilft es einigen, damit sie nicht genauso das Internet durchwühlen müssen, bis es endlich läuft 
Danke an henfri, denn seine Vorlage hat mir als Gedankenstütze geholfen und ich habe ja auch 1-2 Programmzeilen übernommen. Danke dafür.
Wenn jemand Verbesserungsvorschläge hat, nur her damit. Was mir noch nicht gefällt: "privileged: true" und, dass der Container nur mit einem Trick weiterläuft und sich nicht beendet. Das mit "privileged: true" habe ich noch nicht ganz verstanden, denn ich nutze einen USB<>RS-485-Adapter und leite den ähnlich an den Container weiter und der braucht dieses Recht nicht.
Über Feedback würde ich mich freuen.
Anschließend kann das natürlich mit dem LBS19000193 in Edomi verwendet werden.
So nun mal ein Auszug aus meinem Wiki. Ich hoffen, man kann es lesen, ich musste es ein wenig umformatieren.
Viel Spaß damit
Nils
-------------------------- Update --------------------------
Ich habe zwei weitere Versionen. Die erste läuft weiterhin, aber eigentlich braucht man das Repository von Elabnet nicht beim Docker. udev läuft im Docker nicht und die Repository fügt udev-Regeln hinzu.
Nun habe ich zwei weitere Versionen erstellt, welche beide (zusätzlich) in der Zip-Datei sind.
Vorteil bei den beiden (V2 & V3):
Mal schauen, wie sich das schlägt. Ich nutze nun erst einmal die Version ohne owhttpd-Start. So brauche ich die owfs.conf nicht, da die Paramter mit der command-Zeile in der YAML übergeben werden.
Die Version mit owhttpd wollte das nicht, da konnte ich owhttpd dann gar nicht starten, also musste der Aufruf mit in die start.sh
Schreibt einfach mal, ob es funktioniert (falls jemand das nutzt).
Die Anleitung hat weiterhin Berechtigung. Auch wenn es für die neueren Versionen nicht mehr so passt, gibt es einem ein wenig Verständnis für die Arbeitsweise und zeigt die Befehle, um die Hardwareadresse rauszubekommen und den Container zu erstellen und so. Ist also noch recht nützlich.
--------------------------------------------------------------------
1-Wire - Docker mit Wiregate Busmaster Professional
Mit diesem Docker ist es möglich, den Wiregate Busmaster Professional mit einem Docker zu nutzen und die Werte in Edomi zu verarbeiten. Somit ist dies als Backup/Ersatz für mein Wiregate Classic möglich.
Vorraussetzungen
* Laufende Docker-Engine auf einem Linux-System
* Wiregate Busmaster Professional
* Sensoren
Vorbereitung
Zuerst wird der Busmaster per USB verbunden. Dieser muss mit Spannung versorgt sein und Sensoren am besten bereits angeschlossen.
Im Host-System wird mit dem folgenden Befehl die Addressierung des Busmaster herausgefunden, welche im Anschluss benötigt wird:
In meinem Fall ist dieser an "ttyUSB1". Der "ttyUSB0" wird bei mir bereits von einem USB<>RS-485-Konverter genutzt.
Adressierung merken, diese muss an mehreren Stellen angepasst werden.
Daten anpassen (beim Update s.o., wenn eine andere Version genutzt wird)
Die folgende Struktur liegt vor (Zip-Datei).
/config/etc/owfs.conf
Die "owfs.conf" wird bearbeitet und zum Schluss ersetzt. Somit kann vor Start eine Änderung erfolgen.
In dieser Datei habe ich die die Fake-Sensoren ausgeblendet, dem Busmaster die Adressierung verpasst, und einen Zugriff von einem anderen Gerät erlaubt.
**Inhalt der owfs.conf**
Fake Sensoren
Zu Beginn sind Fakesensoren drin, wie man in owhttpd sehen kann.
Diese Zeile ist mit # auskommentiert zu
Wiregate Busmaster Professional einbinden
Das sind die zwei zusätzlichen Zeilen:
Hiermit wird der Kommentar hinzugefügt, dass es sich um ein "Wiregate Busmaster Professional" handelt. Beim server muss hier die zuvor ausgelesene Adresse angegeben werden.
Zugriff eines anderen Rechners zulassen
Unter OWSERVER steht nur der
Ist nur diese angegeben, muss sich das auslesende Programm auf dem gleichen Server (gleiche IP) liegen. Bei Edomi müsste also alles auf CentOS installiert sein und nicht als Docker. Oder Edomi und OWFS laufen beide als Docker mit der IP des Hosts. Bei mir haben allerdings beide eine eigene IP. Daher muss der Zugriff von "ausserhalb" zugelassen werden und die unterste Zeile wird eingefügt:
Gibt man dies nicht an und probiert eine telnet-Verbindung, wird diese zurückgewiesen (connection refused).
Die 192.168.20.97 ist die IP, die der Container später hat. In meinem Fall gebe ich sie in der docker-compose.yml an.
dockerfile
In diesem wird das Image vorbereitet.
Genutzt wird Ubuntu 18.04 (die gleicher Version, wie auf meinem Host). Die Version von henfri ging nicht, da die Repository von Elabnet für den Busmaster Professional eine neuere Version von owfs/owserver benötigte, als sich auf dem verwendeten Ubuntu 14.04 installieren lies.
|wget | für das Runterladen von elabnet|
|gnupg gnupg2 gnupg1| für apt-key add|
|nano |zum späteren bearbeiten in der Shell|
|less | zum Anzeigen von Dateien o.ä.|
|mkdir -p /opt/startscript| hier liegt mein Startscript|
Ports
|2121|httpd|
|4304|owserver|
Nutzt man später die docker-compose.yml brauchen die Ports hier eigentlich nicht angegeben werden, da man sie dort behandelt. Nutzt man hingegen nicht die docker-compose.yml, muss man das startscript mit CMD oder ENTRYPOINT in das dockerfile eingefügt und gestartet werden, da im Container keine Dienste automatisch beim Start ausgeführt werden.
Zum Schluss wird die zuvor bearbeitete owfs.conf und das Startscript kopiert und die Rechte angepasst.
docker-compose.yml
Mit der docker-compose.yml kann der container erstellt werden. Dabei wird mit Hilfe des dockerfiles ein build erstellt und anschließend aus dem Image ein Container.
Inhalt:
build
Die dockerfile muss im gleichen Ordner, wie die docker-compose.yml sein, dafür steht der Punkt
device
Hier wird das Gerät /dev/ttyUSB1 an den Container übergeben
command
Ein paar Kommando zum Ausführen von owserver. Diese Zeile habe ich von henfri übernommen. Danke dafür.
Die Adresse ist in der Zeile anzupassen, an die des Busmasters. Hier: "/dev/ttyUSB1"
network
Ich möchte in meinem Netzwerk "192.168.20.0" eine eigene IP haben. Dafür habe ich zuvor auf dem Host ein Netzwerk mit macvlan angefügt (macvlan20).
network ist unter services und im root zu löschen, wenn man es nicht nutzen möchte und auf der gleichen IP arbeiten möchte, wie der Host.
Ansonsten ist das Netzwerk auf dem Host zu erstellen (abgeändert):
Hier wird mit macvlan im Subnetz "192.168.20.0/24" und mit dem Gateway "192.168.20.1" an der Schnittstelle "eno1" ein Netzwerk erstellt: "macvlan20". Kann man auch umbenennen und anpassen. So kann der Container an dieser Schnittstelle eine IP-Adresse bekommen und man braucht keine Ports freigeben.
Welche Schnittstelle das ist, erfährt man am Host mit:
== Im Service ==
Hier ist der Name des erstellten Netzwerkes anzugeben und die gewünschte IP-Adresse
== Im Root ==
Hier ist das erstellte Netzwerk allgemein zu wählen, damit es genutzt werden kann.
ports
Die Ports 2121 (httpd) und 4304 (owserver) müssen hier freigegeben werden, wenn man keine eigene IP nutzt. Rechts bleibt der Port, links der gewünschte, unter dem er auf dem Host veröffentlicht wird.
restart
Der Container wird immer neu gestartet, es sei denn, man stoppt ihn.
privileged
Ohne geht es leider nicht, sonst startet der Container nicht, wegen folgender Fehlermeldung:
entrypoint
Wird jedesmal beim starten des Containers aufgerufen.
Im Entrypoint wird das Script "./opt/startscript/start.sh" ausgeführt.
start.sh
In dieser werden owserver und owhttpd als Service gestartet, da dies beim Container-Start sonst nicht automatisch passiert.
Inhalt
Hier musste ich ein wenig mogeln. Die Services werden gestartet und abgefragt. Anschließend beendet sich der Container wieder, da er keine Aufgabe hat. Komisch, da ich dachte, der Server würde ihn am laufen halten. Also wird einfach eine Datei angezeigt "tail -F /etc/owfs.conf", worurch er such nicht beendet. Das kann natürlich auch eine andere Datei sein.
Starten/Stoppen etc.
Nachdem die Dateien entsprechend angepasst werden, kopiert man den Ordner auf den Host und navigiert in diesen, so dass man im Verzeichnis ist, wo sich die docker-compose.yml befindet.
Nur hier kann man die folgenden Befehle ausführen:
Container erstellen und starten:
Container erstellen und im Hintergrund starten:
Nun kann man ihn stoppen:
Container erstellen und starten:
und anschließend wieder starten:
Container erstellen und starten:
Oder man stoppt und löscht ihn mit
Container erstellen und starten:
Wenn er läuft, kommt man dann mit dem folgenden Befehl ins Bash:
Container erstellen und starten:
Der Aufruf des owhttpd ist nun im Browser möglich mit
Container erstellen und starten:
Darin kann man anschließend alle Sensoren sehen und mit dem LBS 19000193 in Edomi einbinden.
Sensoren
VOC-Sensoren
Diese stellen eine Besonderheit dar. Man muss aus dem VAD-Wert den ppm-Wert errechnen:

Danke an henfri, denn seine Vorlage hat mir als Gedankenstütze geholfen und ich habe ja auch 1-2 Programmzeilen übernommen. Danke dafür.
Wenn jemand Verbesserungsvorschläge hat, nur her damit. Was mir noch nicht gefällt: "privileged: true" und, dass der Container nur mit einem Trick weiterläuft und sich nicht beendet. Das mit "privileged: true" habe ich noch nicht ganz verstanden, denn ich nutze einen USB<>RS-485-Adapter und leite den ähnlich an den Container weiter und der braucht dieses Recht nicht.
Über Feedback würde ich mich freuen.
Anschließend kann das natürlich mit dem LBS19000193 in Edomi verwendet werden.
So nun mal ein Auszug aus meinem Wiki. Ich hoffen, man kann es lesen, ich musste es ein wenig umformatieren.
Viel Spaß damit
Nils
-------------------------- Update --------------------------
Ich habe zwei weitere Versionen. Die erste läuft weiterhin, aber eigentlich braucht man das Repository von Elabnet nicht beim Docker. udev läuft im Docker nicht und die Repository fügt udev-Regeln hinzu.
Nun habe ich zwei weitere Versionen erstellt, welche beide (zusätzlich) in der Zip-Datei sind.
- Die eine startet owhttpd nicht. Man kommt also allein mit der docker-compose.yml und dem dockerfile aus
- Anpassungen der Hardwareadresse sind in der "command"-Zeile der docker-compose.yml auszuführen, mehr nicht. Abgesehen von eventuellen Netzwerkanpassungen
- Man kann owhttpd starten, indem man in die bash geht (docker-compose exec owfs bash) und dort "service owhttpd start" eingibt und mit "exit" die bash wieder verlässt.
- Die zweite startet owhttpd, aber nicht zuverlässig. Mal funktioniert es, mal nicht.
- Anpassungen der Hardwareadresse sind in der "/init/start.sh" vorzunehmen
Vorteil bei den beiden (V2 & V3):
- Sie laufen ohne privileged
- Sind einfacher zu konfigurieren. Auch wenn die andere Version schlimmer aussah, als sie war, da man auch nur ein paar Änderungen vornehmen musste.
- Der Container läuft weiter, auch ohne dass man als Trick eine Datei anschauen lässt
Mal schauen, wie sich das schlägt. Ich nutze nun erst einmal die Version ohne owhttpd-Start. So brauche ich die owfs.conf nicht, da die Paramter mit der command-Zeile in der YAML übergeben werden.
Die Version mit owhttpd wollte das nicht, da konnte ich owhttpd dann gar nicht starten, also musste der Aufruf mit in die start.sh
Schreibt einfach mal, ob es funktioniert (falls jemand das nutzt).
Die Anleitung hat weiterhin Berechtigung. Auch wenn es für die neueren Versionen nicht mehr so passt, gibt es einem ein wenig Verständnis für die Arbeitsweise und zeigt die Befehle, um die Hardwareadresse rauszubekommen und den Container zu erstellen und so. Ist also noch recht nützlich.
--------------------------------------------------------------------
1-Wire - Docker mit Wiregate Busmaster Professional
Mit diesem Docker ist es möglich, den Wiregate Busmaster Professional mit einem Docker zu nutzen und die Werte in Edomi zu verarbeiten. Somit ist dies als Backup/Ersatz für mein Wiregate Classic möglich.
Vorraussetzungen
* Laufende Docker-Engine auf einem Linux-System
* Wiregate Busmaster Professional
* Sensoren
Vorbereitung
Zuerst wird der Busmaster per USB verbunden. Dieser muss mit Spannung versorgt sein und Sensoren am besten bereits angeschlossen.
Im Host-System wird mit dem folgenden Befehl die Addressierung des Busmaster herausgefunden, welche im Anschluss benötigt wird:
Code:
dmesg | grep tty
Adressierung merken, diese muss an mehreren Stellen angepasst werden.
Daten anpassen (beim Update s.o., wenn eine andere Version genutzt wird)
Die folgende Struktur liegt vor (Zip-Datei).
Code:
. ├── config │ └── etc │ └── owfs.conf ├── docker-compose.yml ├── Dockerfile └── init └── start.sh
Die "owfs.conf" wird bearbeitet und zum Schluss ersetzt. Somit kann vor Start eine Änderung erfolgen.
In dieser Datei habe ich die die Fake-Sensoren ausgeblendet, dem Busmaster die Adressierung verpasst, und einen Zugriff von einem anderen Gerät erlaubt.
**Inhalt der owfs.conf**
Code:
# Sample configuration file for the OWFS suite for Debian GNU/Linux. # # # This is the main OWFS configuration file. You should read the # owfs.conf(5) manual page in order to understand the options listed # here. ######################## SOURCES ######################## # # With this setup, any client (but owserver) uses owserver on the # local machine... ! server: server = localhost:4304 # # ...and owserver uses the real hardware, by default fake devices # This part must be changed on real installation #server: FAKE = DS18S20,DS2405 # # USB device: DS9490 #server: usb = all # # Serial port: DS9097 #server: device = /dev/ttyS1 # # owserver tcp address #server: server = 192.168.10.1:3131 # # random simulated device #server: FAKE = DS18S20,DS2405 # # Wiregate Busmaster Professional server: pbm /dev/ttyUSB1 # ######################### OWFS ########################## # #mountpoint = /mnt/1wire #allow_other # ####################### OWHTTPD ######################### http: port = 2121 ####################### OWFTPD ########################## ftp: port = 2120 ####################### OWSERVER ######################## server: port = localhost:4304 server: port = 192.168.20.97:4304
Fake Sensoren
Zu Beginn sind Fakesensoren drin, wie man in owhttpd sehen kann.
Diese Zeile ist mit # auskommentiert zu
Code:
#server: FAKE = DS18S20,DS2405
Das sind die zwei zusätzlichen Zeilen:
Code:
# Wiregate Busmaster Professional server: pbm /dev/ttyUSB1
Zugriff eines anderen Rechners zulassen
Unter OWSERVER steht nur der
Code:
server: port = localhost:4304
Code:
server: port = 192.168.20.97:4304
Code:
telnet IP PORT
dockerfile
In diesem wird das Image vorbereitet.
Code:
FROM ubuntu:18.04 RUN apt-get update && \ apt-get -y install wget gnupg gnupg2 gnupg1 && \ echo "deb http://repo.wiregate.de/wiregate elabnet main" >> /etc/apt/sources.list.d/elabnet.list && \ wget http://repo.wiregate.de/wiregate/wiregate-apt-pubkey && \ apt-key add wiregate-apt-pubkey && \ rm wiregate-apt-pubkey && \ apt-get update && \ apt-get -y upgrade && \ apt-get -y install owserver \ owfs \ ow-shell \ owhttpd \ elabnet-pbm \ nano \ less && \ mkdir -p /opt/startscript EXPOSE 4304 2121 COPY /init/start.sh /opt/startscript/start.sh COPY /config/etc/owfs.conf /etc/owfs.conf RUN chmod +x /opt/startscript/start.sh && \ chmod +x /etc/owfs.conf #WORKDIR /opt/startscript #CMD ["/bin/bash", "start.sh"]
|wget | für das Runterladen von elabnet|
|gnupg gnupg2 gnupg1| für apt-key add|
|nano |zum späteren bearbeiten in der Shell|
|less | zum Anzeigen von Dateien o.ä.|
|mkdir -p /opt/startscript| hier liegt mein Startscript|
Ports
|2121|httpd|
|4304|owserver|
Nutzt man später die docker-compose.yml brauchen die Ports hier eigentlich nicht angegeben werden, da man sie dort behandelt. Nutzt man hingegen nicht die docker-compose.yml, muss man das startscript mit CMD oder ENTRYPOINT in das dockerfile eingefügt und gestartet werden, da im Container keine Dienste automatisch beim Start ausgeführt werden.
Zum Schluss wird die zuvor bearbeitete owfs.conf und das Startscript kopiert und die Rechte angepasst.
docker-compose.yml
Mit der docker-compose.yml kann der container erstellt werden. Dabei wird mit Hilfe des dockerfiles ein build erstellt und anschließend aus dem Image ein Container.
Inhalt:
Code:
version: '2' services: owfs: build: . container_name: 1wire_test devices: - /dev/PBM:/dev/PBM - /dev/ttyUSB1:/dev/ttyUSB1:rwm command: /bin/sh -c "/usr/sbin/owserver -p 0.0.0.0:4304 --pbm=/dev/ttyUSB1 & while true; do sleep 120; done" networks: macvlan20: ipv4_address: 192.168.20.97 ports: - "4304:4304" - "2121:2121" restart: unless-stopped privileged: true entrypoint: ./opt/startscript/start.sh networks: macvlan20: external: name: macvlan20
Die dockerfile muss im gleichen Ordner, wie die docker-compose.yml sein, dafür steht der Punkt
device
Hier wird das Gerät /dev/ttyUSB1 an den Container übergeben
command
Ein paar Kommando zum Ausführen von owserver. Diese Zeile habe ich von henfri übernommen. Danke dafür.
Die Adresse ist in der Zeile anzupassen, an die des Busmasters. Hier: "/dev/ttyUSB1"
network
Ich möchte in meinem Netzwerk "192.168.20.0" eine eigene IP haben. Dafür habe ich zuvor auf dem Host ein Netzwerk mit macvlan angefügt (macvlan20).
network ist unter services und im root zu löschen, wenn man es nicht nutzen möchte und auf der gleichen IP arbeiten möchte, wie der Host.
Ansonsten ist das Netzwerk auf dem Host zu erstellen (abgeändert):
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
Welche Schnittstelle das ist, erfährt man am Host mit:
Code:
ifconfig
Hier ist der Name des erstellten Netzwerkes anzugeben und die gewünschte IP-Adresse
== Im Root ==
Hier ist das erstellte Netzwerk allgemein zu wählen, damit es genutzt werden kann.
ports
Die Ports 2121 (httpd) und 4304 (owserver) müssen hier freigegeben werden, wenn man keine eigene IP nutzt. Rechts bleibt der Port, links der gewünschte, unter dem er auf dem Host veröffentlicht wird.
restart
Der Container wird immer neu gestartet, es sei denn, man stoppt ihn.
privileged
Ohne geht es leider nicht, sonst startet der Container nicht, wegen folgender Fehlermeldung:
Code:
Creating 1wire ... error ERROR: for 1wire Cannot start service owfs: b'linux runtime spec devices: error gathering device information while adding custom device "/dev/PBM": no such file or directory' ERROR: for owfs Cannot start service owfs: b'linux runtime spec devices: error gathering device information while adding custom device "/dev/PBM": no such file or directory' ERROR: Encountered errors while bringing up the project.
Wird jedesmal beim starten des Containers aufgerufen.
Im Entrypoint wird das Script "./opt/startscript/start.sh" ausgeführt.
start.sh
In dieser werden owserver und owhttpd als Service gestartet, da dies beim Container-Start sonst nicht automatisch passiert.
Inhalt
Code:
#!/bin/sh #chmod 777 /dev/ttyUSB1 service owserver start service owserver status service owhttpd start service owhttpd status tail -F /etc/owfs.conf
Starten/Stoppen etc.
Nachdem die Dateien entsprechend angepasst werden, kopiert man den Ordner auf den Host und navigiert in diesen, so dass man im Verzeichnis ist, wo sich die docker-compose.yml befindet.
Nur hier kann man die folgenden Befehle ausführen:
Container erstellen und starten:
Code:
docker-compose up
Code:
docker-compose down
Container erstellen und starten:
Code:
docker-compose stop
Container erstellen und starten:
Code:
docker-compose start
Container erstellen und starten:
Code:
docker-compose down
Container erstellen und starten:
Code:
docker-compose exec owfs bash
Container erstellen und starten:
Code:
IP:2121
Sensoren
VOC-Sensoren
Diese stellen eine Besonderheit dar. Man muss aus dem VAD-Wert den ppm-Wert errechnen:
Code:
(VAD * 310) 450 = ppm-Wert
Kommentar