NEWS
Pi mit DS18B20 als Temperaturfühler
-
Hallo zusammen,
suche Unterstützung zur Erstellung des JS-Scripts zum auslesen von Werten des Temp-Sensors.
Was ist bis jetzt passiert:
…
werde es später ergänzen
....
Ein Python-Script liest die Sensoren aus und gibt die Temperatur aus
#!/usr/bin/env python import os dev_dir = '/sys/bus/w1/devices/' devices = os.listdir(dev_dir) devices.remove('w1_bus_master1') for dev in devices: f = open(dev_dir + dev + '/w1_slave', 'r') content = f.readlines() temp_start = content[1].find('t=') print content[1][temp_start + 2:] + dev f.close()Hintergrund
mit "ls -Ll /sys/bus/w1/devices/"
werden die Sensoren ermittelt
drwxr-xr-x 2 root root 0 Apr 2 14:29 28-0000061edea0 drwxr-xr-x 2 root root 0 Apr 2 13:51 28-000006200f0d drwxr-xr-x 2 root root 0 Apr 2 13:51 28-00000620a472 drwxr-xr-x 5 root root 0 Apr 2 13:51 w1_bus_master1Pro Sensor gibt es ein Verzeichniss mit der Datei "w1_slave" mit dem Temperatur-Wert
pi@RPi2-2:~ $ cat /sys/bus/w1/devices/28-0000061edea0/w1_slave
61 01 4b 46 7f ff 0f 10 02 : crc=02 YES
61 01 4b 46 7f ff 0f 10 02 t=22062
Erste Zeile = CRC ist OK "YES"
Zweite Zeile = Temperatur = 22,062 °C
Erstes Ziel:
1.) Auslesen der angeschlossenen Sensoren
2.) Auslesen der Temp-Werte
Ausgabe im LOG
Später könnt ich mir vorstellen die Werte in ioBroker zu speichen
Gruß
Jürgen
-
Hallo Jürgen,
Schon gesehen?
https://www.npmjs.com/package/node-red-contrib-ds18b20
Gruß
Pix
Gesendet mit Tapatalk
-
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
-
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

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.) 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
-
-
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] -
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] -
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] -
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] -
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:22Hier 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____
-
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
-
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 scheduleNun läuft es wieder
Gruß
Jürgen
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden 💗
Registrieren Anmelden