Ankündigung

Einklappen
Keine Ankündigung bisher.

Einfache CometVisu-Installationsfrage

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

    Einfache CometVisu-Installationsfrage

    Hallo zusammen,
    ich war lange nicht mehr hier. Umso schöner, dass Christian Mayer immer noch dabei ist und sehr aktiv.

    Und da habe ich eine eigentlich einfache Supportfrage.

    Gerade versuche ich nach einem Hardwaredefekt meinen Heimserver (ursprünglich war's mal ein Original-Wiregate, mittlerweile selbst aufgesetzter Kleinstrechner) wieder zum Laufen zu kriegen.

    Neue Hardware, und es läuft vieles problemlos: knxd, ow-server, wiregated.pl, wiregated-ow.pl, Ebus-Anbindung per Wiregate-Plugin, Russound-Multiroom-Audio, usw usf. Sogar SMS kann das Ding schon versenden. Auch als Gateway für die ETS ist das System schon wieder brauchbar.

    Meine einzigen Blues betreffen ALSA und CometVisu.

    Für die CometVisu bin ich der Empfehlung gefolgt und habe den Docker-Container geholt. Starte ich den (und exportiere den HTML-Port mit -p 80:80), dann sehe ich auch was auf dem Browser.

    Nur: wie konfiguriere ich das Backend in diesem CometVisu-Container? Der knxd im Container müsste ja irgendwie den knxd des Systems als Gateway nutzen. Wie konfiguriere ich das?

    Der System-KNX lauscht auf /tmp/eib, auf /run/knx und auf Port 6720, wenn ich das richtig verstehe.

    Wie sage ich dem CometVisu-Container, dass der darin befindliche knxd diesen System-knxd benutzen soll?

    Oder bin ich auf dem Holzweg und sollte es ganz anders probieren?

    Danke für jede Hilfe,
    Fry



    #2
    Ein halber Schritt weiter: mein System-KNX hat Version 0.14. Er ist so konfiguriert, dass er auf Port 3671/udp, 3700/udp hört, und der Systemd macht ja auch noch den Port 6720/tcp auf. Den Cometvisu-Container starte ich mit

    docker run --name cv -e KNX_INTERFACE='iptn:192.168.42.38:3700' -e KNXD_PARAMETERS='-u -d/var/log/eibd.log -c -t9' -p 80:80 -v /var/www/html:/var/www/html cometvisu/cometvisu

    Wenn ich dann mit docker exec -it cv bash in den Container reingehe, läuft da auch der Container-knxd in Version 0.1.0

    Nur: schicke ich probehalber mit

    /usr/local/bin/groupswrite local:/tmp/eib 1/2/122 1

    ein Bustelegramm los, dann sehe ich zwar in /var/log/eibd.log auch irgendeine Aktivität (aus Pufferungsgründen erst nach Beendigung des knxd).

    Aber es passiert nichts auf dem KNX-Bus!

    Was ist da falsch?

    Kommentar


      #3
      Genau, Du konfigurierst das per Environment-Variablen (vgl. https://www.cometvisu.org/CometVisu/...en-environment )

      Die IP Adresse sollte die Docker-interne vom Docker-Host sein. Das ist normalerweise die 172.17.0.1

      Wichtig ist natürlich auch wie Du den knxd auf dem Host gestartet hast, so dass der auch Server ist und auf IP Tunnel hört.
      TS2, B.IQ, DALI, WireGate für 1wire so wie Server für Logik und als KNX Visu die CometVisu auf HomeCockpit Minor. - Bitte keine PNs, Fragen gehören in das Forum, damit jeder was von den Antworten hat!

      Kommentar


        #4
        Halleluja.

        Danke Christian. Der eine Satz von dir war's.

        Mir als Docker-Neuling war nicht klar, dass die richtige IP-Adresse nunmal die im internen Netzwerk ist. Und das hat mich fast verrückt gemacht.

        Jetzt funktioniert ein
        /usr/local/bin/groupswrite local:/tmp/eib 1/2/122 1
        im Container (das schaltet meinen immer noch stehenden Weihnachtsbaum an) - und jetzt bin ich zuversichtlich, dass das mit der Visu jetzt auch klappen wird. Jetzt muss ich nur meine uralt-Config hier wieder zum Laufen kriegen.

        Danke nochmal! Große Hilfe.

        Kommentar


          #5
          Fry
          Ich habe auch einen Umstieg vom Wiregate vor mir und bin daher für die Fragestellungen des Threads sehr dankbar.
          Frage am Rande: Welche Distribution nutzt Du nun als Basis? Baust Du alle notwendigen Pakete (z. B. knxd, ow-server) selbst oder gibt es diese mittlerweile als fertige Pakete in einer Distribution?

          Kommentar


            #6
            Ich bin noch mitten drin.

            Hier aber schon mal meine Installations-Mitschrift bis heute:

            * Ich nutze Linux Mint (Basis Ubuntu, dessen Basis Debian). Das ist etwas Overkill, aber ich habe meine Gründe.
            * Mein altes Wiregate war zwar hardwareseitig schon gepimpt (fitPC2), aber softwareseitig noch die Uralt-Version ohne systemd.
            * Die folgende Anleitung hat für One-Wire und knxd sowie Wiregate-Funktionalität funktioniert
            * Auf Webmin o.ä. lege ich keinen Wert mehr.
            * Es fehlen noch: Vervollständigung CometVisu, cron-Jobs (logrotate, Backups) und ALSA-Sound

            Neueinrichtung Wiregate nach Defekt des alten.

            ## Booten eines Linux-Live-Systems ######################################

            Rechnerhardware: AWOW TX33

            (im folgenden wird der neue Rechner als "Wiregate" bezeichnet)

            Laptop/anderer Rechner:
            * Linux Mint Cinnamon 21.1 für OEM als ISO vom Netz holen,
            * Mit balenaEtcher einen bootable USB-Stick erstellen

            Wiregate:
            * Wiregate mit eingestecktem Ethernet-Kabel und Mint-USB-Stick starten. Von Anfang an DEL drücken!
            * Im BIOS-Menü Booten von USB wählen, dann Mint-Livesystem starten.

            ## Hardware-Blues... ######################################

            Dieses AWOW hatte eine eingebaute und nicht entnehmbare und DEFEKTE MMC-SSD. Prüfung mit
            e2fsck -vcck /dev/mmcblk1p2
            Ergebnis waren defekte Blöcke und sogar Aufhänger während des Tests!
            Austauschrechner bestellt, diesmal inklusive einer 256GB M.2 SSD (SATA, denn der AWOW mag kein NVME).
            Nach Beschaffung und Einbau der zusätzlichen M.2 SATA SSD: diese ist nun /dev/sda.
            Die Platte mit gdisk partitionieren: 64G auf /, 192G auf /var, beides mit mke2fs auf ext4 formatieren.

            ## Grundinstallation ################################################## ####

            Wiregate:
            (im Mint-Live-System kann man mit "apt install lsscsi" und dann dem Kommando "lsscsi" die SCSI-Devices auflisten)

            * Mint-Version für OEMs auf /dev/sda (das ist die montierte M.2-SATA-Platte) installieren.
            * Die Platte dabei so partitionieren: 64G auf /, 192G auf /var, beides ext4.
            * bei der Mint-Installation die Option "Deutsch, ohne Codecs", dabei den Rechnernamen "wiregate" vergeben.

            Nach der Installation mit anderem Rechner auf die Web-Oberfläche der Fritzbox gehen:

            Dort für das alte Wiregate den Eintrag unter Heimnetzübersicht->Netzwerkverbindungen löschen und für das neue Wiregate
            die gewünschte feste IP vergeben, Internet->Freigaben einrichten usw.

            Dann Wiregate neu starten, es sollte nun die richtige IP erhalten.

            Nach Neustart des Wiregate ist man automatisch als oem@wiregate eingeloggt.
            Mint startet automatisch /usr/bin/mint-welcome. Dieses bietet auf dem Desktop unter "erste Schritte" dann an:

            * Aktualisierungsverwaltung: Mint-Systemaktualisierung laufen lassen, lokalen Spiegelserver auswählen
            * Treiberverwaltung starten, der Wifi-Chiptreiber wird dann installiert (rtl8821ce-dkms, der Chip heißt Realtek 8821C PCIe,
            Wiregate braucht den aber eigentlich nicht).
            * Auf dem Desktop Bluetooth (per Icon unten rechts) und Wifi (per Startmenü->Netzwerk) deaktivieren und checken,
            ob das auch beim Neustart so bleibt
            * Auf dem Desktop "Vorbereitung zur Auslieferung an den Kunden" aktivieren, dies löst einen Neustart mit Start von oem-config aus
            * Rechnername nochmal "wiregate". Username chris mit Passwort (egal, wird später deaktiviert) einrichten, dann Neustart

            sudo passwd root
            temporäres Passwort einrichten und mit "su -" auf root wechseln.

            ## Backups vom USB-Stick nach lokal kopieren ##############################

            USB-Backupstick des alten Wiregate in das neue Wiregate einstecken. Falls automatisch eingehängt, erst aushängen.
            Das letzte Backup vom USB-Stick nach /root/ kopieren, diese liegt im folgenden unter /root/ROOT-backup.

            ## SSH-Einrichtung ###########################################

            Nun dafür sorgen, dass das neue Wiregate per ssh erreicht werden kann:
            cd ~
            cp ROOT-backup/etc/hosts /etc
            cp -avr ROOT-backup/root/.ssh .
            apt install openssh-server emacs mmv apt-file
            apt-file update
            emacs /etc/ssh/sshd_config


            (zu apt: verfügbare Pakete kann man zB mit apt list *ssh* auflisten, oder gleich synaptic oder den Mint-Paketmanager verwenden)
            (Eine Liste der im alten Wiregate installierten Pakete findet man in ROOT-backup/var/lib/dpkg/status )

            Dort eintragen (hier nur die geänderten Zeilen gezeigt):
            -------------------------------------------
            UseDNS no
            PermitRootLogin prohibit-password
            PubkeyAuthentication yes
            PubkeyAcceptedKeyTypes=+ssh-rsa
            PasswordAuthentication no
            PermitEmptyPasswords no

            ---------------------------------------------

            Dann wieder auf der Kommandozeile
            service ssh restart

            und am Laptop sowie auf dem knxberry und evtl. anderen Hosts:
            ssh-keygen -f ~/.ssh/known_hosts -R wiregate
            ssh root@wiregate

            Das müsste jetzt ohne Passwort funktionieren. (Falls nicht, so hilft "ssh -v root@wiregate", um den Fehler einzugrenzen)

            Um den grafischen Modus für den Schaltschrank abzuschalten:
            systemctl set-default multi-user.target
            (andernfalls: systemctl set-default graphical.target)

            (Wichtig, weil damit auch Automount von Medien abgeschaltet wird)

            Ggfs. noch sehen, ob der Bootvorgang im BIOS-Menü abgekürzt werden kann.

            Ggfs. definitiv nicht benötigte Pakete entfernen:
            apt remove libreoffice* thunderbird*
            (Cinnamon selbst und auch Firefox lasse ich noch in Ruhe, für den Fall dass man es mal braucht)
            apt autoremove

            ## Wiregate im Schaltschrank ######################################

            Das Wiregate nun im Schaltschrank montieren und damit alle USB-Verbindungen (1-wire-Busmaster, Busware-KNX-tpuart) hergestellt werden.

            ## One-Wire-Schnittstelle ######################################

            1-wire-Busmaster (von Busware.de) anstecken
            Wiregate (Konsole oder per ssh): One-Wire-Pakete installieren
            apt install owserver owfs ow-shell

            (mit apt list ow* kann man zB nach Paketen suchen)

            emacs /etc/owfs.conf
            Hier die Zeile "FAKE = ...." mit # auskommentieren und die Zeile
            server: usb = all
            stehen lassen (Kommentarzeichen # entfernen)

            Dann den ow-server starten
            systemctl daemon-reload
            service owserver restart
            systemctl enable owserver


            Nun müssten mit
            owdir
            die Sensorcodes erscheinen.

            ## KNX-Schnittstelle ######################################

            KNX-Schnittstelle USB TP-UART von busware anschließen
            apt install knxd knxd-dev knxd-tools
            chown knxd.knxd /run/knx

            emacs /etc/knxd.conf

            hier die Optionszeile editieren:
            KNXD_OPTS=/etc/knxd.ini

            und eine /etc/knxd.ini wie folgt erzeugen:
            --------------------------------------------
            [unix]
            path = /tmp/eib
            server = knxd_unix
            systemd-ignore = false
            [tpuarts]
            device = /dev/ttyKNX
            driver = tpuart
            [debug-server]
            name = mcast:knxd
            [main]
            addr = 1.0.111
            cache = gc
            client-addrs = 1.0.112:8
            connections = unix,tpuarts,server
            systemd = systemd
            [server]
            debug = debug-server
            discover = true
            router = router
            server = ets_router
            tunnel = tunnel

            -------------------------------------------------

            (Dokumentation siehe https://github.com/knxd/knxd/blob/main/doc/inifile.rst)

            emacs /etc/udev/rules.d/70-your-knxd.rules
            nur mit einer Zeile erstellen:
            ACTION=="add", SUBSYSTEM=="tty", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="204b", SYMLINK+="ttyKNX", OWNER="knxd", GROUP="knxd"

            usermod -a -G syslog knxd


            Wenn man den busware-Stecker jetzt rauszieht und wieder reinsteckt, sollte ein Symlink /dev/ttyKNX (owner/group root.root)
            auf /dev/ttyACM0 (oder so) verweisen, und dieses letztere Device sollte owner/group knxd.knxd haben.

            Mit
            systemctl daemon-reload
            service knxd start

            sollte der knxd funktionieren - zu überprüfen am Laptop mit der ETS, diese sollte über diese Schnittstelle auf Geräte zugreifen können.
            systemctl enable knxd
            sollte den knxd beim nächsten Systemstart automatisch starten.

            ## wiregated.pl und wiregated-ow.pl für KNX und 1-wire ######################################
            cd ~
            apt install libyaml-perl librrds-perl rrdtool mpd mpc libc6-dev perl-doc
            cpan CPAN
            cpan Math::Round Log::Log4perl inc::latest Math::BaseCalc Getopt::Std Time::HiRes
            cpan IO::Socket IO::Select FileHandle CPAN:istnameInfo Proc:aemon Proc::PID::File
            cpan JSON::XS Net::Telnet YAML::Syck Device::SerialPort


            Diese cpan-Installationen dauern SEHR lange. Kaffee trinken...
            (cpan-Datenbank der installierten Pakete steht unter /root/.cpan/Metadata, falls man was nachschauen will)

            cd ~
            wget https://github.com/beanz/xpl-perl/ar...ads/master.zip
            unzip master.zip
            cd ~/xpl-perl-master
            perl Makefile.PL
            make
            make test
            make install


            cd ~/ROOT-backup
            cp -avr etc/wiregate /etc/
            cp -avr usr/sbin/wiregated.pl usr/sbin/wiregated-ow.pl /usr/sbin/
            cd ~
            ln -sf /etc/wiregate/plugin/generic generic
            ln -sf /etc/wiregate/plugin/generic/conf.d/ conf.d


            Im wiregated.pl und wiregated-ow.pl den Code zur "Daemonisierung" entfernen. Das betrifft folgende Zeilen, die einfach gelöscht werden:
            use Proc:aemon;
            Proc:aemon::Init unless $opts{d};


            Test: Jetzt von der Kommandozeile den Wiregated händisch starten
            /usr/sbin/wiregated.pl
            und von einem anderen Terminal den Wiregated-ow händisch starten
            /usr/sbin/wiregated-ow.pl

            chown knxd.knxd /etc/wiregate/wiregate_plugin.db /var/log/eib.log
            rm /tmp/wiregate_plugin.db


            und mit ~/bin/tail -f /var/log/eib.log schauen, ob der Bus geloggt wird und das Wiregate Temperaturen, Logikergebnisse usw. sendet.
            Das sollte der Fall sein.
            Falls nein, so liegt es meist an File ownerships und permissions, zB in /var/log, in /etc/wiregate oder /tmp.
            Die Daemonen knxd und wiregated laufen als User knxd.

            Falls schon vorhanden, die systemd-units rüberkopieren:
            cp -avr ROOT-backup/etc/systemd/system/wiregated*service /etc/systemd/system

            Ansonsten: Hier das eine File (das andere entsprechend) /etc/systemd/system/wiregated.service/wiregated.service:
            --------------------
            [Unit]
            Description=Wiregate Daemon
            After=network.target knxd.service

            [Service]
            ExecStart=/usr/bin/perl /usr/sbin/wiregated.pl
            User=root
            Group=root

            Restart=on-failure
            RestartSec=10

            [Install]
            WantedBy=multi-user.target network-online.target

            --------------------

            Schließlich:
            systemctl daemon-reload
            systemctl start wiregated.service wiregated-ow.service
            systemctl enable wiregated.service wiregated-ow.service


            ## Webserver und CometVisu ######################################

            cd ~/ROOT-backup/var/www/html
            cp -avr sms.pl resource knx-uf-iconset /var/www/html
            ln -sf html/visu /var/www/visu
            ln -sf resource /var/www/html/visu


            ACHTUNG: CometVisu funktioniert NICHT mit den eibread-cgi / eibwrite-cgi - Versionen, die bei neueren Versionen des knxd dabeiliegen.
            Es MUSS eine knxd-Version 0.0.5.1 sein.

            Daher ist es einfacher, CometVisu inklusive dem Webserver und dem passenden knxd in einem Docker-Container zu installieren:
            siehe
            https://www.cometvisu.org/CometVisu/...ll/docker.html
            und
            https://www.cometvisu.org/CometVisu/...-kommandozeile

            apt install docker docker.io
            docker pull cometvisu/cometvisu:latest
            docker volume create CometVisuConfig

            docker run --name cv -e KNX_INTERFACE='ipt:172.17.0.1:3671' -e KNX_ADDR='1.0.120' \
            -p 80:80 -v /var/www:/var/www cometvisu/cometvisu


            80 ist der Apache-HTTP-Port
            3671 ist der knxd-Port, auf dem der System-KNX mithört
            Die IP ist die des Container-Hosts im Container-internen Netzwerk
            1.0.120 ist die physikalische Adress (PA) des Wiregate auf dem KNX-Bus (für Wiregate2: 1.1.10)
            das -v... bewirkt, dass die im System vorhandene Webseite im Container eingeblendet wird

            Mit
            docker exec -it cv bash
            nun eine Shell im laufenden Container öffnen. Dort sollte probehalber ein
            /usr/local/bin/groupswrite local:/tmp/eib 1/2/110 1
            die Wandlampe unter der Galerie einschalten.

            docker stop cv; docker rm cv
            stoppt und löscht den Container wieder.

            Zuletzt geändert von Fry; 03.02.2023, 13:44.

            Kommentar


              #7
              Oben: die Smileys im Code jeweils durch Doppelpunkt und großes D ersetzen.

              Kommentar


                #8
                Und nun noch eine Frage an Chris M: mittlerweile startet die CometVisu und scheint zu funktionieren.
                Mein zehn Jahre altes config ist natürlich unkompatibel und sieht fürchterlich aus.
                Wie würdest du es an meiner Stelle anpacken, die alte Config in eine gültige neue Config zu überführen? Automatisch wird das nicht funktionieren, was sind die wichtigsten Schritte, die ich zu machen habe?

                Kommentar


                  #9
                  Top, danke! Das muss ich mir mal in Ruhe ansehen.

                  Kommentar


                    #10
                    Also wenn Du beim docker run das hier machst "-v /var/www:/var/www" dann wird die CometVisu in dem Container gar nicht benutzt, das ist ja nicht Sinn der Sache. Eigentliche sollte nur der Order mit den Config-Dateien in den Container gemounted werden. Daher steht in der Anleitung auch "-v CometVisuConfig:/var/www/html/resource/config" der Rechte Teil vom ":" ist der Zielpfad im Container. In der Anleitung wird vorher ein Volume Namens "CometVisuConfig" angelegt mit dem Befehl "docker volume create CometVisuConfig" das muss man aber nicht unbedingt machen, man kann einfach einen beliebigen Ordner vom Host-System nehmen. Wenn ich deine Angaben richtig deute müsste das bei Dir dann: "-v /var/www/html/resource/config:/var/www/html/resource/config" sein.

                    Und der Config-Upgrade der im aktuellen Release der CometVisu enthalten ist, wurde vor ca. 10 Jahre erstmals eingeführt, kann also durchaus sein, dass Du mit dem auch deine Config noch upgraden kann. Den musst Du halt nur manuell aufrufen mit <cometvisu-url>/upgrade/?config=<name-der-config> und dann schauen was er sagt.

                    Wenn das nicht mehr funktioniert, musst Du die Schritte die der Upgrader macht von Hand machen und dazu im Source-Code nachschauen, was der tut:
                    https://github.com/CometVisu/CometVi...ader.class.php

                    Das sind die ganzen upgradeXToY-Funktionen da musst du mit der anfangen die Der "library_version" entspricht die in deiner Config steht. Wenn da keine drin steht wird es vermutlich die Version 0 sein.
                    Gruß
                    Tobias

                    Kommentar


                      #11
                      Update: ich bin nun auf Home Assistant umgestiegen. Auch nicht ohne Schmerzen. Aber der dortige "floorplan" ist ziemlich cool. Danke an das CometVisu-Team, die CV hat mir 10 Jahre geholfen.

                      Kommentar

                      Lädt...
                      X