1-Wire Bus

Aus Hochschule Darmstadt - Fachschaft Informatik Wiki
Wechseln zu: Navigation, Suche

Inhaltsverzeichnis

[Bearbeiten] Was ist 1-Wire?

1-Wire bzw. One-Wire oder Eindraht-Bus beschreibt eine serielle Schnittstelle, die mit einer Datenader (DQ) auskommt, die sowohl als Stromversorgung als auch als Sende- und Empfangsleitung genutzt wird. Der Begriff 1-Wire ist irreführend, weil zudem noch eine Masse-Verbindung (GND) erforderlich ist. Tatsächlich werden immer zwei physikalische Leiterverbindungen benutzt (GND, DQ).

Quelle: Wikipedia

[Bearbeiten] 1-Wire in der Fachschaft

(thumbnail)
Tür Status

Die Fachschaft baut gerade eine 1-Wire-Vernetzung in D14 auf.

Folgende Anwendungen gibt es aktuell:

  • Tür-Sensor Fachschaftsraum
  • Tür-Anzeige vor dem Fachschaftsraum und online
  • Temperaturmessung Vorlesungsraum (derzeit in D14/4.04)
  • Tür Status im JSON Format: [1]

Weitere Ideen:

  • Wind und Regen-sensor zur Steuerung der Markise (Siehe auch [2])
  • Tür fürs FS-Lager (so ne Art "Alarmanlage")

Im weiteren Verlauf wäre es denkbar jeden Raum mit Tür- und Temperatur-Sensor auszustatten, wodurch sich z. B. leicht ein freier, offener sowie kühlen Raum zum Lernen zu finden ließe.

Bilder von dem Projekt gibt es online in der Gallery: Fachschaftsprojekte: 1-Wire

[Bearbeiten] Tür-Sensor und Tür-Anzeige

Problemstellung: ein Studi möchte wissen ob jemand in der Fachschaft ist oder nicht. Ein Riegelschaltkontakt im Türrahmen merkt ob die Tür zum Fachschaftsraum abgeschlossen ist oder nicht.

Den Zustand der Tür kann dann später einmal über eine Webschnittstelle oder gar Jabber-Bot abgerufen werden. Gleichzeitig zeigt eine LED direkt über der Tür an ob diese offen ist (LED leuchtet grün) oder nicht.

[Bearbeiten] Hardware

Der OneWire-Bus wird derzeit mit einem Raspberry Pi und einem LinkUSBi angesteuert.

Auf dem Raspberry läuft das OWFS OneWire File System, welches die Sensoren in Form von Dateien in einem virtuellen Dateisystems (FUSE) verwendbar macht.

Die Daten von OWFS werden dann mittels SNMP bereit gestellt und ausgewertet.

Die aktuellen Cacti Statistiken werden demnächst wieder zur Verfügung gestellt.

[Bearbeiten] Sensoren/Schalter

[Bearbeiten] Temperatur-Sensoren

  • Chip (ID: 10.*): Maxim DS18S20 (Parasite-Power Digital Thermometer)
  • Chip (ID: 28.*): Maxim DS18B20 (Programmable Resolution 1-Wire Digital Thermometer )
  • Benötigte Pins:
    • 4: GND
    • 5: Data
    • 7: 5V
Raum Dose 1-Wire Patchpanel-Port ID Status
0.04 D14/EG/01/A2 D14/1.OG/03/B/6 28.93ED14030000 n.v.
1.03 D14/1.OG/02/H17 D14/1.OG/03/B/4 28.F6CA14030000 n.v.
1.04 D14/1.OG/02/H7 D14/1.OG/03/B/5 28.D7E514030000 o.k.
1.11 D14/1.OG/04/C4 D14/1.OG/03/B/14 28.96BE14030000 n.v.
1.12 D14/1.OG/04/A4 D14/1.OG/03/B/13 28.31F414030000 n.v.
2.03 D14/2.OG/01/P1/26 D14/1.OG/03/A/3 28.0DBB14030000 n.v.
2.04 D14/1.OG/02/L25 D14/1.OG/03/B/3 28.71FF14030000 o.k.
2.10 D14/2.OG/04/A23 D14/1.OG/03/A/2 28.23F814030000 o.k.
2.11 D14/2.OG/03/16 D14/1.OG/03/B/15 28.BAD814030000 n.v.
3.03 D14/1.OG/03/A26 D14/1.OG/03/A/13 28.C7EC14030000 n.v.
3.04 D14/3.OG/01/A6 D14/1.OG/03/A/12 28.46D014030000 n.v.
3.10 D14/3.OG/02/B23 D14/1.OG/03/B/12 28.B0D214030000 n.v.
4.03 D14/1.OG/03/D32 D14/1.OG/03/A/15 28.C2C414030000 n.v.
4.04 D14/1.OG/03/D24 (70cm) D14/1.OG/03/B/2 10.CA2D72010800 n.v.
4.04 D14/1.OG/03/F20 (Decke) D14/1.OG/03/A/4 10.C89F72010800 o.k.
4.05 D14/1.OG/03/E18 D14/1.OG/03/A/14 28.C9D114030000 n.v.

