Onewire (Deutsch)
Onewire | |
---|---|
Status | Stable
|
menuconfig | I/O->Onewire support |
Pinning | yes |
Ecmd | yes |
Control6 | yes |
Depends on | ECMD HTTPD (optional) SNMP (optional) |
Requires | - |
Code | https://github.com/ethersex/ethersex/tree/master/hardware/onewire |
Ethersex kann 1-wire Temperatursensoren mit ECMD auflisten und abfragen. Es wird eine reine Softwareimplementierung des Protokolls benutzt, was keine weiteren Hardware erfordert, als die Temperatursensoren selbst.
Contents
Pinning
In der Standardkonfiguration liegt der Datapin des Buses auf PD6 (kann z.B. in der pinning/hardware/netio.m4 oder pinning/hardware/etherrape.m4 geändert werden). Die Definition der Pins erfolgt mit:
ONEWIRE_PORT_RANGE(PXn, PXm)
wobei PXn und PNm Pins auf PORTX sind.
Jeder Pin zwischen und einschließlich PXn und PXm bildet einen eingenständigen Onewire Bus. Du kannst bis zu acht Busse auf einem PORT definieren (alle Busse müssen auf dem selben PORT liegen!)
Beispiele
Wenn Du nur einen einzigen Bus benötigst, definiere den Bereich wie folgt:
PORTD: PIN2
ONEWIRE_PORT_RANGE(PD2, PD2)
Für drei Busse würde das ganze etwa so aussehen:
PORTD: PIN2, PIN3, PIN4
ONEWIRE_PORT_RANGE(PD2, PD4)
Polling Modus
Benennung von Sensoren
Unterstützte Hardware
Folgende 1-wire Hardware wird momentan durch Ethersex unterstützt:
- DS1820 (Temperatursensor)
- DS18B20 (Temperatursensor)
- DS1822 (Temperatursensor)
- DS2502 (EEPROM)
- DS2450 (4 Kanal ADC)
Onewire Befehle
unter Linux als erstes netcat starten (hierbei natürlich die IP ggf modifizieren):
netcat 192.168.0.15 2701
danach am prompt:
1w list
Gibt eine Liste mit Hexcodes aller angeschlossenen und erkannten Onewire(tm) Sensoren aus. Bei aktiviertem Naming-Support wird (per TAB getrennt) zusätzlich der Name ausgegeben. Außerdem kann mit ECMD 1w list with values (ONEWIRE_ECMD_LIST_VALUE_SUPPORT) der aktuelle Temperaturwert mit ausgegeben werden. Dies erspart zusätzliche 1w get Aufrufe, setzt allerding Polling-Support vorraus.
1w convert <hexcode>
Veranlasst eine Temperaturmessung des addressierten Sensors, oder, wenn das Argument <hexcode> weggelassen wird, aller angeschlossener Sensoren. Im Polling-Modus wird dieses Kommando ignoriert.
1w get <hexcode>
Gibt die gemessene Temperatur eines Sensors aus.
Einbindung in die HTTPD-Weboberfläche
Unter httpd/embed/ow.ht.m4, bzw httpd/embed/Xow.ht.m4 liegt eine Weboberflaeche, die alle Sensoren erkennt und ihre aktuelle Temperatur regelmässig per Ajax abfragt und anzeigt. Im Falle von Xow.ht.m4 wird sogar Graph der Temperatur mittels SVG gemalt. Um die Dateien einzubinden, muss man einfach bei aktiviertem Onewiresupport den Webserver und das Datei Inlining aktivieren.
Die Dateien können dann unter ow.ht bzw. unter Xow.ht angezeigt werden. Das Beispiel zeigt die SVG-Version mit Naming-Support:
Anschluss AVR-NET-IO
Für das Pollin AVR-NET-IO Board können die Sensoren DS18S20+ ,
normal Betrieb
parasitären Modus
Anmerkung: Wenn man beim Net-IO nicht alle Analogeingänge benötigt, lässt sich der 1-Wire-Bus auch an der Schraubklemme ADC1 ganz gut aufschalten. Vorteil ist, dass man gleich alle passenden Spannungen (GND, +5V) an den beiden nebenliegenden Schraubklemmen hat. Das Pinning muss dann entspechend in der kann in der Datei pinning/hardware/netio.m4 von PD6 auf PA4 geändert werden. Vorteil dieser Konfiguration ist, dass man den DB-25-Verbinder zum Anschluss der Relaisplatine K8IO von Pollin frei hat und den EXT Steckverbinder zum Anschluss eines LCD über ein 4bit-Interface nutzen kann, ohne die Erweiterungsplatine von Pollin zu benötigen.
Pinbelegung:
Anschluss Etherrape
Die Schaltung je nach parasitärem oder normalem Betriebsmodus kann aus der NetIO Skizze übernommen werden. Data liegt auf PORTD an Pin 7:
PORTD +---+ |x x| |x X| <- Pin 7 |x x |x x| |x x| +---+
Direkt neben PORTD befinden sich 2 Pins mit GND und 5V als Beschriftung. GND kann als GND und 5V als Vcc genutzt werden.
Einbindung in Control6
Die Sensoren können mit ONEWIRE_GET einfach abgefragt werden. Die Funktion führt automatisch ein convert aus, es sind also keine zwei Schritte erforderlich wie bei dem Zugriff über ECMD. Die Rückgabe erfolgt (analog der Funktion KTY_GET) in Centigrad, also Temperatur * 10. Hier vielleicht ein kleines Beispiel, das die Daten per SYSLOG ausgibt sobald sich die Temperatur um mehr als ein Grad zur letzten Messung verändert hat.
int16_t Temperatur; int16_t Temperatur_alt; CONTROL_START THREAD(read_temp) Temperatur = ONEWIRE_GET(10d85594010800eb); ON abs(Temperatur-Temperatur_alt)>10 DO div_t res = div(Temperatur,10); SYSLOG("temperature changed %d.%d",res.quot,res.rem) Temperatur_alt = Temperatur; END WAIT(15); THREAD_END(read_temp) ON STARTUP DO Temperatur = Temperatur_alt = 0; THREAD_START(read_temp); END CONTROL_END
Abfrage per SNMP
Falls Polling-Support aktiviert wurde können die Sensorwerte per SNMP abgefragt werden. Mit Naming-Support stehen auch die Namen per SNMP zur Verfügung und die Index-Nummern sind fix auf die Position in der Namenstabelle festgelegt. Dies ist sehr hilfreich, um bestimmte Sensoren über den SNMP-Index anzusprechen.
Es gibt folgende OIDs:
- .1.3.6.1.4.1.2021.13.23.3.1.<idx> : ROM-Code des Sensors
- .1.3.6.1.4.1.2021.13.23.3.2.<idx> : Sensor-Name (nur mit Naming-Support)
- .1.3.6.1.4.1.2021.13.23.3.3.<idx> : Temperaturwert in Centigrad
- .1.3.6.1.4.1.2021.13.23.3.4.<idx> : 0 = Sensor nicht vorhanden, 1 = Sensor vorhanden
Hier ein Beispiel:
# snmpwalk -Osn -c public -v 1 192.168.255.90 1.3.6.1.4.1.2021.13.23.3 .1.3.6.1.4.1.2021.13.23.3.1.0 = STRING: "1080cff6010800f9" .1.3.6.1.4.1.2021.13.23.3.1.1 = STRING: "10c8cff60108002d" .1.3.6.1.4.1.2021.13.23.3.1.2 = STRING: "1029f6dc0108002f" .1.3.6.1.4.1.2021.13.23.3.1.3 = STRING: "10f2d0f60108001c" .1.3.6.1.4.1.2021.13.23.3.1.4 = STRING: "105a17f70108001d" .1.3.6.1.4.1.2021.13.23.3.1.5 = STRING: "10b8d8f601080098" .1.3.6.1.4.1.2021.13.23.3.1.6 = STRING: "104dedf601080057" .1.3.6.1.4.1.2021.13.23.3.1.7 = STRING: "10011af701080027" .1.3.6.1.4.1.2021.13.23.3.1.8 = STRING: "0000000000000000" .1.3.6.1.4.1.2021.13.23.3.1.9 = STRING: "0000000000000000" .1.3.6.1.4.1.2021.13.23.3.2.0 = STRING: "kessel" .1.3.6.1.4.1.2021.13.23.3.2.1 = STRING: "warmwasser" .1.3.6.1.4.1.2021.13.23.3.2.2 = STRING: "aussen" .1.3.6.1.4.1.2021.13.23.3.2.3 = STRING: "speicher" .1.3.6.1.4.1.2021.13.23.3.2.4 = STRING: "heizung vl" .1.3.6.1.4.1.2021.13.23.3.2.5 = STRING: "heizung rl" .1.3.6.1.4.1.2021.13.23.3.2.6 = STRING: "boiler vl" .1.3.6.1.4.1.2021.13.23.3.2.7 = STRING: "boiler rl" .1.3.6.1.4.1.2021.13.23.3.2.8 = "" .1.3.6.1.4.1.2021.13.23.3.2.9 = "" .1.3.6.1.4.1.2021.13.23.3.3.0 = INTEGER: 334 .1.3.6.1.4.1.2021.13.23.3.3.1 = INTEGER: 467 .1.3.6.1.4.1.2021.13.23.3.3.2 = INTEGER: 127 .1.3.6.1.4.1.2021.13.23.3.3.3 = INTEGER: 185 .1.3.6.1.4.1.2021.13.23.3.3.4 = INTEGER: 318 .1.3.6.1.4.1.2021.13.23.3.3.5 = INTEGER: 269 .1.3.6.1.4.1.2021.13.23.3.3.6 = INTEGER: 366 .1.3.6.1.4.1.2021.13.23.3.3.7 = INTEGER: 291 .1.3.6.1.4.1.2021.13.23.3.3.8 = INTEGER: 0 .1.3.6.1.4.1.2021.13.23.3.3.9 = INTEGER: 0 .1.3.6.1.4.1.2021.13.23.3.4.0 = INTEGER: 1 .1.3.6.1.4.1.2021.13.23.3.4.1 = INTEGER: 1 .1.3.6.1.4.1.2021.13.23.3.4.2 = INTEGER: 1 .1.3.6.1.4.1.2021.13.23.3.4.3 = INTEGER: 1 .1.3.6.1.4.1.2021.13.23.3.4.4 = INTEGER: 1 .1.3.6.1.4.1.2021.13.23.3.4.5 = INTEGER: 1 .1.3.6.1.4.1.2021.13.23.3.4.6 = INTEGER: 1 .1.3.6.1.4.1.2021.13.23.3.4.7 = INTEGER: 1 .1.3.6.1.4.1.2021.13.23.3.4.8 = INTEGER: 0 .1.3.6.1.4.1.2021.13.23.3.4.9 = INTEGER: 0
Codebeispiele
Bezugsquellen
- Laut Michael Schultz (k1w1) hat er immer DS1820 auf Lager und kann sie sehr günstig weiterverkaufen. Auch Mindermengen. Mail: ethersex [AT] keyb [DOT] de