Ankündigung

Einklappen
Keine Ankündigung bisher.

HowTo Simple KNX-1Wire Temperaturfühler Anbindung

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

    HowTo Simple KNX-1Wire Temperaturfühler Anbindung

    Das Forum hat mir schon soviel gegeben, also gebe ich mal etwas zurück.

    Vorerst ist die Anleitung nur für einfache Temperaturfühler (DS18B20) da ich sonnst keine besitze.

    Benötigte Hardware
    -Raspberry PI (mit allem Zubehör was man benötigt)
    -1 Wire Sensoren DS18B20
    -1Stk 4,7kOhm Wiederstand
    -Netzwerkanbindung
    -KNX (in meinem Fall über eine MDT-Router)
    -bei langen Leitungslängen, vielen Sensoren oder erhöhter Stabilität empfiehlt sich das


    Kostenpunkt für 15 Sensoren + Raspberry PI ca 100€


    Raspberry PI Einrichten
    1. Raspian Light Dowloaden
    2. Win32 Imager Downloade
    3. Image auf die SD Karte Schreiben
      1. MicroSD-Kartenlaufwerk auswählen
      2. Image Datei auswählen
      3. Image Datei schreiben
      4. Im laufwerk der MicroSD Karte eine datei erstellen die ssh heißt ohne dateiendung und ohne inhalt.
    4. Karte in den Raspberry PI stecken und mit dem Stromnetz verbinden
    5. Kitty downloaden
    6. Die IP Adresse des Raspberry PI im Router herausfinden.
    7. Kitty Öffnen
    8. kitty.jpg
    9. Unter Hostname (IP address) tragt ihr die zuvor im Router nachgeschaute IP Adresse ein und klickt auf Open
    10. das nächste Dialog mit OK bestätigen und username "pi" und passwort "raspberry" ohne Anführungszeichen eingeben
    11. Code:
      sudo raspi-config
    12. dort
      Code:
      Expand Filesystem
      auswählen
    13. Code:
      sudo apt-get update && apt-get upgrade -y
      eingeben
    14. Code:
      sudo nano /boot/config.txt
    15. am ende der datei
      Code:
      dtoverlay=w1-gpio,gpiopin=4,pullup=on
      einfügen mit strg+x beenden und y speichern und nochmal mit enter bestätigen
    16. Code:
      sudo modprobe w1-gpio pullup=1 && sudo modprobe w1-therm && reboot
    17. Schritt 8-11 nach dem Neustart wiederholen
    18. 1-Wire Sensoren Anschließen gpio_1wire.gif


      C
    19. Code:
       ls -al /sys/bus/w1/devices
    20. dort sollte es dann etwa so aussehn w1.jpg
    21. die Nummern die mit 28- Anfangen sind eure ID´s der Sensoren, diese ID´s müsst ihr euch speichern werden später noch gebraucht. ihr könnt auch die Sensoren einzeln anschließen und immer ca 10 sekunden warten dann bekommt ihr die ID´s einzeln und wisst welchem Sensor welche ID gehört.
    22. Die Nächsten befehle nacheinander eingeben
    23. Code:
      sudo apt-get install debhelper cdbs automake libtool libusb-1.0-0-dev git-core build-essential libsystemd-daemon-dev dh-systemd libev-dev cmake
    24. Code:
      cd /home/pi
      Code:
      git clone https://github.com/knxd/knxd.git
      Code:
      cd knxd
      Code:
      dpkg-buildpackage -b -uc
      Code:
      cd ..
      Code:
      sudo dpkg -i knxd_*.deb knxd-tools_*.deb
    25. Jetzt muss KNXD noch eingestellt werden
      Code:
      sudo nano /etc/knxd.conf
    26. In der Zeile wo KNXD_OPTS folgendes einfügen ACHTUNG!!! muss auf euer System angepasst werden
    27. Code:
      KNXD_OPTS="-e "PhysikalischeAddr" -E "PhysikalischerAddrBereich" -u /tmp/eib -b ip:"MulticastAddr."
    28. Beispiel:
    29. Code:
      KNXD_OPTS="-e 1.2.1 -E 1.2.2:1 -u /tmp/eib -b ip:224.0.23.12"
    30. Code:
      /etc/init.d/knxd restart
    31. Jetzt müssen wir noch PHP installieren
    32. Code:
      sudo apt-get install php5
    33. Code:
      sudo nano /var/www/html/temperatur.php
    34. Folgenden Code Einfügen
      PHP-Code:
      <?php
          
      //Umrechnung in KNX DPT9
           
      function DECtoDPT9($DEC) {
               
      $DEC *= 100;
               
      $dpt9 0;
               
      $exponent 0;
               if (
      $DEC 0)
                   {
                       
      $dpt9 0x08000;
                       
      $DEC = -$DEC;
                   }
               while (
      $DEC 0x07ff)
                   {
                       
      $DEC >>= 1;
                       
      $exponent++;
                   }
               if (
      $dpt9 != 0$DEC = -$DEC;
               
      $dpt9 |= $DEC 0x7ff;
               
      $dpt9 |= ($exponent << 11) & 0x07800;
               return 
      strtoupper(chunk_split(str_pad(dechex($dpt9 0x0ffff),4,'0',STR_PAD_LEFT),2,' '));
          }
          
      //#####################Einstellungen#################################################
          // Einstellungen                                                                    #
          // 1Wire ID                                                                            #
           
      $id "28-0115a4d134ff";                                                        #
          // Gruppenadresse                                                                    #
           
      $group_address "0/3/10";                                                        #
          // Unterschied bei dem Gesendet wird                                                #
           
      $deltat 0.5;                                                                    #
          // Anzahl der durchläufe bis Wert OHNE aenderung gesendet wird                        #
           
      $maxruntime 100;                                                                #
          // Pause in "s" zwischen Durchlaufen                                                #
           
      $pause 5;                                                                        #
          //###################################################################################

          //Schleifenfunktion
           
      while (true)
          {    
          
      // Datei abfragen
           
      $last_line exec("cat /sys/bus/w1/devices/".$id."/w1_slave");

          
      // Gewünschte Information extrahieren
           
      $value explode("t="$last_line);

          
      // Formatieren
           
      $formatted_value number_format($value[1] / 10002"."",");

          
      // Konvertieren
           
      $converted_value DECtoDPT9($formatted_value);



          
      // Vergleich letzer Gesndeter Wert mit Aktuellem
           
      if(empty($old_value) OR abs($formatted_value-$old_value) > $deltat) {

          
      // Auf Bus schreiben
           
      exec('/usr/lib/knxd/groupwrite ip:127.0.0.1 '.$group_address.' '.$converted_value);

          
      // Alter Wert Zwischenspeichern
           
      $old_value $formatted_value;

          
      // Runtime Zurücksetzen
           
      $runtime 0;
           }

           if (
      $runtime $maxruntime) {
          
      // Auf Bus schreiben
           
      exec('/usr/lib/knxd/groupwrite ip:127.0.0.1 '.$group_address.' '.$converted_value);
          
      // Runtime Zurücksetzen
           
      $runtime 0;
           }
           ++
      $runtime;
          
      // Debug-Ausgabe
           
      echo("Ausgelesender Wert: ".$value[1])."\n";
           echo(
      "Formatierter Wert: ".$formatted_value)."\n";
           echo(
      "Konvertierter Wert: ".$converted_value)."\n";
           echo(
      "Runtime : ".$runtime)."\n";
           echo(
      "Letzer Gesndeter Wert : ".$old_value)."\n";
           
      sleep($pause);
          }
          
      ?>
      mit strg+x beenden und y speichern und nochmal mit enter bestätigen
    35. Unter den Einstellungen bitte noch eigene ID, Gruppenadresse usw eintragen.
    36. Code:
       php /var/www/html/temperatur.php
    37. Jetzt sollte das ganze Folgendermaßen aussehen php.jpg
    38. mit STRG+C das ganze wieder beenden
    39. um das ganze beim Systemstart auch auszuführen muss folgendes
      Code:
      sudo crontab -e
      mit 2 und Enter bestätigen
    40. am ende der Datei folgendes eintragen
      @reboot php /var/www/html/temperatur.php
    41. Jetzt wird nach jedem reboot die Datei einmalig ausgeführt!


    Das Ganze läuft bei mir jetzt ca ein Halbes Jahr ohne Probleme zwischendurch wurde zwar der Code der PHP datei noch etwas verbessert und neu hochgeladen. um ganz sicherzugehen das es immer gut funktioniert kann man noch
    Code:
    sudo crontab -e
    Code:
    @daily  /sbin/shutdown -r now
    eingeben das führt dazu das der Raspberry PI jeden tag einmal Neugestartet wird

    der Wert den die Sensoren senden wird im Übrigen nicht auf Gültigkeit überprüft sondern direkt gesendet


    zum schluss noch wie das bei mir aussieht ich hab die ganze sache mit dem Pegelwander gebaut photo_2017-02-27_15-29-40.jpg
    photo_2017-02-27_15-29-49.jpg
    Angehängte Dateien
    Zuletzt geändert von Peterich; 21.05.2017, 09:18.

    #2
    Hi,
    bekommt man das auch utner Microcore linux zum laufen?

    Für die WAGO243 Klemmen gibt es Hutschinenehalter. Die würden sich bei dir gut machen :-)

    VG
    Jürgen

    Kommentar


      #3
      Zitat von heckmannju Beitrag anzeigen
      Hi,
      bekommt man das auch utner Microcore linux zum laufen?
      Mit Microcore Linux habe ich noch nicht gearbeitet
      Im Enddefekt musst du nur PHP installieren können und die 1wire unterstützung des Rapsberry PI aktivieren können.

      Die Hutschinenehalter stehen auf der To-Do Liste wie So vieles. Wird vermutlich beim Nächsten "Mach dein Sche*ß Tag" passieren

      Kommentar


        #4
        Hi,
        das ist ja ein sehr intressantes Projekt dass Du da umgesetzt hast.
        Wie viele Temp. Sensoren kann man denn damit betreiben? Ich habe vor ca. 30 Temperaturfühler an meinen Vor- und Rückläufen der FBH anzubringen. Ist das damit realisierbar?

        Danke.
        Gruß Christian

        Homeserver 2.2
        Anbindung an Fritzbox 80%
        LinVDR 10% - Reelbox 0%

        Kommentar


          #5
          Also 15 kann ich bestätigen das dass funktioniert. Aber 30 müsstest du probieren ansonnsten kannst du einen zweiten raspberrypi dafür nutzen. Aufjefall musst du den Pegelwandler einbauen sonnst wird das bei 30 sowieso nichts

          Kommentar


            #6
            Vielen Dank für die Info. Dann kann ich ja aufrüsten bis die Himbeere aufgibt :-)
            Ich werde das wohl mal testen.
            Gruß Christian

            Homeserver 2.2
            Anbindung an Fritzbox 80%
            LinVDR 10% - Reelbox 0%

            Kommentar


              #7
              Zitat von Peterich Beitrag anzeigen
              Also 15 kann ich bestätigen das dass funktioniert. Aber 30 müsstest du probieren ansonnsten kannst du einen zweiten raspberrypi dafür nutzen. Aufjefall musst du den Pegelwandler einbauen sonnst wird das bei 30 sowieso nichts
              Mit einem normalen Blauen Bussmaster schaft man so 20 Temperatursensoren Parasitär betrieben. Denke das man da nicht mehr Sensoren rausbekommt. Aber in dem Fall versuchen macht klug.

              Vg
              Jürgen

              Kommentar


                #8
                Mir fällt gerade noch ein bei sovielen sensoren verwendest du statt crontab besser die rc.local

                sudo nano /etc/rc.local
                einfach zwischen dem ersten eintrag und exit 0
                Code:
                /usr/bin/php /var/www/html/1.php &
                /usr/bin/php /var/www/html/2.php &
                /usr/bin/php /var/www/html/3.php &
                ....
                hat sich bei mir nämlich rausgestellt das crontab sich da manchmal verschluckt

                was man noch Probieren könnte. einen zweiten 1wire bus auf dem raspi zu starten leider hab ich nicht viel zeit und auch grad kein testmaterial da aber hier ist schonmal ein link wie man den 1wire auf einen anderen Pin legt müsste also theoretisch möglich sein auch einen zweiten busmaster zu starten

                Zitat von heckmannju Beitrag anzeigen

                Mit einem normalen Blauen Bussmaster schaft man so 20 Temperatursensoren Parasitär betrieben. Denke das man da nicht mehr Sensoren rausbekommt. Aber in dem Fall versuchen macht klug.

                Vg
                Jürgen
                ja angeblich kann der raspberry pi auch nur 10 gab irgednwo mal ne Beschränkung
                Zur Zeit läßt der Treiber bis zu 10 Sensoren am Bus zu. Sie haben jedoch die Möglichkeit, durch einen Eintrag in der Datei /etc/modprobe.d/1-wire.conf diese Zahl zu erhöhen. Falls die Datei noch nicht exisitert, ist sie neu zu erstellen. Dann kann mit der folgenden Zeile die Anzahl der möglichen Sensoren, z. B. auf 15, erhöt werden:
                options wire max_slave_count=15
                hat bei mir aber ohne den eintrag funktioniert
                Zuletzt geändert von Peterich; 18.03.2017, 06:48.

                Kommentar


                  #9
                  Zitat von Peterich Beitrag anzeigen
                  Code:
                  sudo raspi-config
                  Hallo Tobias,

                  danke für die Anleitung!

                  Eine Frage dazu: Bei raspi-config sehe ich einen Menüpunkt 1-wire, das ist bei mir standardmässig ausgeschaltet. Ist das richtig, also an dieser Stelle nicht verändern?


                  Kommentar


                    #10
                    Da brauchst du nichts zu verändern. Das ist im Endeffekt das was man im die config.txt einträgt

                    Kommentar


                      #11
                      Hallo zusammen.
                      Ich habe meinen Raspberry und die Sensoren mitlerweile erhalten. Leider war etwas wenig Zeit. Jetzt habe ich es heute mir mal vorgenommen die Installation auf dem Raspi durchzuführen. Ich habe mich an die Anleitung von Peter gehalten. Nochmal ein dickes Danke dafür!!

                      An ein paar Stellen hat es dann aber doch gehackt:

                      Ich hatte etwas Probleme bei der Installation von KNXD.
                      (Fehlermeldung: "knxd dpkg-buildpackage: error: debian/rules build gave error exit status 2")
                      Ich habe dann den Beitrag hier
                      https://forum.fhem.de/index.php/topi...html#msg445560
                      gefunden. Danach ging es dann.
                      Vielleicht hilft es ja jemanden anderes weiter.

                      Weiterhin habe ich PHP nicht mit dem Code oben installieren können. (sudo apt-get install php)

                      Ich haben dann "sudo apt-get install php5" verwendet und damit ging es dann.

                      Jetzt läuft das ganze.. zumindest mit einem Sensor. Jetzt gehts noch ans austesten und dann bin ich gespannt mit wievielen T-Sensoren das noch funktioniert.

                      Gruß
                      Christian
                      Gruß Christian

                      Homeserver 2.2
                      Anbindung an Fritzbox 80%
                      LinVDR 10% - Reelbox 0%

                      Kommentar


                        #12
                        Zitat von ChSchmelz Beitrag anzeigen
                        Ich hatte etwas Probleme bei der Installation von KNXD.
                        (Fehlermeldung: "knxd dpkg-buildpackage: error: debian/rules build gave error exit status 2")
                        Ich habe dann den Beitrag hier
                        https://forum.fhem.de/index.php/topi...html#msg445560
                        gefunden. Danach ging es dann.
                        Vielleicht hilft es ja jemanden anderes weiter.

                        Weiterhin habe ich PHP nicht mit dem Code oben installieren können. (sudo apt-get install php)

                        Ich haben dann "sudo apt-get install php5" verwendet und damit ging es dann.
                        Das ist komisch ich hab das auf nem Frischen Image gemacht also das mit KNXD

                        und ja das mit PHP war mein fehler da fehlt tatsächlich die 5 habs schon korregiert

                        Kommentar


                          #13
                          Ich muss mich hier nochmal melden, denn ich kriege keine Kommunikation auf den Bus hin.
                          Ich habe eine Siemens N148/21 noch im Keller gehabt und diese jetzt noch eingebaut.

                          der KNXD Status sieht so aus:

                          pi@raspberrypi:~ $ sudo service knxd status
                          ● knxd.service - KNX Daemon
                          Loaded: loaded (/lib/systemd/system/knxd.service; enabled)
                          Active: active (running) since Sat 2017-04-15 21:05:10 UTC; 2s ago
                          Main PID: 2260 (knxd)
                          CGroup: /system.slice/knxd.service
                          └─2260 /usr/bin/knxd -e 1.1.126 -c -u /tmp/eib -b ipt:192.168.2.229

                          in der KNXD.conf habe ich diese Parameter stehen:
                          KNXD_OPTS="-e 1.1.126 -c -u /tmp/eib -b ipt:192.168.2.229"

                          habe schon mehre andere Varianten mit -i, -D ausprobiert, dann startet KNXD aber nicht mehr.
                          wenn ich versuche mit
                          knxtool groupwrite ip:192.168.2.229 2/0/18 0
                          auf den Bus zu schreiben bleibe ich ohne Reaktion hängen und muss mit STRG-C abbrechen.

                          Hat jemand nen tipp?

                          Vielen Dank und natürlich FROHE OSTERN
                          Gruß Christian

                          Homeserver 2.2
                          Anbindung an Fritzbox 80%
                          LinVDR 10% - Reelbox 0%

                          Kommentar


                            #14
                            Sry das ich jetzt erst schreibe hatte es gelesen aber dann abends vergessen

                            Probier mal

                            KNXD_OPTS="-e 1.1.126 -E 1.1.26:1 -u /tmp/eib -b ipt:192.168.2.229"

                            ich weiß jetzt gerade nicht für was -c war ... lass das mal weg wichtig ist aber -E

                            Kommentar


                              #15
                              Danke deinem Thread habe ich gerade nachgeforscht und festgestellt, dass man mit FHEM schon heute im Prinzip sehr viele DPTs senden/bedienen kann.

                              Kommentar

                              Lädt...
                              X