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_master1
Pro 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: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____
-
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 schedule
Nun läuft es wieder
Gruß
Jürgen