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

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] Auswertung der Daten

Um die Sensoren, etc. Ansteuern zu können wird ein LinkHubE verwendet. Er ermöglicht den Zugriff auf die Daten mittels Ethernet über ein einfaches zeichenbasiertes Protokoll.

Der LinkHubE wird wiederum von OWFS (1-Wire File System) gesteuert, 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 gibt es hier.

[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
0.04 D14/EG/01/A2 D14/1.OG/03/B/6 28.93ED14030000
1.03 D14/1.OG/02/H17 D14/1.OG/03/B/4 28.F6CA14030000
1.04 D14/1.OG/02/H7 D14/1.OG/03/B/5 28.D7E514030000
1.11 D14/1.OG/04/C4 D14/1.OG/03/B/14 28.96BE14030000
1.12 D14/1.OG/04/A4 D14/1.OG/03/B/13 28.31F414030000
2.03 D14/2.OG/01/P1/26 D14/1.OG/03/A/3 28.0DBB14030000
2.04 D14/1.OG/02/L25 D14/1.OG/03/B/3 28.71FF14030000
2.10 D14/2.OG/04/A23 D14/1.OG/03/A/2 28.23F814030000
2.11 D14/2.OG/03/16 D14/1.OG/03/B/15 28.BAD814030000
3.03 D14/1.OG/03/A26 D14/1.OG/03/A/13 28.C7EC14030000
3.04 D14/3.OG/01/A6 D14/1.OG/03/A/12 28.46D014030000
3.10 D14/3.OG/02/B23 D14/1.OG/03/B/12 28.B0D214030000
4.03 D14/1.OG/03/D32 D14/1.OG/03/A/15 28.C2C414030000
4.04 D14/1.OG/03/D24 (70cm) D14/1.OG/03/B/2 10.CA2D72010800
4.04 D14/1.OG/03/F20 (Decke) D14/1.OG/03/A/4 10.C89F72010800
4.05 D14/1.OG/03/E18 D14/1.OG/03/A/14 28.C9D114030000

[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

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

[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.

Persönliche Werkzeuge