Ankündigung

Einklappen
Keine Ankündigung bisher.

1Wire - Docker (OWFS) zum Betrieb an Wiregate Busmaster Professional

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    1Wire - Docker (OWFS) zum Betrieb an Wiregate Busmaster Professional

    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.
    • 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
    Ich würde momentan eher die Variante ohne Start des owhttpd nehmen. Man braucht das ja eigentlich nur beim Einrichten und dann kann man es auch kurz selber starten. Allgemein beendet sich aber auch dann owhttpd ab und an einfach so mal. Wieso weiß ich noch nicht, aber so lange der owserver stabil läuft, ist das in meinen Augen auch nur bei der Einrichtung relevant.

    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
    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).
    Code:
    .
    ├── config
    │   └── etc
    │       └── owfs.conf
    ├── docker-compose.yml
    ├── Dockerfile
    └── init
        └── start.sh
    /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**
    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
    Wiregate Busmaster Professional einbinden
    Das sind die zwei zusätzlichen Zeilen:
    Code:
    # Wiregate Busmaster Professional
    server: pbm /dev/ttyUSB1
    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
    Code:
    server: port = localhost:4304
    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:
    Code:
    server: port = 192.168.20.97:4304
    Gibt man dies nicht an und probiert eine telnet-Verbindung, wird diese zurückgewiesen (connection refused).
    Code:
    telnet IP PORT
    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.

    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"]
    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:
    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
    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):
    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
    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:
    Code:
    ifconfig
    == 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:
    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.
    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
    Code:
    #!/bin/sh
    #chmod 777 /dev/ttyUSB1
    service owserver start
    service owserver status
    service owhttpd start
    service owhttpd status
    tail -F /etc/owfs.conf
    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:
    Code:
    docker-compose up
    Container erstellen und im Hintergrund starten:
    Code:
    docker-compose down
    Nun kann man ihn stoppen:
    Container erstellen und starten:
    Code:
    docker-compose stop
    und anschließend wieder starten:
    Container erstellen und starten:
    Code:
    docker-compose start
    Oder man stoppt und löscht ihn mit
    Container erstellen und starten:
    Code:
    docker-compose down
    Wenn er läuft, kommt man dann mit dem folgenden Befehl ins Bash:
    Container erstellen und starten:
    Code:
    docker-compose exec owfs bash
    Der Aufruf des owhttpd ist nun im Browser möglich mit
    Container erstellen und starten:
    Code:
    IP:2121
    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:
    Code:
    (VAD * 310) 450 = ppm-Wert
    Angehängte Dateien
    Zuletzt geändert von Marino; 14.01.2019, 10:28.

    #2
    Danke. Werd ich gleich Mal versuchen.Wieviele Sensoren hast du im Netz? Merkst du eine Beeinträchtigung der Performance? Deshalb musste mein pbm auf einen eigenen rpi, werde das Docker aber sehr gespannt testen.

    Kommentar


      #3
      Ich habe es erst seit heute laufen.

      4 VOC
      6-8 Estrichsensoren
      6-8 Multisensoren mit Feuchtigkeit und Temperatur
      + ein paar IO's
      + bald 4-8 iButton

      so grob durchgezählt.

      Ich bekomme gerade irgendwie keinen Wert von den VOC-Sensoren, daher frage ich mal jonofe, ob sein Baustein das evtl. gar nicht kann. Im owhttpd sind alle drin und ich sehe den Wert. Ist also eigentlich nur eine Anbindungssache an Edomi.

      Kommentar


        #4
        Hallo,

        vielen Dank für die Dokumentation. Aber es wirkt sehr kompliziert.
        Eigentlich reicht eine Docker-compose.yml mit diesem inhalt:
        Code:
            owfs:
            #  build: ./owfs/.
              image: henfri/owfs
              devices:
              - /dev/PBM:/dev/PBM
              - /dev/ttyUSB0:/dev/ttyUSB0
              command: /usr/sbin/owserver -p 0.0.0.0:4304 --pbm=/dev/ttyUSB0 --error_level=0 --error_print=2 --foreground > /dev/null 2>&1 #/dev/PBM  -uall -uscan
            #  command: /bin/sh -c "/usr/sbin/owserver -p 0.0.0.0:4304 --pbm=/dev/ttyUSB0 & while true;  do sleep 120; done"
              ports:
              - "4304:4304"
            #  command: /usr/bin/supervisord
            #  restart: always
              privileged: true
        Dann ein
        docker-compose start
        zur Not geht das sogar alles in einer Kommandozeile.

        Gruß,
        Hendrik

        Kommentar


          #5
          Ich habe deinen Docker als build probiert und es wurde owfs oder owserver, weiß nicht mehr genau, als 2.8p15 installiert. Die Elabnet-Repository hat sich aber geweigert zu installieren, mindestens 2.9p8 benötigt wird und das habe ich mit Deinem dockerfile nicht hin bekommen.

          Kann es sein, dass Du nicht die elabnet 0.3, sondern älter hast und es deswegen funktioniert?

          Kompliziert finde ich es gar nicht.
          Ich habe nur Ubuntu in V18.04 genommen, die Pakete installiert, die ich benötige und nach Anleitung von Elabnet die Repository eingefügt und installiert.

          Anschließend musste ich irgendwie die Konfig ändern, denn ttyUSB0 ist bei mir nicht der Busmaster, also muss der schon einmal als ttyUSB1 eingepflegt werden und da ich von einer anderen IP darauf zugreife, auch die owfs.conf angepasst werden. Bei Deinem Image hätte ich später im Docker anpassen müssen, ich wollte aber, dass es immer sofort lauffähig ist, ohne nachzukramen, wie noch der Startbefehl war. Es sieht auch komplizierter aus, als es ist, denn ich habe es recht ausführlich aufgeschrieben.

          Und da ich eine extra IP haben wollte, das Netzwerk mit einpflegen, muss man ja nicht.

          Im eigentlichen Sinne also eigentlich nur neu installiert ohne Deine PPA, da ich mit Ubuntu 14.04 keine neue Version bekommen habe. Ich mag halt irgendwie fertige Images nicht so gerne und nutze gerne das dockerfile und mache dann eine compose dazu, aber genau das ging bei Deinem dockerfile nicht und bei einigen Paketen war mir auch nicht klar, warum ich die haben sollte (supervisor, python-software-properties, software-properties-common) und ich hatte auch irgendwie nicht richtig rausgefunden, was es mit der PPA auf sich hat, warum der owserver ow-server.
          Das war der Anstoß, es noch einmal zu machen, damit ich verstehe was warum installiert ist.

          Wie bringst Du denn den Docker dazu, nicht anzuhalten und owserver und owhttpd als service bei Beginn zu starten? Denn das macht Deine compose ja nicht (entrypoint).
          EDIT: Also owhttpd nicht, die ist bei Dir ja nicht drin gewesen und das wollte ich auch haben.

          Viele Grüße
          Nils

          PS: Hast Du zufällig owfs mit VOC Sensoren von Elabnet laufen?

          EDIT:
          Zusammengefasst eigentlich wie Dein Image. Compose anpassen und starten, nur dass meine Änderung der Adressierung vorher und nicht nachher gemacht werden.
          Zuletzt geändert von Marino; 13.01.2019, 20:28.

          Kommentar


            #6
            Zitat von Marino Beitrag anzeigen
            Ich habe deinen Docker als build probiert und es wurde owfs oder owserver, weiß nicht mehr genau, als 2.8p15 installiert. Die Elabnet-Repository hat sich aber geweigert zu installieren, mindestens 2.9p8 benötigt wird und das habe ich mit Deinem dockerfile nicht hin bekommen.
            Warum brauchst du denn etwas von Elabnet?
            Da nutze ich nix von (Außer die Hardware ;-)

            Anschließend musste ich irgendwie die Konfig ändern, denn ttyUSB0 ist bei mir nicht der Busmaster, also muss der schon einmal als ttyUSB1 eingepflegt werden und
            Geht im docker-compose file.
            da ich von einer anderen IP darauf zugreife, auch die owfs.conf angepasst werden. Bei Deinem Image hätte ich später im Docker anpassen müssen
            Ich meine, das musste ich nicht. Und wenn, dann wäre die Änderung ja auch sehr leicht möglich gewesen: owfs.conf anpassen, mir schicken, und ich hätte es so im Image übernommen.

            Und da ich eine extra IP haben wollte, das Netzwerk mit einpflegen, muss man ja nicht.
            Geht auch indem man nur die docker-compose ändert, oder?


            und bei einigen Paketen war mir auch nicht klar, warum ich die haben sollte (supervisor, python-software-properties, software-properties-common) und ich hatte auch irgendwie nicht richtig rausgefunden, was es mit der PPA auf sich hat, warum der owserver ow-server.
            Das war der Anstoß, es noch einmal zu machen, damit ich verstehe was warum installiert ist.
            Ich erinnere mich selbst nicht, muss ich zugeben.

            Wie bringst Du denn den Docker dazu, nicht anzuhalten
            Code:
             
             --foreground > /dev/null 2>&1

            PS: Hast Du zufällig owfs mit VOC Sensoren von Elabnet laufen?
            Nee, aber wenn, dann würde Smarthome.py die umrechnung machen.

            Lade doch dein Image beim docker-hub hoch -inklusive der Dokumentation.

            Gruß,
            Hendrik

            Kommentar


              #7
              Elabnet:
              Weil alle meine Sensoren, der Wirgate Classic und Busmaster Professional von denen sind.
              Die haben eine Anleitung, wie man den Busmaster in OWFS nutze und der bin ich gefolgt. (Link unten S. 23 f).


              ttyUSB? kann ich so nicht in der compose ändern, da ich dazu die Zeile "server: pbm /dev/ttyUSB1" in die owfs.conf einfüge. Jedenfalls wäre es mir noch nicht bekannt. Man lernt ja nie aus.

              IP:
              Standardmäßig steht im owfs.conf nur "server: port = localhost:4304" drin. Wenn alle docker die gleiche IP nutzen sollen, kein Problem. Wenn die Abfrage von einer anderen IP kommt, muss man hinzufügen: "server: port = IP_VOM_OWSERVER:4304". Erst dann kommt kein "Connection refused".
              Und ja, die IP ist nur in der Compose drin.

              "--foreground > /dev/null 2>&1"
              Genau die Zeile habe ich von Dir übernommen. Er startet dann die beiden services (owserver und owhttpd) und beendet den container dann sofort.

              VOC:
              Die Umrechnung macht bei mir Edomi ((VAD*310)+450)). Die Werte sehen nur halb so groß aus, als wenn das Wiregate sie ausliest.

              Hochladen:
              Hatte ich überlegt, aber damit muss ich mich erst einmal beschäftigen. Ich habe das noch nie gemacht.


              Momentan versuche ich gerade, herauszufinden, warum in Digital-IO erst nach 10s reagiert, obwohl er alle 1-2s abgefragt wird (Edomi LBS 19000193)...


              Viele Grüße
              Nils

              EDIT: Ich habe mal probiert. Es ist egal, ob die erste, die zweite oder beider command-Zeilen benutzt werden, er beendet sich immer wieder, wenn ich nicht eine Datei öffne.
              Magst Du mir mal erklären, wozu genau die command-Zeilen sind und warum Du die eine nicht nutzt? Das ist mir noch ein wenig ein Rätsel?!?
              Zuletzt geändert von Marino; 13.01.2019, 21:40.

              Kommentar


                #8
                Hallo,

                die owfs.conf wird garnicht benutzt in meinem Fall.
                Alles, steht in dieser Zeile:
                command: /usr/sbin/owserver -p 0.0.0.0:4304 --pbm=/dev/ttyUSB0 --error_level=0 --error_print=2 --foreground > /dev/null 2>&1

                -p 0.0.0.0 sorgt dafür, dass jede IP erlaubt ist.

                Command ist das Kommando, welches ausgeführt wird. Wenn du den OWFS so startest, wird er über die Kommandozeilenargumente -und nicht über die conf- gesteuert.

                Gruß,
                Hendrik

                Kommentar


                  #9
                  Danke, das werde ich mir wohl
                  morgen noch einmal anschauen. Ich nutze ja die conf-Datei und wenn auch mit deinem Command konnte ich erst durch Änderung der conf auf den server zugreifen, was ja der command hätte umschiffen sollen. Daher dachte ich, ich hätte den nicht verstanden.

                  So verstehe ich nun nicht, warum mit command der Zugriff erst nach Änderung der Conf möglich ist. Vielleicht finde ich morgen früh dazu noch ein wenig Zeit...

                  vg
                  nils

                  Kommentar


                    #10
                    Versuch doch nochmal meinen Container mit meiner docker-compose.
                    Wenn mich nicht alles täuscht, musst du nur ttyUSB0 in ttyUSB1 ändern und schon sollte es funktionieren.

                    Gruß,
                    Hendrik

                    Kommentar


                      #11
                      Ich konnte heute morgen noch ein wenig testen. Es funktioniert auf anderem Wege, aber ich weiß nicht warum.

                      Ich habe bei mir mit der config und start.sh, wie oben beschrieben das bash geöffnet und folgendes eingegeben:
                      Code:
                      ps auxw
                      Der output sagt mir:
                      Code:
                      /bin/sh ./opt/startscript/start.sh /bin/sh -c /usr/sbin/owserver -p 0.0.0.0:4304 --pbm=/dev/ttyUSB1 & while true;  do sleep 120; done
                      Okay, soweit gut. Meine start.sh wurde gestartet und der Rest der Zeile entspricht genau Deiner. Es ist also total egal, ob ich eine IP angebe in der conf oder gleich 0.0.0.0.

                      Also habe ich mein Startscript weg genommen und die conf nicht bearbeitet, sondern nur die Zeile drin.
                      Code:
                      command: /bin/sh -c "/usr/sbin/owserver -p 0.0.0.0:4304 --pbm=/dev/ttyUSB1 & while true; do sleep 120; done"
                      Das merkwürdige ist, ich bekomme einen Fehler, dass er /usr/sbin/owserver nicht findet. Bash in den docker: ist echt nicht da. Aber unter /usr/bin/owserver ist es und damit kann ich manuell und auch mit angepasstem command in der YAML.

                      Wieso aber sagt mir der output, dass "/usr/sbin/owserver" mit den Optionen gestartet wurde, wenn da gar nichts ist?

                      Mit bin statt sbin klappt dieses command in der YAML:
                      Code:
                      command: /bin/sh -c "/usr/bin/owserver -p 0.0.0.0:4304 --pbm=/dev/ttyUSB1 & while true; do sleep 120; done"
                      Warum aber vorher auch bei der Abfrage "sbin" drin steht, wo owserver gar nicht ist, verstehe ich nicht.
                      Zuletzt geändert von Marino; 14.01.2019, 08:06.

                      Kommentar


                        #12
                        Das mit dem "/usr/bin/owserver" und "/usr/sbin/owserver" Pfad in Post #11 verstehe ich zwar immer noch nicht, aber mit "bin" statt "sbin" läuft es, also habe ich oben mal ein Update eingefügt.
                        Vielleicht weiß das ja noch jemand.

                        Am besten "docker-compose down", damit stoppt und löscht man den Container direkt. Natürlich nur ausführen, wenn keine Änderungen erfolgt sind, welche vorher gespeichert werden müssen.

                        Anschließend mit "docker-compose up --build" den Container erstellen.

                        Viele Grüße
                        Nils

                        Kommentar


                          #13
                          Zitat von Marino Beitrag anzeigen
                          Warum aber vorher auch bei der Abfrage "sbin" drin steht, wo owserver gar nicht ist, verstehe ich nicht.
                          Das hast du doch angegeben, oder?
                          Ich empfehle auch:
                          Code:
                           
                           /usr/sbin/owserver -p 0.0.0.0:4304 --pbm=/dev/ttyUSB0 --error_level=0 --error_print=2 --foreground > /dev/null 2>&1
                          Aber nochmal was anderes:
                          Warum nimmst du jetzt nicht meinen Container ;-)

                          Gruß,
                          Hendrik

                          Kommentar


                            #14
                            Eben nicht. Öffne ich owfs mit der config und lese aus, läuft angeblich "/usr/sbin/owserver", was gar nicht existiert. Aber die Ausgabe behauptet es. Öffnen kann ich aber nur "/usr/bin/owserver", da dies existiert.

                            Deinen nehme ich nicht, weil meiner funktioniert

                            Ich benutze das Ubuntu 18.04, was ich mehrfach verwende, also nur ein Image. Deines nutzt 14.04. Da ich die Elabnet-Repository installieren wollte, brauchte ich eine neuere Version von owfs, als die installierte. Nämlich >=2.9p8 und nicht 2.8p15 (in Deinem Image). Nun läuft bei mir die "3.1p5-2" (owfs, owserver und zudem noch ow-shell und owhttpd). Die lassen sich bei Ubuntu 14.04 aber nicht installieren. Zudem läuft mein Container ohne privileged. Elabnet brauche ich später, da ich noch eine VM aufsetzen muss und die bekommt das drauf, also war die Recherche auch dafür nützlich. Und ich brauche ein paar Pakete und deine PPA nicht. Ich weiß nicht einmal was das ist und wozu die genau dient

                            Nachdem ich also so weit gekommen bin und alles funktioniert und wo die gehostet ist, kann ich die doch einfach meine verwenden und weiß, was installiert ist

                            Folglich benutze ich so ausschließlich offizielle Quellen zur Installation, was ich bevorzuge.


                            Die zweite command-Zeile ist doch eigentlich nur für foreground wichtig (mein Container läuft jetzt 26h fehlerfrei durch ohne das) und für error-log. Warum kommentierst Du denn die andere command-Zeile aus?

                            Viele Grüße
                            Nils

                            Kommentar


                              #15
                              Zitat von Marino Beitrag anzeigen
                              da ich noch eine VM aufsetzen muss und die bekommt das drau
                              Was bedeutet das?
                              Zitat von Marino Beitrag anzeigen
                              Du denn die andere command-Zeile aus?
                              Weiß ich nicht mehr. Die andere hatte ich zuerst. Später die mit foreground. Dafür wird es einen triftigen Grund gegeben haben.
                              Zitat von Marino Beitrag anzeigen
                              mein Container läuft jetzt 26h fehlerfrei durch
                              Wunderbar. Wer heilt hat Recht ;-)

                              Aber wie gesagt: Dann beschäftige dich auch mal mit dem Docker-Hub, so dass nicht wieder jemand das, was du erreicht hast neu erfinden muss.

                              Kommentar

                              Lädt...
                              X