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.
    • P
      pix last edited by

      Hallo Jürgen,

      Schon gesehen?

      https://www.npmjs.com/package/node-red-contrib-ds18b20

      Gruß

      Pix

      Gesendet mit Tapatalk

      1 Reply Last reply Reply Quote 0
      • 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

                          769
                          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