Türkontakte über 1wire bus

  • Ich möchte ca 20 Türkontakte (Reed-Schalter) mit einem 1wire Bus an den Raspberry anbinden. Es muss nicht unbedingt ein spezieller 1wire Standard sein, aber ich möchte alle Reed-Kontakte an dieselbe Busleitung anschliessen (GND, VCC und DATA).

    Ich habe mir überlegt, das mit einer Widerstandskaskade zu machen und den Spannungswert dann am RasPi mit einem AD-Wandler zu digitalisieren. Das Analogsignal weist aber große Störungen auf und einen 20-Bit AD-Wandler gibt es kaum, um die vielen Türen aufzulösen.

    Widerstandskaskade soll heissen, alle REED-Kontakte schalten einen bestimmten Widerstand von DATA auf GND. Die Widerstaende sind so ausgelegt (1:2:4:8:16....) dass der Gesamtstrom als Spannungsabfall am Pullup-Widerstand der DATA Leitung gemessen werden kann. Das FUnktioniert auch ganz gut für bis zu 5 Kontakte. Aber mit 20?

    Hat jemand eine andere Idee, wie man das Realisiern kann? Von einer habe ich schon gehört (1wire Temperatursensoren auf den Bus aufschalten mit den REED und dann eine Busabfrage machen, welcher Sensor da ist). Gute Idee, ist mir aber zu langsam (ca. 15 Sek zum Abfragen der Tempsensoren).

    Vielleicht kann man mit Rechtecksignalgeneraturen arbeiten, von denen jede eine andere Frequenz hat?


  • Hat jemand eine andere Idee, wie man das Realisiern kann? Von einer habe ich schon gehört (1wire Temperatursensoren auf den Bus aufschalten mit den REED und dann eine Busabfrage machen, welcher Sensor da ist). Gute Idee, ist mir aber zu langsam (ca. 15 Sek zum Abfragen der Tempsensoren).

    Die Idee mit den Temp.-Sensoren ist an sich nicht schlecht (zumal die Teile ja billig sind).

    Die Busabfrage kann man (z.B. mit Python) parallel anreizen (threading)... ich mache das mit 4 Sensoren (DS18B20) und bekomme nach ca. <1,5sec Werte aller Sensoren.

    Bei 15 Sensoren sollte das ebenso gehen, ist ja schließlich ein Bus.
    Wo ich jedoch unsicher wäre ist die richtige Wahl des Widerstandes zw. Vdd und Busleitung (der wird üblicherweise an die Leitungslänge angepasst): Im Extremfall schwankt die "Last" um +-15 Sensoren und es gibt "offene" Enden am Bus ==> Reflexionen + rein kapazitive Last. Das kann das auslesen des Busses erschweren.

    Folgende Idee (Brainstorming):

    Im Schaltplan der DS..., der Switch ist der Türkontakt.
    Der Busabschluss ist permanent mit 12k bestückt (oder sogar mehr). Damit soll ein offenes Bus-Ende vermieden werden.
    Der Switch schaltet den Signalausgang auf den Bus (wenn Tür zu).

    nur so eine Idee...
    Automatisch zusammengefügt:


    Ja, guter Hinweis, aber soweit ich weiss gibt es keinen Treiber für den Raspberry Pi.

    Schau mal hier: Fragen zum 1-Wire Bauteil: DS2406

  • Hm, das war mir entgangen. Offenbar ist der DS2406 doch brauchbar. Und es lohnt ein Test. Ich werde mal einige DS2406 bestellen. Soweit ich das nun sehe, genüge der generische 1wire Kernel treiber (und man brauch gar keinen speziellen Treiber wie fuer die Tempsensoren, sofern man das Ansteuern und auslesen wie im Thred beschrieben über ein Python-Skript macht. Bzw die Daten in den roh-Dateien direkt liest/schreibt.... Stimmts?) Das waere mein Problem gelöst
    Automatisch zusammengefügt:
    Bei meiner Schaltung gibt es noch einige Kleinigkeiten zu optimieren. Angenommen ich verlege den 1-Wire Bus im ganzen Haus (drei Adern, GND, VCC, DATA), dann kommt schon eine menge Leitungslänge zusammen. Am Raspi benutze ich dann einen Pullup-Widerstand (3k9), der DATA auf 3.3 V zieht, wenn darueber parasitär gespeist wird, brauch man ggf einen kleineren Widerstand. Soweit ich verstanden habe, sollen aber nur max ca 2mA in den GPIO fliessen, also sollte der Pullup-Widerstand immer größer als 1k6 sein. Besser waere auch eine galvanische Trennung der Datenleitung vom GPIO, damit keine Induktionsspanungen den Raspi zerschiessen, z.B. bei Gewitter. Allerdings ist die GND Leitung und die mitverlegte 5V(VCC) Leitung (auch wenn sie fuer die DS2406 nicht gebracuht werden) ebenfalls direkt mit am Raspi angeschlossen. Ist eine Galvanische Trenning dann noch sinnvoll? Sollte man dann nicht lieber einfache Überspannungs-Dioden verwenden? Ich bin da noch unsicher. Ich will über denselben Bus dann auch Temperatursensoren verwenden, es werden dann so ca 30 1wire slaves angesclossen sein. Bei den Temperatur-Sensoren kann man ja VCC Leitung anschliessen und die 5V Leitung mit kleinen Kondensatoren abpuffern. Wären noch andere Vorsichtsmassnahmen angesagt? Als Bus-leitungen will ich Kupferlackdrähte verwenden, abgewickelt von einer alten Transformatorspule.
    Automatisch zusammengefügt:
    Wenn ich noch weiter drüber Nachdenke, ergeben sich noch weitere Erweiterungsmöglichkeiten fuer den Bus: Aus dem Script aus dem anderen Thread sehe ich eine Liste von Sensoren:


    Insbesondere #20 (AD-Wandler) scheint interessant. Kann man den genauso ohne speziellen Treiber auslesen? Hat jemand ein Datenblatt und eine Bezugsquelle? Leider schein es keine Feuchtesensoren zu geben. Das waere ja gut für die Badezimmer. Aber man kann sich ja mit einem ADC was basteln. Eigentlich waere damit ja alles abgedeckt, was man im Haus so als Sensor haben möchte. Und wenn die Auslesegeschwindigkeit reicht, waere es das ideale Bussystem, oder?

    Einmal editiert, zuletzt von wend (21. Dezember 2016 um 15:26)


  • Eigentlich waere damit ja alles abgedeckt, was man im Haus so als Sensor haben möchte. Und wenn die Auslesegeschwindigkeit reicht, waere es das ideale Bussystem, oder?

    Naja, ich grätsch nochmal rein... :lol:

    Der Bus ist kein "Feldbus" (==> Begriff googeln!), d.h. er ist eigentlich nicht für lange/große Leitungssysteme vorgesehen.
    Da die Datenabfrage eben auch eine gewisse Zeit dauert, wird selbst mit Threading das Abfragen vieler Sensoren vermutlich instabil (bei mir klappt es, wie schon geschrieben, mit 4 Sensoren und einer max. Leitungslänge von ca. 2m problemlos).

    Insofern ist dein Konzept, die gesamte Sensorik im Haus per einen 1wire Bus zu befrieden, m.M. nach illusorisch. :denker:

    Natürlich werden jetzt einige sagen/denken/schreiben: "Bei mir geht dies und das seit xxxx...".
    Klar, es hängt immer von den ganz speziellen Gegebenheiten ab (Anzahl der Sensoren, Leitungslängen, elektromagnetische Störeinflüsse und der Umgebung, Bauteilstreuung, Mondphasen...)

  • Ja, die Bedenken hab ich auch, aber wie soll man es anders realisieren? Hunderte von Kabeln verlegen ist ja auch nicht wirklich eine Option. Allers per Ethernet realisieren ist auch blöd, da ein CAT5/6/7 Kabel ja viel dicker ist. Un 1 GBit braucht man ja nicht.

    Also kommt alles auf einen Versuch an. Vielleicht hats ja schonmal hier jemand probiert und kann sagen ab wievielen Sensoren das nicht mehr geht.
    Funk-Sensoren finde ich nicht so gut, da ja das EM-Spektrum eine endliche Resource ist (jedenfalls bis 5GHz). Und da stört sich irgendwann dann ja auch alles. Ausserdem brauchen die mehr Strom und wenn man keine Batterien verwenden will, muss man auch Leitungen verlegen.

    Meine alternative Idee waere, die Sensordaten als NF-Töne per Kondensator auf die Datenleitung einzukoppeln und dann mit Spektralanalyse per Soundkarte und Software zu dekodieren. Jeder Sensor ein anderer Ton. Für die Schalter würde es gehen. Den digitalen 1wire BUS find ich aber einfacher.

    Nach einer FFT kann man bestimmt 100 verschiedene Töne (100 bis 10000 Hz) auseinanderhalten. Wenn man jeweils Samples von 1 Sekunde länge analysiert, hätte man alle Sensoren auf einmal, alle mit 1/sek. Bei 44kHz Samplerate von der Soundkarte könnte man eine genügend Trennschaerfe erzielen und Störungen rausfiltern. Ist aber viel Rechenpower nötig und die Elektroniken an den einzelnen Türen wäre auch aufwändiger.

  • Und wenn du auf ein hybrides Konzept umstellst(?) :
    Pro Zimmer ein RP/ESP/ARMirgendwas, an den per (relativ kurzen Kabeln) die jeweiligen Sensoren angeschlossen sind und der per Funk (WLAN/ZigBee/866kHz/433kHz) die Daten an die Hauszentrale sendet?
    Rückweg natürlich ebenso...

    Damit wäre die "Luftbelastung" geringer und man würde eine gewisse Modularität gewinnen...

  • wend: Und wie wäre es mit ATTiny's anstelle der DS-Sensoren. Jeder Tiny-Slave erhält eine Adresse. Der Master (meinestwegen ein gebitbangter Raspi-GPIO oder besser Arduino-Proxy) fragt hintereinander alle Slaves ab, indem er die abzufragende Slave-Adresse sequentiell auf der "Data"-Leitung sendet. Nach einem solchen Paket hat der angesprochene Slave eine gewisse Zeit, sein "offen/zu", zurückzusenden. Das Protokoll ließe sich frei gestalten... Tatsächlich würde ich überlegen, ob ich als Input nicht sogar einen AD-Eingang eines Tiny verwenden würde. Das hat den Charme, seine eigene Triggerschwelle definieren zu können...

  • Das mit dem Hybriden Konzept würde gehen. Wenn zu viele Sensoren Probleme machen muss der Bus auf mehrere Zweige aufgetrennt werden. Dann kann man entweder einen zweiten GPIO am selben Raspi nutzen, um einen zweiten Bus zu betreiben (mit hoffentlich Geschwingigkeitsgewinn, hoffentlich kann der Treiber das ...) oder einen zweiten Raspberry (aber das würde mehr Aufwand, mehr Strom, mehr Fehleranfaelligkeit und Wartung bedeuten). Die beiden Raspis können dann über WLAN kommunizieren (allerdings will ich das WLAN ja nachts abschalten, es kommen also noch weitere Problemchen).

    von ATTinys habe ich noch nicht gehhoert. Soweit ich das sehe, sind es kleine Microcontroller. Man muesste also eine Platine entwerfen und extra Software schreiben... Nun ja.


  • Wenn zu viele Sensoren Probleme machen muss der Bus auf mehrere Zweige aufgetrennt werden. Dann kann man entweder einen zweiten GPIO am selben Raspi nutzen, um einen zweiten Bus zu betreiben


    Ich dachte, Du kannst die Leitungen nicht auftrennen und alles hinge an ein und derselben langen 3-adrigen Leitung? Falls Du doch trennen kannst, dann nimm doch einfach Deine eingangs erwähnte Widerstandskaskade mit 3 Werten und trenne in 8 Kreise. Dann würde ein MCP3008 genügen.


    von ATTinys habe ich noch nicht gehhoert. Soweit ich das sehe, sind es kleine Microcontroller. Man muesste also eine Platine entwerfen und extra Software schreiben... Nun ja.


    Das stellt Du Dir schlimmer vor, als es zunächst ist. Schau mal >>> hier <<<. Falls Du sehr lange Leitungen hast, dann wäre eh' zu überlegen, ob 5V Pegel nicht besser wären, als 3,3V (so Du das vorgehabt haben solltest).

  • Naja, den Bus aufzutrennen ist nicht so schön, aber man kann natuerlich für jedes Stockwerk einen eigenen Bus machen, die Leitung im Treppenhaus waere dann unterbrochen, bzw. man muesste dann von jedem Stockwerk nochmal eine extra-Leitung nehmen. Nicht so schoen. Kommt drauf an, wo man die Zentrale (Raspi) hintun möchte. Ich dachte bisher halt, dass das egal ist, wenn der Bus durchverbunden ist und es nur einen gibt.

    Die GMD und VCC (5V) kann man ja immer auf jeden Fall durchverbinden. Ich nehme an, die Sensoren können mit Störungen und Spannungsabfall auf der 5V Leitung vielleicht besser umgehen, bzw, das kann man mit Kondensatoren wegpuffern.

    Tja, das kommt nun alles auf einen Versuch an. Vielleicht sind die Probleme ja gar nicht so schlimm. Offenbar bin ich aber der erste, der es so Kabelgebunden versuchen möchte.

    Noch eine Überlegung zum "zerschiessen" der GPIO Eingaenge des Raspis:
    Das kann ja nur passieren, wenn größere Ströme in den Eingang gehen (>16 mA), und das haengt von der Spannung ab, die diese Leitung evtl. auffängt (wegen der Kapazität) und vom induzierten Strom (Induktivität der Leitung). Sowohl Kapazität wie auch Indukltivität dürften aber sehr klein sein. Die Leitung wird also eher hohe Frequenzen auffangen (100kHz bis 100MHz) , und weil der GPIO EIngang ja auch nicht so super-Hochohmig ist, dürften sich eigentlich keine grossen Spannungen aufbauen, vielleicht einige mV. Das macht vielleicht nix. Jedenfalls so lange nix, wie die Sensoren ausser am BUS potentialfrei zur Umgebung gehalten werden. Über die BUS-Leitungen fliessen dann keine Potentialausgleichsströme. Ein Auftrennen des Busses kann es also doch eigentlich nur schlimmer machen.

    Einmal editiert, zuletzt von wend (22. Dezember 2016 um 10:38)

  • Na toll, wer hat denn jetzt alle DS2406 gekauft! Das kann ja nur mit diesem Thread zu tun haben. UPS hat gerade Nachschub gebracht. Auf die Unterstützung im Kernel hat Zentris ja bereits hingewiesen. Bei langen Leitungen für den 1wire-Bus hilft ein Pegelwandler auf 5V Busspannung. Der löst auch je nach Bauart das Problem mit der zu hohen Stromentnahme aus dem GPIO.

  • Klinkenstecker haben das Problem, dass es beim Ein- und Ausstecken einen Kurzschluss zwischen zwei Kontakten gibt (meistens). Da ich GND und VCC da anschliessen möchte, wäre das fatal. Sonst aber natuerlich sind die Klinken OK.

  • Wir nutzen für 1wire grundsätzlich RJ11. Stecker, Kabel, Krimpzange und auch Verteiler (y-Adapter) und Kupplungen bekommt man beinahe in jedem Baumarkt. Natürlich auch bei Reichelt, Völkner oder Conrad. Heißer Tip zum 20stel des Preises der vorher genannten: http://www.rundumdieedv-m3.de/telekommunikat…efon/index.html

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!