hardware:channels:sensors:1_wire
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende ÜberarbeitungNächste ÜberarbeitungBeide Seiten der Revision | ||
hardware:channels:sensors:1_wire [2013/10/05 13:57] – [Raspberrypi] ollir | hardware:channels:sensors:1_wire [2017/12/15 18:20] – adding ESPeasy princemichi | ||
---|---|---|---|
Zeile 4: | Zeile 4: | ||
- | ===== Raspberrypi | + | ===== RaspberryPi |
- | Den Raspberrypi | + | Den RaspberryPi |
+ | [[hardware: | ||
+ | [[hardware: | ||
[[http:// | [[http:// | ||
- | Bei mir musste zustzlich | + | Ohne VZ-Erweiterung muss unter umständen zusätzlich |
< | < | ||
# 1wire | # 1wire | ||
- | w1-gpio | + | w1-gpio |
w1-therm | w1-therm | ||
</ | </ | ||
+ | |||
+ | Eine Übersicht über die Sensoren bekommt man mit "ls / | ||
Mit dem Befehl "cat / | Mit dem Befehl "cat / | ||
- | Um das ganze dann in die Volkszählerdatenbank zu bekommen | + | |
+ | In der Datenbank des Volkszähler müssen die einzelnen Kanäle angelegt werden. Die Kanalnummer müssen dann in das script übernommen werden [[software/ | ||
+ | |||
+ | Um das ganze dann in die Volkszählerdatenbank zu bekommen | ||
< | < | ||
Zeile 26: | Zeile 33: | ||
</ | </ | ||
- | Das Abfragescript selber " | + | Das Abfragescript selber " |
< | < | ||
+ | # | ||
+ | |||
+ | # welche werte sollen geholt werden? | ||
+ | my %Daten = ( # Name => [ Adresse onewire, uuid-Volkszaehler , Faktor ] | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | ); | ||
+ | |||
+ | |||
+ | # ****************** Werte lesen | ||
+ | while (($name) = each(%Daten)){ | ||
+ | |||
+ | $addr = $Daten{$name}[0] ; | ||
+ | $fak = $Daten{$name}[2] ; | ||
+ | |||
+ | # Abfragen | ||
+ | $sensor_temp = `cat / | ||
+ | #print $sensor_temp ; | ||
+ | |||
+ | # checken | ||
+ | if ( !($sensor_temp =~ /\ YES/ ) ) { | ||
+ | delete $Daten{$name}; | ||
+ | print "CRC == FALSE\n"; | ||
+ | next; # | ||
+ | } | ||
+ | if ( ($sensor_temp =~ /85000/ ) ) { # t=85000 ist der defaultwert ohne Wandlung | ||
+ | delete $Daten{$name}; | ||
+ | print " | ||
+ | next; # | ||
+ | } | ||
+ | |||
+ | # decodieren | ||
+ | $sensor_temp =~ / | ||
+ | |||
+ | $val = (($1*$fak)-0); | ||
+ | |||
+ | if ($val == 0) { | ||
+ | delete $Daten{$name}; | ||
+ | print " | ||
+ | next; # | ||
+ | } | ||
+ | |||
+ | |||
+ | # Wert im Hash ablegen | ||
+ | $Daten{$name}[3] = $val ; | ||
+ | |||
+ | # plotten | ||
+ | print " --> $name = $val\n"; | ||
+ | |||
+ | } | ||
+ | # ****************** Wert in die Datenbank schreiben | ||
+ | if (1) { | ||
+ | |||
+ | use LWP:: | ||
+ | |||
+ | while (($name) = each(%Daten)){ | ||
+ | $uuid = $Daten{$name}[1] ; | ||
+ | $val = $Daten{$name}[3] ; | ||
+ | print $uuid . " : " . $val . " | ||
+ | |||
+ | |||
+ | my $server_endpoint = " | ||
+ | #print " | ||
+ | |||
+ | # set custom HTTP request header fields | ||
+ | my $req = HTTP:: | ||
+ | $req-> | ||
+ | $req-> | ||
+ | |||
+ | # add POST data to HTTP request body | ||
+ | $req-> | ||
+ | |||
+ | my $ua = LWP:: | ||
+ | my $resp = $ua-> | ||
+ | if ($resp-> | ||
+ | my $message = $resp-> | ||
+ | print " | ||
+ | } else { | ||
+ | print "HTTP GET error code: ", $resp-> | ||
+ | print "HTTP GET error message: ", $resp-> | ||
+ | } | ||
+ | |||
+ | } | ||
+ | } | ||
+ | |||
</ | </ | ||
+ | Das Script sollte dann manuell ausgeführt werden. Wenn alles erfolgreich war, dann kann das Script auch vom Cron ausführen lassen: | ||
+ | |||
+ | Mit crontab -e können dann im Intervall die Daten ausgelesen werden und in der Datenbank gespeichert werden. Achtung: Leerzeile am Ende nicht vergessen. Das Script wird mit der folgenden Einstellung alle 1min ausgeführt. | ||
+ | < | ||
+ | # m h dom mon dow | ||
+ | */1 * | ||
+ | </ | ||
+ | |||
+ | ===== BananaPi ===== | ||
+ | Ein HowTo für den BananaPi ist hier zu finden: [[howto: | ||
===== log_onewire.sh ===== | ===== log_onewire.sh ===== | ||
Zeile 150: | Zeile 258: | ||
CONTROL_END | CONTROL_END | ||
+ | |||
+ | ===== ESPeasy ===== | ||
+ | Es gibt auch noch weitere Möglichkeiten einen DS18B20 1-Wire Sensor auszulesen und die Messwerte an die Middleware zu übertragen, |
hardware/channels/sensors/1_wire.txt · Zuletzt geändert: 2020/01/19 15:42 von ruperts