====== 1wire an GPIO4 ======
===== Aufbau der Schaltung =====
==== kurze Leitungswege 3,3V ====
{{:howto:bananapi:3v.jpg?600|}}
===== Software =====
**Da mein BananaPI nur im lokalen Netzwerk erreichbar ist, führe ich alle Befehle als Root aus**
==== Vorbereitung ====
Nachdem die Hardware ordnungsgemäß mit dem Banana Pi verbunden ist kann das Auslesen der Temperatur beginnen. Dazu installieren wir zunächst ein Softwarepaket, mit welchem wir den 1-Wire Bus zugänglich machen.
Falls GIT noch nicht installiert ist:
sudo apt-get install git
sudo apt-get install libusb-1.0 libusb-dev
git clone https://github.com/linux-sunxi/sunxi-tools
cd sunxi-tools
make
Im nächsten Schritt wird die binäre Konfigurationsdatei script.bin bearbeiten. Mit dem gerade heruntergeladenem Tool laden wir aus der binären Datei eine fex-Datei.
su -
mount -o,rw /dev/mmcblk0p1 /mnt
cd /root/sunxi-tools
./bin2fex /mnt/script.bin script.fex
Die fex-Datei bearbeiten wir im Anschluss mit dem Editor nano.
sudo nano script.fex
Am Ende der Datei fügen wir folgenden Inhalt ein.
[w1_para]
gpio = 4
Anschließend können wir die Datei schließen und wandeln die bearbeitete fex-Datei zurück in die binäre Datei script.bin.
./fex2bin script.fex /mnt/script.bin
umount /mnt
Nun am Ende von **/etc/modules** folgendes eintragen:
# modules for the gpio and the DS18B20 sensor
w1-gpio
w1-therm
Damit die Einstellungen übernommen werden ist ein Neustart notwendig.
sudo reboot
Leider werden mit **lsmod** die Module __nicht__ angezeigt.
==== Auslesen des DS1820 1-wire ====
Zum Auslesen der Temperatur eines Sensors am 1-Wire Bus müssen wir den entsprechenden Sensor selektieren. Wie in der Schaltung oben gezeigt können mehrere Sensoren angeschlossen sein. Zur Identifikation besitzt jeder Temperatursensor einen vom Hersteller eindeutig vergebenen Code. Jeder angeschlossene Sensor bekommt im Verzeichnis **/sys/bus/w1/devices/** sein eigenes Unterverzeichnis. Innerhalb des Verzeichnisses eines Sensor findet man immer die Datei **w1_slave**. Mit dem //cat// Befehl können wir daraus (via Terminal) die Temperatur auslesen.
Zum Ermitteln der Identifikationsnummer und des entsprechenden Verzeichnisses wechseln wir zunächst in das Verzeichnis ///sys/bus/w1/devices/// und lassen uns dort alle drin befindlichen Ordner und Dateien anzeigen.
cd /sys/bus/w1/devices/
ls
In meinem Fall habe ich einen Sensor angeschlossen mit der Identifikationsnummer 10-000802b5ab54. Anschließend wechseln wir in das gleichnamige Verzeichnis. Dort sehen wir das die genannte Datei //w1_slave// vorhanden ist.
cd /sys/bus/w1/devices/10-000802b5ab54
ls
Mit dem cat Befehl lesen wir anschließend die Datei und damit die momentane Temperatur aus. Es ergibt sich insgesamt folgender Verlauf und die im Bild dargestellte Ausgabe.
cat /sys/bus/w1/devices/10-000802b5ab54/w1_slave
{{:howto:bananapi:ds1820_tempbpi.png?600|}}
Am Ende der Ausgabe finden wir die Angabe **t=18687**. Teilen wir diese Zahl durch 1000 ergibt sich eine aktuelle Temperatur von **18,687 °C**.
==== vzlogger.conf ====
Im Abschnitt "meters" wird folgende Konfiguration vorgenommen:
"meters": [
{
"enabled": true,
"allowskip": false,
"interval": 300, // alle 300sec (5min)
"aggtime": -1,
"aggfixedinterval": false,
"channels": [
{
"api": "volkszaehler",
"uuid": "e6be7550-1393-11e7-a417-5ff918fcd6b3", // UUID im Frontend
"identifier": "10-000802b5ab54", // ID des DS1820
"middleware": "http://localhost/middleware.php",
"aggmode": "none",
"duplicates": 0
}
],
"protocol": "w1therm"
}
]
Anschließend den vzlogger neustarten
service vzlogger restart