Forum

Einloggen | Registrieren | RSS  

hubert

15.04.2020,
21:56
 

1-wire-bus (Computertechnik)

Hallo
gibt es einen Befehl wie z.B. i2cdetect zur Verbindungsprüfung von 1-wire-bus Bausteinen?

bastelix(R)

15.04.2020,
23:55

@ hubert

1-wire-bus

» Hallo
» gibt es einen Befehl wie z.B. i2cdetect zur Verbindungsprüfung von
» 1-wire-bus Bausteinen?
Jein. 1-Wire wird als Device eingebunden und du kannst dir das dann mit ls und cat anschauen.

Hier ein paar Beispiele von meinem PI (Befehlt steht hinter dem #, der rest ist die Ausgabe)

# ls -1 /sys/bus/w1/devices/
28-000007296d4d
28-00000729fbaa
28-0000072a8bf2
w1_bus_master1

Ich habe also aktuell drei 1-Wire DS18B20 angeklemmt

# cat /sys/bus/w1/devices/*/w1_slave
26 01 4b 46 7f ff 0a 10 64 : crc=64 YES
26 01 4b 46 7f ff 0a 10 64 t=18375
fa 00 4b 46 7f ff 06 10 a4 : crc=a4 YES
fa 00 4b 46 7f ff 06 10 a4 t=15625
3a 00 4b 46 7f ff 06 10 7f : crc=7f YES
3a 00 4b 46 7f ff 06 10 7f t=3625

Und das sind die Messwerte der drei DS18B20

simi7(R)

D Südbrandenburg,
16.04.2020,
00:00
(editiert von simi7
am 16.04.2020 um 00:08)


@ bastelix

1-wire-bus

» » Hallo
» » gibt es einen Befehl wie z.B. i2cdetect zur Verbindungsprüfung von
» » 1-wire-bus Bausteinen?
» Jein. 1-Wire wird als Device eingebunden und du kannst dir das dann mit ls
» und cat anschauen.
»
» Hier ein paar Beispiele von meinem PI (Befehlt steht hinter dem #, der rest
» ist die Ausgabe)
»
» # ls -1 /sys/bus/w1/devices/
» 28-000007296d4d
» 28-00000729fbaa
» 28-0000072a8bf2
» w1_bus_master1
»
» Ich habe also aktuell drei 1-Wire DS18B20 angeklemmt
»
» # cat /sys/bus/w1/devices/*/w1_slave
» 26 01 4b 46 7f ff 0a 10 64 : crc=64 YES
» 26 01 4b 46 7f ff 0a 10 64 t=18375
» fa 00 4b 46 7f ff 06 10 a4 : crc=a4 YES
» fa 00 4b 46 7f ff 06 10 a4 t=15625
» 3a 00 4b 46 7f ff 06 10 7f : crc=7f YES
» 3a 00 4b 46 7f ff 06 10 7f t=3625
»
» Und das sind die Messwerte der drei DS18B20


Direkt mal bei mir ausprobiert:

pi@raspberrypi ~ $ ls -1 /sys/bus/w1/devices/
10-0008024146e8
10-0008024151dd
28-0417c44275ff
w1_bus_master1

pi@raspberrypi ~ $ cat /sys/bus/w1/devices/*/w1_slave
2e 00 4b 46 ff ff 0f 10 55 : crc=55 YES
2e 00 4b 46 ff ff 0f 10 55 t=22812
11 00 4b 46 ff ff 01 10 8f : crc=8f YES
11 00 4b 46 ff ff 01 10 8f t=8687
70 01 4b 46 7f ff 0c 10 40 : crc=40 YES
70 01 4b 46 7f ff 0c 10 40 t=23000

und

pi@raspberrypi ~ $ for i in $(cat /sys/devices/w1_bus_master1/w1_master_slaves); do echo ${i}: $(echo "scale=3; $(grep 't=' /sys/bus/w1/devices/w1_bus_master1/${i}/w1_slave | awk -F 't=' '{print $2}') / 1000" | bc -l) °C; done
10-0008024146e8: 22.875 °C
10-0008024151dd: 85.000 °C
28-0417c44275ff: 22.812 °C
pi@raspberrypi ~ $

$ for i in $(cat /sys/devices/w1_bus_master1/w1_master_slaves); do echo ${i}: $(echo "scale=3; $(grep 't=' /sys/bus/w1/devices/w1_bus_master1/${i}/w1_slave | awk -F 't=' '{print $2}') / 1000" | bc -l) °C; done
10-0008024146e8: 22.812 °C
10-0008024151dd: 8.687 °C
28-0417c44275ff: 22.687 °C

bastelix(R)

17.04.2020,
00:49

@ simi7

1-wire-bus

» 10-0008024146e8
Ist das ein DS18B20? Dachte die Adressen für die DS18B20 beginnen immer mit 28. So oder so, mich würde interessieren was du da am 1-Wire hängen hast damit ich meinen Code anpassen kann um die Temperatursensoren möglichst automatisch zu erkennen ;-)

» 10-0008024151dd: 85.000 °C
Weil ich das grad sehe. Meine DS18B20 hatten auch gelegentlich 85°C gemessen, was eigentlich nicht stimmen konnte. Aber der CRC war trotzdem OK. Zumindest die DS18B20 verwenden nach meinen Recherchen 85°C um einen Messfehler zu signalisieren. Der CRC sagt ja nur was über Übertragungsfehler aus. Nur so als Info :-)

simi7(R)

D Südbrandenburg,
17.04.2020,
07:35
(editiert von simi7
am 17.04.2020 um 07:43)


@ bastelix

1-wire-bus

» » 10-0008024146e8
» Ist das ein DS18B20? Dachte die Adressen für die DS18B20 beginnen immer mit
» 28. So oder so, mich würde interessieren was du da am 1-Wire hängen hast
» damit ich meinen Code anpassen kann um die Temperatursensoren möglichst
» automatisch zu erkennen ;-)
»
» » 10-0008024151dd: 85.000 °C
» Weil ich das grad sehe. Meine DS18B20 hatten auch gelegentlich 85°C
» gemessen, was eigentlich nicht stimmen konnte. Aber der CRC war trotzdem
» OK. Zumindest die DS18B20 verwenden nach meinen Recherchen 85°C um einen
» Messfehler zu signalisieren. Der CRC sagt ja nur was über
» Übertragungsfehler aus. Nur so als Info :-)
Hat mich jetzt auch interessiert, dashalb Google befragt:
"85" ist der "default" Wert des Sensors den er ausgibt wenn noch keine Messung erfolgt ist!
Meines Wissens nach muss eine Pause von min. 750mS zwischen "Start" der Messung und "Auslesen" des Messwertes liegen !

Da ich den Auslesebefehl ja mitten in ein laufendes Programm gestartet hatte kann das mit <750mS durchaus passiert sein.

Die mit der 10- sind DS18S20. Das waren meine ersten ungeschützten im TO92. Der DS18B20 ist ein später gekaufter mit wasserdichter Verpackung und 3m Kabel.




bastelix(R)

17.04.2020,
23:30

@ simi7

1-wire-bus

» Hat mich jetzt auch interessiert, dashalb Google befragt:
» "85" ist der "default" Wert des Sensors den er ausgibt wenn noch keine
» Messung erfolgt ist!
» Meines Wissens nach muss eine Pause von min. 750mS zwischen "Start" der
» Messung und "Auslesen" des Messwertes liegen !
So in der Art steht es auch in meinem Quelltext-Kommentar, wie ich heute gelesen habe :-D Hatte aber auch gelegentlich (wirklich selten) 85°C Messwerte in der Datenbank, obwohl die Sensoren nur alle fünf Minuten abgefragt werden. Da das relativ selten der Fall war hab ich halt einen Filter programmiert, der via Konfiguration die 85°C-Messwerte verwirft.

» Die mit der 10- sind DS18S20. Das waren meine ersten ungeschützten im TO92.
Ah, super. Danke! Hab meinen Code angepasst und unterstütze jetzt DS18B20, DS18S20 und DS1822 via Hot-Plug (zumindest in der Theorie, zum Testen muss ich mir noch ein paar DS18S20 und DS1822 beschaffen:-) )

Coole Auswertung! Bei mir sieht die letzte Woche (DS18B20, DH22, BMP18) so aus. Länger als eine Woche kann mein Web-Interface noch nicht auswerten, da steht noch ein TODO im Quellcode ;-)

simi7(R)

D Südbrandenburg,
18.04.2020,
09:08

@ bastelix

1-wire-bus

» Coole Auswertung! Bei mir sieht die letzte Woche (DS18B20, DH22, BMP18) so
» aus. Länger als eine Woche kann mein Web-Interface noch nicht auswerten, da
» steht noch ein TODO im Quellcode ;-)

Bei mir läuft auf dem RaspberryPi das RRDTool von Tobias Oetiker.
Dadurch wird immer ein konstanter Speicherplatz benötigt.
Die Daten werden von einem Fenster zum anderen durch Mittelwertbildung komprimiert.
Leider war (und bin) ich für die Programmierung in Python zu doof. Hat damals unser Lehrling für mich gemacht, der hatte aber auch keine Lust mehr von 2 auf 4 Sensoren zu erweitern.

simi7(R)

D Südbrandenburg,
18.04.2020,
13:01

@ simi7

1-wire-bus, wen es interessiert

» » Coole Auswertung! Bei mir sieht die letzte Woche (DS18B20, DH22, BMP18)
» so
» » aus. Länger als eine Woche kann mein Web-Interface noch nicht auswerten,
» da
» » steht noch ein TODO im Quellcode ;-)
»
» Bei mir läuft auf dem RaspberryPi das RRDTool von Tobias Oetiker.
» Dadurch wird immer ein konstanter Speicherplatz benötigt.
» Die Daten werden von einem Fenster zum anderen durch Mittelwertbildung
» komprimiert.
» Leider war (und bin) ich für die Programmierung in Python zu doof. Hat
» damals unser Lehrling für mich gemacht, der hatte aber auch keine Lust mehr
» von 2 auf 4 Sensoren zu erweitern.

Hier nochmal ein Link zu meiner Temperaturmessung:
https://www.kompf.de/weather/pionewiremini.html

bastelix(R)

18.04.2020,
22:53
(editiert von bastelix
am 18.04.2020 um 22:54)


@ simi7

1-wire-bus, wen es interessiert

» Hier nochmal ein Link zu meiner Temperaturmessung:
» https://www.kompf.de/weather/pionewiremini.html
Nice. Also bei dem Python Programm ist eigentlich nicht viel zu tun um weitere Sensoren hinzuzufügen. Einfach bei der pathes-Definition weitere Pfade zu 1-Wire-Dateien eintragen.

pathes = (
"/sys/bus/w1/devices/10-000801b5a7a6/w1_slave",
"/sys/bus/w1/devices/10-000801b5959d/w1_slave",
"/sys/bus/w1/devices/NEUE_DEV_ID_1/w1_slave",
"/sys/bus/w1/devices/NEUE_DEV_ID_2/w1_slave"
)

Und dann halt bei der Graph-Erstellung die weiteren Sensoren als weitere Argumente übergeben. So auf den ersten Blick würde ich sagen das war's auch schon um einen neuen Sensor hinzuzufügen. (Vor dem ausprobieren empfiehlt sich ein Backup der Datenbank ;-) )

Mein Setup ist etwas umständlicher, läuft aber auch (überwiegend) auf einem PI - BananaPI, der war noch von nem anderen Projekt übrig. Die Zentrale Anwendung ist in Ruby geschrieben und besteht aus verschiedenen Modulen.
* Persister-Modul: Lauscht auf dem Message-Bus (MQTT) und schreibt die ganzen Nachrichten die da aufschlagen in eine Postgresql-Datenbank (war mal eine RethinkDB, aber das NoSQL-Zeugs wurde mit steigender Datenmenge zu ressourcenhungrig)
* DS18*-Modul: Liest regelmäßig die 1-Wire-Temperatur-Sensoren aus (alle die grad am 1-Wire-Bus hängen) und schickt die plausiblen Messwerte als Nachricht in den Message-Bus
* DHT22-Modul: Liest regelmäßig einen DHT22 der am PI hängt (ist aktuell deaktiviert, da das jetzt der Co-Prozessor macht)
* Coprozessor-Modul: Liest regelmäßig den Coprozessor via I2C aus und schickt die Daten als Nachricht in den Message-Bus
* BMP180-Modul: Liest regelmäßig den BMP180 via I2C aus und schickt die Messwerte als Nachricht in den Message-Bus
* Weitere Module möglich, aber im Moment nicht geplant

Dazu kommt der Coprozessor (ein ATMega328p, mit Arduino-C/C++ programmiert) der auf 433MHz lauscht und die Datenpakete zwischenspeichert bis die via I2C vom PI abgeholt werden. Dann hängen da noch drei DHT22 (1x Büro, 1x Flur, 1x draußen) dran, die der ATMega ausliest und ebenfalls via I2C an den PI weiterleitet.

Über 433MHz kommen ein paar Messwerte (Temperatur, Luftfeuchte, Batteriezustand) von Funk-Sensoren rein (auch ATMega328p-Basiert).
Direkt auf in den Message-Bus können die ESP8266 ihre Messwerte schicken und in der Theorie könnten die auch neue Konfigurationsparameter über Message-Bus abholen, aber soweit ist das noch nicht ausgebastelt ;-)

Die GUI ist eine eigene Webanwendung (Server-Seite: Ruby, Client-Seite: JavaScript) und kann auf dem gleichen PI oder sonst wo laufen, solange der Zugriff auf die Postgresql-Datenbank möglich ist.

Edit: Das mit den aggregieren der Daten hatte ich auch schon mal im Sinn. Ich schau mal ob ich die Messwerte als avg/min/max pro Tag in eine extra Tabelle schreibe.

hubert

19.04.2020,
18:05

@ bastelix

1-wire-bus, wen es interessiert

Hallo,
herzlich Dank für alle Infos
ich werde mich nun drüber machen


» » Hier nochmal ein Link zu meiner Temperaturmessung:
» » https://www.kompf.de/weather/pionewiremini.html
» Nice. Also bei dem Python Programm ist eigentlich nicht viel zu tun um
» weitere Sensoren hinzuzufügen. Einfach bei der pathes-Definition weitere
» Pfade zu 1-Wire-Dateien eintragen.
»
» pathes = (
» "/sys/bus/w1/devices/10-000801b5a7a6/w1_slave",
» "/sys/bus/w1/devices/10-000801b5959d/w1_slave",
» "/sys/bus/w1/devices/NEUE_DEV_ID_1/w1_slave",
» "/sys/bus/w1/devices/NEUE_DEV_ID_2/w1_slave"
» )
»
» Und dann halt bei der Graph-Erstellung die weiteren Sensoren als weitere
» Argumente übergeben. So auf den ersten Blick würde ich sagen das war's auch
» schon um einen neuen Sensor hinzuzufügen. (Vor dem ausprobieren empfiehlt
» sich ein Backup der Datenbank ;-) )
»
» Mein Setup ist etwas umständlicher, läuft aber auch (überwiegend) auf einem
» PI - BananaPI, der war noch von nem anderen Projekt übrig. Die Zentrale
» Anwendung ist in Ruby geschrieben und besteht aus verschiedenen Modulen.
» * Persister-Modul: Lauscht auf dem Message-Bus (MQTT) und schreibt die
» ganzen Nachrichten die da aufschlagen in eine Postgresql-Datenbank (war mal
» eine RethinkDB, aber das NoSQL-Zeugs wurde mit steigender Datenmenge zu
» ressourcenhungrig)
» * DS18*-Modul: Liest regelmäßig die 1-Wire-Temperatur-Sensoren aus (alle
» die grad am 1-Wire-Bus hängen) und schickt die plausiblen Messwerte als
» Nachricht in den Message-Bus
» * DHT22-Modul: Liest regelmäßig einen DHT22 der am PI hängt (ist aktuell
» deaktiviert, da das jetzt der Co-Prozessor macht)
» * Coprozessor-Modul: Liest regelmäßig den Coprozessor via I2C aus und
» schickt die Daten als Nachricht in den Message-Bus
» * BMP180-Modul: Liest regelmäßig den BMP180 via I2C aus und schickt die
» Messwerte als Nachricht in den Message-Bus
» * Weitere Module möglich, aber im Moment nicht geplant
»
» Dazu kommt der Coprozessor (ein ATMega328p, mit Arduino-C/C++ programmiert)
» der auf 433MHz lauscht und die Datenpakete zwischenspeichert bis die via
» I2C vom PI abgeholt werden. Dann hängen da noch drei DHT22 (1x Büro, 1x
» Flur, 1x draußen) dran, die der ATMega ausliest und ebenfalls via I2C an
» den PI weiterleitet.
»
» Über 433MHz kommen ein paar Messwerte (Temperatur, Luftfeuchte,
» Batteriezustand) von Funk-Sensoren rein (auch ATMega328p-Basiert).
» Direkt auf in den Message-Bus können die ESP8266 ihre Messwerte schicken
» und in der Theorie könnten die auch neue Konfigurationsparameter über
» Message-Bus abholen, aber soweit ist das noch nicht ausgebastelt ;-)
»
» Die GUI ist eine eigene Webanwendung (Server-Seite: Ruby, Client-Seite:
» JavaScript) und kann auf dem gleichen PI oder sonst wo laufen, solange der
» Zugriff auf die Postgresql-Datenbank möglich ist.
»
» Edit: Das mit den aggregieren der Daten hatte ich auch schon mal im Sinn.
» Ich schau mal ob ich die Messwerte als avg/min/max pro Tag in eine extra
» Tabelle schreibe.