Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Pi mit DS18B20 als Temperaturfühler

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Pi mit DS18B20 als Temperaturfühler

    This topic has been deleted. Only users with topic management privileges can see it.
    • paul53
      paul53 last edited by

      @derAuge:

      1.) Auslesen der angeschlossenen Sensoren

      2.) Auslesen der Temp-Werte `
      Das npm-Modul https://www.npmjs.com/package/ds18x20 liefert die gewünschten Funtionen. Beispiele zur Handhabung in JS sind beschrieben.

      Damit das Modul installiert wird: In der JS-Instanz-Konfiguration als zusätzliches npm-Modul eintragen: ds18x20

      1 Reply Last reply Reply Quote 0
      • derAuge
        derAuge last edited by

        Hallo Pix,

        das ist natürlich auch eine Variante.

        Habe es direkt getestet. Warum er den controller dabe neu installiert hat weiß ich nicht

        root@RPi2-2:/opt/iobroker# npm install node-red-contrib-ds18b20 --save
        
        > iobroker@0.7.1 install /opt/iobroker/node_modules/iobroker
        > node lib/setup.js
        
        npm install iobroker.js-controller --production --prefix /opt/iobroker
        npm install iobroker.admin --production --prefix /opt/iobroker
        Write "./iobroker start" to start the ioBroker
        Auto-start was enabled. Write "update-rc.d -f iobroker.sh remove" to disable auto-start
        iobroker is started. Go to "http://ip-addr:8081" to open the admin UI.
        npm WARN saveError ENOENT: no such file or directory, open '/opt/iobroker/package.json'
        /opt/iobroker
        ├── iobroker@0.7.1
        ├── iobroker.javascript@2.0.4
        └─┬ node-red-contrib-ds18b20@0.0.3
          └── ds18b20@0.0.2
        
        npm WARN enoent ENOENT: no such file or directory, open '/opt/iobroker/package.json'
        npm WARN iobroker No description
        npm WARN iobroker No repository field.
        npm WARN iobroker No README data
        npm WARN iobroker No license field.
        
        

        Node-Red …

        Die Sensoren werden ausgelesen

        Werte werden im Debug angezeigt

        Objekte werden in ioBroker angelegt

        :x Werte werden nicht eingetragen

        Habe das System auch schon mal neu gestartet. Finde das Problem noch nicht
        ` > Welcome to Node-RED

        ===================

        2016-04-03 08:21:59.152 - debug: node-red.0 3 Apr 08:21:59 - [info] Node-RED version: v0.12.5

        2016-04-03 08:21:59.159 - debug: node-red.0 3 Apr 08:21:59 - [info] Node.js version: v4.4.0 `
        Die Anschaltung zur Info
        315_gpio_1wire.gif

        flow

        ! [{"id":"3e8af675.e358c2","type":"ds18b20","z":"e488d4df.07337","name":"Sensor 1","sensorid":"28-0000061edea0","timer":"1","x":279,"y":41,"wires":[["eadfb57d.cb07b","54c5608e.28587"]]},{"id":"eadfb57d.cb07b","type":"debug","z":"e488d4df.07337","name":"Temperaturen der Sensoren","active":true,"console":"false","complete":"payload","x":691,"y":616,"wires":[]},{"id":"be569204.33cb98","type":"ds18b20","z":"e488d4df.07337","name":"Sensor 2","sensorid":"28-0000061ebb60","timer":"1","x":278,"y":101,"wires":[["eadfb57d.cb07b","89c5d1ca.97bf78"]]},{"id":"1b7af4df.fcc0f3","type":"ds18b20","z":"e488d4df.07337","name":"Sensor 3","sensorid":"28-0000061fe338","timer":"1","x":276,"y":159,"wires":[["eadfb57d.cb07b","7aa8ded9.b1e41"]]},{"id":"54c5608e.28587","type":"ioBroker out","z":"e488d4df.07337","name":"Temperatur.Sensor.1","topic":"DS18B20.Sensor.1","ack":"true","autoCreate":"true","x":661,"y":35,"wires":[]},{"id":"89c5d1ca.97bf78","type":"ioBroker out","z":"e488d4df.07337","name":"Temperatur.Sensor.2","topic":"DS18B20.Sensor.2","ack":"true","autoCreate":"true","x":655,"y":95,"wires":[]},{"id":"7aa8ded9.b1e41","type":"ioBroker out","z":"e488d4df.07337","name":"Temperatur.Sensor.3","topic":"DS18B20.Sensor.3","ack":"true","autoCreate":"true","x":654,"y":153,"wires":[]},{"id":"87c63be7.99b558","type":"ds18b20","z":"e488d4df.07337","name":"Sensor 4","sensorid":"28-00000620a472","timer":"1","x":278,"y":220,"wires":[["a2bb7ed1.ec3b9"]]},{"id":"c91a25fc.a26158","type":"ds18b20","z":"e488d4df.07337","name":"Sensor 5","sensorid":"28-000006208f31","timer":"1","x":274,"y":275,"wires":[["eadfb57d.cb07b","6266ad80.64a9c4"]]},{"id":"31eabcc8.876214","type":"ds18b20","z":"e488d4df.07337","name":"Sensor 6","sensorid":"28-000006200f29","timer":"1","x":274,"y":327,"wires":[["eadfb57d.cb07b","150c4671.039e62"]]},{"id":"6f0d4ec4.275148","type":"ds18b20","z":"e488d4df.07337","name":"Sensor 7","sensorid":"28-000006200f0d","timer":"1","x":277,"y":391,"wires":[["eadfb57d.cb07b","73f39736.7595e8"]]},{"id":"ff1a23d9.eaaa38","type":"ds18b20","z":"e488d4df.07337","name":"Sensor 8","sensorid":"28-000006200f0d","timer":"1","x":270,"y":442,"wires":[["eadfb57d.cb07b","2abb8045.f36a78"]]},{"id":"2ea1f819.1da808","type":"ds18b20","z":"e488d4df.07337","name":"Sensor 9","sensorid":"28-00000620b597","timer":"1","x":269,"y":498,"wires":[["eadfb57d.cb07b","db738fd8.da842"]]},{"id":"decf3b3e.39b9c","type":"ds18b20","z":"e488d4df.07337","name":"Sensor 10","sensorid":"28-0000061fe39f","timer":"1","x":266,"y":559,"wires":[["eadfb57d.cb07b","1d6a3553.679dcb"]]},{"id":"a2bb7ed1.ec3b9","type":"ioBroker out","z":"e488d4df.07337","name":"Temperatur.Sensor.4","topic":"DS18B20.Sensor.4","ack":"true","autoCreate":"true","x":650,"y":207,"wires":[]},{"id":"6266ad80.64a9c4","type":"ioBroker out","z":"e488d4df.07337","name":"Temperatur.Sensor.5","topic":"DS18B20.Sensor.5","ack":"true","autoCreate":"true","x":645,"y":258,"wires":[]},{"id":"150c4671.039e62","type":"ioBroker out","z":"e488d4df.07337","name":"Temperatur.Sensor.6","topic":"DS18B20.Sensor.6","ack":"true","autoCreate":"true","x":646,"y":313,"wires":[]},{"id":"73f39736.7595e8","type":"ioBroker out","z":"e488d4df.07337","name":"Temperatur.Sensor.7","topic":"DS18B20.Sensor.7","ack":"true","autoCreate":"true","x":643,"y":374,"wires":[]},{"id":"2abb8045.f36a78","type":"ioBroker out","z":"e488d4df.07337","name":"Temperatur.Sensor.8","topic":"DS18B20.Sensor.8","ack":"true","autoCreate":"true","x":633,"y":433,"wires":[]},{"id":"db738fd8.da842","type":"ioBroker out","z":"e488d4df.07337","name":"Temperatur.Sensor.9","topic":"DS18B20.Sensor.9","ack":"true","autoCreate":"true","x":635,"y":483,"wires":[]},{"id":"1d6a3553.679dcb","type":"ioBroker out","z":"e488d4df.07337","name":"Temperatur.Sensor.10","topic":"ds18b20.Sensor.10","ack":"true","autoCreate":"true","x":642,"y":533,"wires":[]}]

        Nun muss ich mal weiter suchen warum die Werte nicht in ioBroker eingetragen werden

        Schönen Sonntag

        Gruß

        Jürgen

        1 Reply Last reply Reply Quote 0
        • derAuge
          derAuge last edited by

          @paul53:

          @derAuge:

          1.) Auslesen der angeschlossenen Sensoren

          2.) Auslesen der Temp-Werte `
          Das npm-Modul https://www.npmjs.com/package/ds18x20 liefert die gewünschten Funtionen. Beispiele zur Handhabung in JS sind beschrieben.

          Damit das Modul installiert wird: In der JS-Instanz-Konfiguration als zusätzliches npm-Modul eintragen: ds18x20 `

          Super

          Danke für den Hinweis

          Erste Ergebnisse habe ich bereits erziehlt

          /* 
              DS15B20  Werte abfragen
          */
          var sensor = require('ds18x20');
          var isLoaded = sensor.isDriverLoaded();
              console.log(isLoaded);
          // javascript.0 script.js.Temperatur_DS18B20: true
          
          var listOfDeviceIds = sensor.list();
              console.log(listOfDeviceIds);
          
          var temp = sensor.get('28-0000061edea0');
              console.log(temp);
          
          

          Da meine installation auf dem RPi2-2 nicht sauber ist, werde ich wohl das "Grundgerüst" neu aufsetzen müssen.

          Danach muss ich schauen wie man das genze in einer schleife laufen läst

          • mit "listOfDeviceIds" = createState(..)

          • Schleife mit = temp = sensor.get('"listOfDeviceIds");

          • Dann schreiben der werte in ioBroker

          Werde euch auf dem laufenden halten.

          Gruß

          Jürgen

          1 Reply Last reply Reply Quote 0
          • derAuge
            derAuge last edited by

            nun bin ich ein wenig weiter

            Was geht (mit JS) (mit manuellem Eintrag der SensorID)

            /* 
                DS18B20  Werte abfragen
            */
            var sensor              = require('ds18x20');
            // =============================================================================
            // Datenpunkte anlegen
            // =============================================================================
            createState('DS18B20.Sensor.1', 0, {
                name: 'Temperatur',
                desc: 'Temp des DS18B20-Sensor',
                type: 'number',
                unit: '°C'
            });
            // =============================================================================
            // Funktionen                                                         Funktionen
            // =============================================================================
            function tempWertSensor () {   
                if (sensor.isDriverLoaded() === true) {
                        var Sensor1 = sensor.get('28-0000061edea0');
                        log('Sensor 1  : ' + Sensor1 + " °C ");
                    setState('DS18B20.Sensor.1', Sensor1);                                  // Wert in Objekt schreiben
                } else  {                                                                   // Error beim Einlesen
                        log(error,'error');
                }
            }
            
            schedule('*/1 * * * *', tempWertSensor);
            
            

            Damit erhalte ich einen Temperaturwert in ioBroker

            Mann möchte jedoch mehr :shock:

            Der Versuch die Sensoren in ein Array einzulesn bereitet mir noch Kopfzerbrechen

            `var Sensoren = new Array ([listOfDeviceIds]);
                console.log("################## Sensor werden aufgelistet #####");
                console.log("Anzahl Sensoren  : " + Sensoren.length);
                console.log("Sensoren Array   : " + Sensoren);
            
                for (var i = 0 ; i < Sensoren.length; ++i) {
                    console.log("Sensor " + i + " : " + Sensoren[i]);
                }` 
            Grund ist wohl, dass die [listOfDeviceIds] zwar die angeschlossenen Sensoren auflistet jedoch mur mit "," getrennt und nicht mit "  ", abgegrenst
             ` ~~[quote]~~Sensoren list : 28-0000061edea0,28-0000061ebb60,28-0000061fe338,28-00000620a472,28-000006208f31,28-000006200f29,28-00000620a0c5,28-000006200f0d,28-00000620b597,28-0000061fe39f
             `  ` 
            Info habe ich von :
             ` ~~[quote]~~Inhalte stammen von: [http://www.web-toolbox.net/webtoolbox/j ... piel01.htm](http://www.web-toolbox.net/webtoolbox/java/arrays/array-beispiel01.htm)
            
            a) Werte als Textstrings
            
            Im ersten Verfahren stehen die Werte für die einzelnen Elemente durch ein Komma getrennt innerhalb der Klammern. Die Werte (als Text) stehen innerhalb von Anführungszeichen!
            
            var MonateKurz = new Array("Jan","Feb","Mär","Apr","Mai","Jun"); `  ` 
            
            Wenn die Sensoren in einer Array sind, dann könnte man auch Schleifen für das Anlegen der Datenpunkte sowie das auslesen der Werte erstellen. Hat jemand eine Idee?
            
             :roll: 
            
            Gruß
            
            Jürgen[/i]
            
            1 Reply Last reply Reply Quote 0
            • paul53
              paul53 last edited by

              @derAuge:

              Der Versuch die Sensoren in ein Array einzulesn bereitet mir noch Kopfzerbrechen `
              Die Liste der Sensor-ID ist bereits ein Array. Funktioniert es so nicht ?

              `...
              var list = sensor.list();
              var len = list.length;
              
              function temperaturen() {
              	var t;
              	for (var i = 0 ; i < len; ++i) {
              		t = sensor.get(list[i]);
              		setState("DS18B20.Sensor." + i, t);
              		log("Sensor " + i + " : " + t + " °C");
              	}
              }
              schedule('*/1 * * * *', temperaturen);` [/i]
              
              1 Reply Last reply Reply Quote 0
              • paul53
                paul53 last edited by

                Laut Beschreibung kann man auch alle Temperaturen in ein Array einlesen:

                `...
                var idlist = sensor.list();
                var len = idlist.length;
                
                function temperaturen() {
                	var tlist = sensor.get(idlist); // Array mit Temperaturwerten
                	for (var i = 0 ; i < len; ++i) {
                	setState("DS18B20.Sensoren." + i, tlist[i]);  // Index ab 0, Sensorname ab 0
                	log("Sensor " + i + " : " + tlist[i] + " °C");
                   }
                }
                schedule('*/1 * * * *', temperaturen);`[/i][/i]
                
                1 Reply Last reply Reply Quote 0
                • derAuge
                  derAuge last edited by

                  Danke Paul,

                  das hat mich weiter gebracht.

                  Habe es etwas umbebaut. Habe aber den Anschein das JS jedenmal nach dem Starten abschmiert

                  `// ###################### //
                  // DS18B20 Werte abfragen //
                  // ###################### //
                  var sensor = require('ds18x20');
                  console.log("################## Sensor DS18B20 werden ausgelesen #####");
                  var isLoaded = sensor.isDriverLoaded();
                      console.log("Driver geladen: " + isLoaded);
                  var ArrayOfDeviceIds = sensor.list();
                      console.log("Sensor Array  : " + ArrayOfDeviceIds);
                  var count = ArrayOfDeviceIds.length; // Anzahl der IDs (Sensoren)
                      console.log("Sensor Anzahl : " + count);
                  //var ArrayOfDeviceData = sensor.get(sensor.list());
                  //    console.log("Sensor Array  : " + ArrayOfDeviceData);
                  // =============================================================================
                  // Datenpunkte anlegen
                  // =============================================================================
                  var IDdesc ;
                  for (var i = 0 ; i < count; ++i) {
                          IDdesc = ArrayOfDeviceIds[i];
                          createState('DS18B20.Sensoren.' + i , 0, {
                              name: 'DS18B20.Sensor.' + i + '.' + IDdesc ,
                              desc: 'DS18B20-Sensor' + IDdesc,                // wo für ist der Eintrag?
                              type: 'number',
                              unit: '°C'});
                          log("Sensor " + i + " = " + IDdesc);
                     }
                  // =============================================================================
                  // Funktionen                                                         Funktionen
                  // =============================================================================
                  var t; // Variable für den Tempereatur-Wert
                  function tempWerteAuslesen () {
                      for (var i = 0 ; i < count; ++i) {
                          t = sensor.get(ArrayOfDeviceIds[i]);
                          setState("DS18B20.Sensoren." + i, t);
                      }
                  }
                  schedule('*/1 * * * *', tempWerteAuslesen);` 
                  
                  Habe ich da noch irgend einen Fehler drin?[/i][/i]
                  
                  1 Reply Last reply Reply Quote 0
                  • derAuge
                    derAuge last edited by

                    Nach Update das systems ist nun ein Fehler aufgetreten

                    Cannot find module '/opt/iobroker/node_modules/iobroker.javascript/node_modules/ds18x20'

                    Javascript/Coffeescript Script Engine 2.1.3

                    2016-05-29 11:46:07.240  - info: javascript.0 Start javascript script.js.DS18B20_Werte_abfragen
                    2016-05-29 11:46:07.263  - error: javascript.0 script.js.DS18B20_Werte_abfragen: Cannot find module '/opt/iobroker/node_modules/iobroker.javascript/node_modules/ds18x20'  at script.js.DS18B20_Werte_abfragen:4:14
                    2016-05-29 11:46:07.264  - info: javascript.0 script.js.DS18B20_Werte_abfragen: ################## Sensor DS18B20 werden ausgelesen #####
                    2016-05-29 11:46:07.273  - error: javascript.0 script.js.DS18B20_Werte_abfragen: TypeError: Cannot read property 'isDriverLoaded' of undefined at script.js.DS18B20_Werte_abfragen:6:22
                    
                    

                    Hier noch mal das Script:

                    ! // ###################### //
                    ! // DS18B20 Werte abfragen //
                    ! // ###################### //
                    ! var sensor = require('ds18x20');
                    ! console.log("################## Sensor DS18B20 werden ausgelesen #####");
                    ! var isLoaded = sensor.isDriverLoaded();
                    ! console.log("Driver geladen: " + isLoaded);
                    ! var ArrayOfDeviceIds = sensor.list();
                    ! console.log("Sensor Array : " + ArrayOfDeviceIds);
                    ! var count = ArrayOfDeviceIds.length; // Anzahl der IDs (Sensoren)
                    ! console.log("Sensor Anzahl : " + count);
                    ! //var ArrayOfDeviceData = sensor.get(sensor.list());
                    ! // console.log("Sensor Array : " + ArrayOfDeviceData);
                    ! // =============================================================================
                    ! // Datenpunkte anlegen
                    ! // =============================================================================
                    ! var IDdesc ;
                    ! for (var i = 1 ; i < count; ++i) {
                    ! IDdesc = ArrayOfDeviceIds__;
                    ! createState('DS18B20.Sensor.' + i , 0, {
                    ! name: 'DS18B20.Sensor.' + i + '.' + IDdesc ,
                    ! desc: 'DS18B20-Sensor' + IDdesc, // wo für ist der Eintrag?
                    ! type: 'number',
                    ! unit: '°C'});
                    ! log("Sensor " + i + " = " + IDdesc);
                    ! }
                    ! // =============================================================================
                    ! // Funktionen Funktionen
                    ! // =============================================================================
                    ! var t; // Variable für den Tempereatur-Wert
                    ! function tempWerteAuslesen () {
                    ! for (var i = 1 ; i < count; ++i) {
                    ! t = sensor.get(ArrayOfDeviceIds__);
                    ! setState("DS18B20.Sensor." + i, t);
                    ! }
                    ! log("Sensoren wurden ausgelesen")
                    ! }
                    ! schedule('*/1 * * * *', tempWerteAuslesen);____ ____Was ist bei den Updates passiert?

                    Gruß

                    Jürgen____

                    1 Reply Last reply Reply Quote 0
                    • P
                      pix last edited by

                      Hallo Jürgen,

                      bei dir sind sicher auch die npm-Module aus den Javascript-Adapter Einstellungen rausgeflogen. Einfach neu eintragen.

                      http://forum.iobroker.net/viewtopic.php?f=22&t=2954

                      Gruß

                      Pix

                      1 Reply Last reply Reply Quote 0
                      • derAuge
                        derAuge last edited by

                        Danke für die Rückmeldung.

                        Bei mir ist im JS-Adapter alles leer.

                        Leider weiß ich nicht mehr ob ich dort etwas eingetragen hatte. :x

                        EDIT

                        Habe den Eintrag gefunden: ds18x20

                        016-05-29 12:26:50.554  - info: javascript.0 terminating
                        2016-05-29 12:26:50.489  - info: host.RPi2-2 object change system.adapter.javascript.0
                        2016-05-29 12:26:50.516  - info: host.RPi2-2 stopInstance system.adapter.javascript.0
                        2016-05-29 12:26:50.519  - info: host.RPi2-2 stopInstance system.adapter.javascript.0 killing pid 1261
                        2016-05-29 12:26:50.637  - info: host.RPi2-2 instance system.adapter.javascript.0 terminated with code 0 (OK)
                        2016-05-29 12:26:53.083  - info: host.RPi2-2 instance system.adapter.javascript.0 started with pid 1327
                        2016-05-29 12:26:57.314  - info: javascript.0 starting. Version 2.1.3 in /opt/iobroker/node_modules/iobroker.javascript
                        2016-05-29 12:26:57.359  - info: javascript.0 npm install ds18x20 --production --prefix "/opt/iobroker/node_modules/iobroker.javascript" (System call)
                        2016-05-29 12:27:07.914  - info: javascript.0 ds18x20@0.2.0 opt/iobroker/node_modules/iobroker.javascript/node_modules/ds18x20
                        ├── sandal@1.0.1
                        ├── async@0.2.10
                        └── sync-exec@0.5.0
                        
                        2016-05-29 12:27:07.984  - info: javascript.0 requesting all states
                        2016-05-29 12:27:07.992  - info: javascript.0 requesting all objects
                        2016-05-29 12:27:09.353  - info: javascript.0 received all states
                        2016-05-29 12:27:09.844  - info: javascript.0 received all objects
                        2016-05-29 12:27:09.941  - info: javascript.0 Start javascript script.js.DS18B20_Werte_abfragen
                        2016-05-29 12:27:10.079  - info: javascript.0 script.js.DS18B20_Werte_abfragen: ################## Sensor DS18B20 werden ausgelesen #####
                        2016-05-29 12:27:10.081  - info: javascript.0 script.js.DS18B20_Werte_abfragen: Driver geladen: true
                        2016-05-29 12:27:10.086  - info: javascript.0 script.js.DS18B20_Werte_abfragen: Sensor Array  : 28-00000696af59,28-0000069797b5,28-00000697a7d3,28-000006963b1d
                        2016-05-29 12:27:10.088  - info: javascript.0 script.js.DS18B20_Werte_abfragen: Sensor Anzahl : 4
                        2016-05-29 12:27:10.095  - info: javascript.0 script.js.DS18B20_Werte_abfragen: Sensor 1 = 28-0000069797b5
                        2016-05-29 12:27:10.098  - info: javascript.0 script.js.DS18B20_Werte_abfragen: Sensor 2 = 28-00000697a7d3
                        2016-05-29 12:27:10.100  - info: javascript.0 script.js.DS18B20_Werte_abfragen: Sensor 3 = 28-000006963b1d
                        2016-05-29 12:27:10.152  - info: javascript.0 script.js.DS18B20_Werte_abfragen: registered 0 subscriptions and 1 schedule
                        
                        

                        Nun läuft es wieder

                        Gruß

                        Jürgen

                        1 Reply Last reply Reply Quote 0
                        • First post
                          Last post

                        Support us

                        ioBroker
                        Community Adapters
                        Donate

                        1.2k
                        Online

                        31.7k
                        Users

                        79.7k
                        Topics

                        1.3m
                        Posts

                        3
                        12
                        4825
                        Loading More Posts
                        • Oldest to Newest
                        • Newest to Oldest
                        • Most Votes
                        Reply
                        • Reply as topic
                        Log in to reply
                        Community
                        Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                        The ioBroker Community 2014-2023
                        logo