[Bearbeiten] 2956E905000000 - Tür-Sensor D14/2.10

  • Chip: Maxim DS2408 (8-Channel Addressable Switch)
    • PIO 0: Schalter in der Fachschaftsraum-Tür (ähnlich zu effeff Riegelschaltkontakt Modell 878) an 10k Pull-Up Widerstand (5V)
    • PIO 1: N/C
    • PIO 2: N/C
    • PIO 3: N/C
    • PIO 4: N/C
    • PIO 5: N/C
    • PIO 6: N/C
    • PIO 7: N/C
  • Benötigte Pins:
    • 4: GND
    • 5: Data
    • 7: 5V

[Bearbeiten] 3ABE0F02000000 - Tür-LED D14/2.10

  • Patchpanel: A/5
  • Chip: Maxim DS2413 (Dual Channel Addressable Switch)
  • Benötigte Pins:
    • 2: 12V
    • 4: GND
    • 5: Data
    • 7: 5V

[Bearbeiten] Installation

[Bearbeiten] OWFS

Das OWFS wird auf Raspbian und seinen Varianten (Minibian, Raspbmc) als Paket über die Paketquellen bereitgestellt und kann wie folgt installiert werden:

aptitude install owfs

Wer es per Hand kompilieren möchte, macht es so:

aptitude install fuse-utils libfuse-dev build-essential
cd /usr/local/src/
wget http://downloads.sourceforge.net/project/owfs/owfs/2.8p6/owfs-2.8p6.tar.gz
tar -xzf owfs-2.8p6.tar.gz
cd owfs-2.8p6
./configure --disable-parport --disable-usb --disable-zero --disable-owftpd \
--disable-owhttpd --disable-owserver --disable-owtap --disable-owmon \
--disable-owcapi --disable-swig --disable-owperl --disable-owphp \
--disable-owpython --disable-owtcl --disable-owshell --disable-ownet \
--disable-ownetlib --enable-debian --enable-owfs --prefix=/usr/local
make -j5
make install
echo fuse >> /etc/modules
modprobe fuse
mkdir /mnt/owfs
adduser --system --home /mnt/owfs --no-create-home --group --shell /bin/sh \
--disabled-password --disabled-login owfs
chown owfs:owfs /mnt/owfs
usermod -a -G fuse owfs
sed -i 's/#\(user_allow_other\)/\1/g' /etc/fuse.conf
echo "@reboot owfs /usr/local/bin/owfs --allow_other --LINK=141.100.40.99:10001 /mnt/owfs" > /etc/cron.d/owfs

[Bearbeiten] SNMP

Neben der "normalen" Konfiguration von snmpd wurden die 1-Wire-Sensoren wie folgt eingebunden. Das ganze ist absichtlich keine vollständige Lösung, da wir lieber auf die snmpd-Integration von owfs warten. Dennoch nutzen wir die OID von owfs. Sollte irgendwann eine smpd-Lösung kommen, müssen wir sowieso unsere Lösung umbauen..

# Prefix: iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
# darunter: die ID des 1-Wire Devices in Decimal
# darunter: .1 als unseren Prefix solange 1-Wire owfs kein snmp nutzt
# darunter: .1 fuer PIO und .2 fuer sensed und .3 fuer temperatur
# darunter: x => PIO-Nr bzw sensed-Nr bzw Temperatur-Nr bzw 0 fuer kein Index
extend .1.3.6.1.4.1.33280.1.16.200.159.114.1.8.0.3.0 owfs /usr/local/sbin/owfs_snmpd 10C89F72010800/temperature
extend .1.3.6.1.4.1.33280.1.41.86.233.5.0.0.0.2.0 owfs /usr/local/sbin/owfs_snmpd 2956E905000000/sensed.0

Das Skript /usr/local/sbin/owfs_snmpd ist auch sehr simpel:

#!/bin/bash
VALUE=$(cat /mnt/owfs/$1)
echo $VALUE

Dem snmpd muss noch der User owfs_ro bekannt gemacht werden. Vorlage (vorher service snmpd stop ausführen!):

net-snmp-config --create-snmpv3-user -ro -a SHA -A "auth_passwd" -x AES -X "priv_passwd" owfs_ro

Passwörter sind dem password-file zu entnehmen!

In der snmpd.conf den User als read-only eintragen:

rouser owfs_ro

Da der snmpd in Version 2.4.3 auf dem Raspberry irgendwie nicht mit der fehlenden swap-partition zurecht kommt, müllt es uns alle 5s das syslog zu:

snmpd[4713]: No pgpgin line in /proc/vmstat
snmpd[4713]: No pgpgout line in /proc/vmstat
snmpd[4713]: No pswpin line in /proc/vmstat
snmpd[4713]: No pswpout line in /proc/vmstat

Abhilfe schafft hier bisher nur eine Änderung des loglevel in /etc/default/snmpd. Wir ändern folgende Zeile:

SNMPDOPTS='-Lsd -Lf /dev/null -u snmp -g snmp -I -smux -p /var/run/snmpd.pid'

in

SNMPDOPTS='-LScd -Lf /dev/null -u snmp -g snmp -I -smux -p /var/run/snmpd.pid'

Wichtig ist hierbei das S!

[Bearbeiten] Verbindung Tür-Schalter -> Tür-LED

Der Status des Riegelschalters wird für den LED Ausgang übernommen.

Ein kleines cron-Skript erledigt diese Aufgabe:

* * * * * owfs cat /mnt/owfs/29.56E905000000/sensed.0 > /mnt/owfs/3A.BE0F02000000/PIO.B

[Bearbeiten] Beteiligte Personen

Bei Interesse an dem Projekt mitzuarbeiten, oder auch nur bei allgemeinen Interesse/Fragen bitte melden.

Meine Werkzeuge