Mehrere Reed-Kontakte direkt an GPIO anschliessen -> Fensterüberwachung

Begonnen von f5b7, 14 August 2018, 21:56:12

Vorheriges Thema - Nächstes Thema

f5b7

In unserem Haus haben die Fenster bereits Reedkontakte verbaut, welche aber noch nirgends angeschlossen sind. Das will ich ändern, ich will prüfen können, ob und wo ein Fenster offen ist (oder das Kabel defekt/sabotiert. Bei der Suche nach einer einfachen Möglichkeit bin ich auf FHEM/Raspberry Pi und daher auf dieses Forum gestossen.

Basierend auf einem Beitrag hier im Forum (https://forum.fhem.de/index.php/topic,20506) schwebt mir ein Setup gemäss Skizze vor und ich würde mich über Kommentare, konstruktive Kritik etc. dazu freuen. Zudem habe ich noch ein paar konkrete Fragen.

Bemerkungen zur Skizze

PUR: Pull-up-Widerstand (intern, also via Software aktiviert)
a1-a2: Schliesser (Fenster zu = Magnet liegt an = Kontakt geschlossen)
b1-b2: Sabotageleitung

Blaue Linien: Durch Software aktivierte Verbindungen
Orange Linien: Echte Drähte (Litzen bzw. blank), einige Meter lang (< 50 m)*
Schwarze Linien: Vorgegeben (Roto MVS-Kontaktelement, VdS B)

*) Ein Teil davon ist vorgegeben: Vom Fenster bis zur Deckendose verläuft jeweils ein Kabel mit den vier weissen Drähten a1/b1/b2/a2 (Litzen, evtl. twisted, da bin ich nicht sicher). Dieses würde ich mit Twisted-Pair-Verlegekabel bis ins UG zum Raspberry verlängern. Das heisst da könnte ich jeweils zwei Fensterkontakte über ein solches (8-adriges) TP-Kabel verlängern.

Verständnisfragen zur Elektrotechnik

Bei geschlossenem Fenster fliesst ein (durch den Pull-up-Widerstand begrenzter) Strom von 3.3V/10kOhm = 0.33mA, der GPIO-Pin hat dann ein Potenzial von 0V, korrekt?
Bei offenem Fenster (oder irgendeine Leitung defekt/sabotiert) ist der Stromkreis offen und es fliesst entsprechend kein Strom. Was für ein Potenzial hat dann der GPIO-Pin? 3.3V? Oder etwas weniger, aber sicher > 0 V (darum heisst es "Pull-up")?

Praxisfragen

Wie verbinde ich ganz konkret (mit welcher Hardware) am besten die Drähte mit den Pins auf dem Raspberry resp. mit Jumperkabeln, welche ich dort als Verlängerung anbringen könnte? Gibt es Reihenklemmen o.ä., welche sowohl Jumper-Kabel als auch Volldraht/Litzen aufnehmen? Oder bringt man Drähte mit gewissem Querschnitt direkt in "Jumperkabel-Buchsen" (F)?

Das Ganze würde ich dann noch für Fenster C bis N analog umsetzen, also total 14 Reed-Kontakte
=> Benötigt 14 GPIO-Pins, soweit ich erfahren konnte, können PUR für alle GPIOs zugeschaltet werden
=> Alle Drähte die auf GND müssen, würde ich dann wohl zuerst mit Klemmen zusammenführen und dann mit einem einzigen GND-Pin verbinden

Was mir noch etwas Sorgen macht ist der Spannungsabfall über die grossen Kabellängen.

Material

Bereits vorhanden:

  • TP-Verlegekabel (Cat.7 S/FTP, AWG 26, blank)
  • Verbindungsklemmen (WAGO 221) für die Verlängerung der vieradrigen (Litze) Kabel mit dem achtadrigen (Volldraht) TP-Kabel
Einkaufsliste:

  • Raspberry Pi Zero WH, evtl. mit Gehäuse
  • Evtl. Jumperkabel, je nach Lösung nächster Punkt
  • (?) etwas, um die Jumper-Steckwelt mit der "Lampendraht"-Welt zu vereinen

Tom Major

zu den Verständnisfragen:
Das ist so korrekt. Bei geschlossenem Kontakt ist der RPi input auf 0 und der pull-up spielt keine Rolle (solange der Schalter entsprechend niederohming ist).
Im offenen Zustand hat der input praktisch Betriebsspannung, also 3,3V / High-Pegel, da kein nennenswerter input Strom fließt.

Probleme sehe ich eher in der Robustheit des Konzepts bei langen Leitungslängen. Die Prozessorpins werden dann ggf. über viele Meter ungeschützt verlängert. So was macht man "normalerweise" nicht, sondern setzt einen entsprechend robusten Bus, Transceiver etc. ein, z.B. CAN, 1-Wire, RS485 um mal einige zu nennen. Nachteil ist natürlich erhöhter Schaltungsaufwand.
Das Konzept mag so fürs erste funktionieren, aber es wird Störungen auf den langen Leitungen einfangen oder auch Überspannungen, z.B. bei nahem Gewitter, und diese direkt auf den Prozessor leiten. Das ist nicht gut..
Früher: FHEM 5.x
Jetzt: RaspberryMatic / ioBroker

f5b7

Vielen Dank für deine Antwort, Tom Major.

Zitat von: Tom Major am 15 August 2018, 00:55:38
Probleme sehe ich eher in der Robustheit des Konzepts bei langen Leitungslängen. Die Prozessorpins werden dann ggf. über viele Meter ungeschützt verlängert. So was macht man "normalerweise" nicht, sondern setzt einen entsprechend robusten Bus, Transceiver etc. ein, z.B. CAN, 1-Wire, RS485 um mal einige zu nennen. Nachteil ist natürlich erhöhter Schaltungsaufwand.
Das Konzept mag so fürs erste funktionieren, aber es wird Störungen auf den langen Leitungen einfangen oder auch Überspannungen, z.B. bei nahem Gewitter, und diese direkt auf den Prozessor leiten. Das ist nicht gut..

Die Variante mit Bus klingt schon eher aufwändig und nach viel Zusatzhardware. Da würde ich dann vielleicht doch eher gleich zu sowas wie einem Loxone Miniserver tendieren. Oder dem Input-Server, der klingt auch interessant und der Bausatz koste 107 €. Die Eingänge sind dort immerhin galvanisch getrennt von der Steuerung.

Durch die Verdrillung der Adern hätte ich mir erhofft, dass Störungen vermieden werden. Und diese hätte ich dann wohl auch mit anderen Lösungen, ausser ich verlängere die Drähte nicht bis ins UG, sondern mache möglichst früh die "Überleitung" zu einem Bus. Was dann aber wieder umso mehr Hardware bedeuten würde, die ich dann auch noch irgendwie in die Deckendose reinstopfen muss.

Bei Überspannung durch Gewitter ist dann der Raspberry wohl futsch, aber wenn das der Worst-Case ist, kann ich mit dem Risiko leben.

Hat jemand einen Vorschlag für die Befestigung der Cat-Volldrähte am Raspberry?
Vielleicht sowas hier:
https://www.adafruit.com/product/2711
?

Das wäre dann zwar nicht kompatibel mit dem Pi Zero, aber habe mir eh noch überlegt, dass ich lieber einen Pi mit RJ45-Anschluss nehme, da ich den wohl eh gleich ziemlich in der Nähe des Switch befestigen werde. Hätte eigentlich auch noch einen alten Raspberry Pi Model B, aber der ist dann auch nicht kompatibel mit den o.g. Erweiterungen, da er nur 26 Pins hat :-\

Und bestünde dann evtl. sogar die Gefahr, dass bei einem Blitzeinschlag über die Ethernet-Verbindung noch mehr kaputt geht als nur der Raspberry (nämlich so ziemlich alles im Netzwerk, ausser was über WiFi läuft)? :o

Dann vielleicht doch lieber den Zero WH und ganz simpel mit WAGO-Klemmen und solchen Jumperkabeln arbeiten?
https://www.amazon.de/dp/B00MWMEIF2/

Zur Not dann abschneiden/abisolieren, falls die Pins zu wenig lang für die WAGO-Klemmen sind...

f5b7

Wäre evtl. der Einsatz eines Arduino sinnvoll? Dann wären die Fensterkontakte dort direkt drauf, statt direkt auf den Raspberry-Prozessor-PINs.

Z.B. der Micro hätte glaube ich genug Inputs:
https://www.adafruit.com/product/1086

USB ist ja auch ein Bus :-) Ob robust weiss ich zwar nicht, aber der Due hätte sonst auch noch eine CAN-Schnittstelle und mehr als genug Inputs:
https://www.heise.de/make/artikel/Angetestet-Arduino-Due-1756123.html


JensS

Hallo f5b7,

ich habe seit vielen Jahren einen Aruino Mega (USB) mit firmata im Einsatz.
Anfängliche Fehlalarme duch die benannten Störeinflüsse und durch das Prellen beim Schalten konnte ich mit einer Debouncer-Schaltung eliminieren.

Gruß Jens
Debian auf APU2C4, HM-CFG-USB2, SIGNALduino, HM-ES-PMSw1-Pl, TFA 30.3121, TFA 30.3125, ITS-150, PIR-5000, configurable Firmata USB & LAN, 1-wire: DS-18B20, DS-18S20, DS-2408, DS-2413, diverse I2C-Komponenten, zigbee2mqtt, ESPEasy etc.

hexenmeister

Ich würde so langen Leitungen unter keinen Umständen direkt an die sensible Elektronik anschliessen. Gedrillt, geschirmt oder nicht, sie stellen eine nicht zu vernachlässigende Antenne dar. Ich würde auch weniger einen Blitz fürchten, sondern eher Störeinflüsse aus Deinem eigenen 230V-Netz. Dann schaltest Du dein Offen ein und schon können bei ungünstigen Kabelverläufen an Deinen Signalleitungen Spannungsspitzen im zweistelligen Voltbereich auftreten. Führt zu Störungen, oder auch zu ausgebrannten Ports. Einfachste Abhilfe - Trennung mit Hilfe von Optokoppler und einem separaten Netzteil dafür (12V, 24V). Supressordioden würden auch nicht schaden, aber da kann man noch unendlich weiter 'optimieren'.

Schäden an dem ganzen Netzwerk sind eher unwahrscheinlich - dort sind natürlich bereits entsprechende Vorkehrungen getroffen. Da müsste schon ein 'richtiger' Blitz sein.
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

Tom Major

Zitat von: f5b7 am 19 August 2018, 20:41:21
Wäre evtl. der Einsatz eines Arduino sinnvoll? Dann wären die Fensterkontakte dort direkt drauf, statt direkt auf den Raspberry-Prozessor-PINs.

Z.B. der Micro hätte glaube ich genug Inputs:
https://www.adafruit.com/product/1086

USB ist ja auch ein Bus :-) Ob robust weiss ich zwar nicht, aber der Due hätte sonst auch noch eine CAN-Schnittstelle und mehr als genug Inputs:
https://www.heise.de/make/artikel/Angetestet-Arduino-Due-1756123.html

Arduino mit Firmata wäre z.B. eine Lösung, da hättest Du genug Ports und einen Bus dazwischen, ich habe z.B. einen Arduino im Keller über ETH an FHEM angebunden, läuft sehr stabil.
Dein Problem ist wahrscheinlich dabei das naturgemäß die Fenster alle im Haus verteilt sind  ;) und du natürlich nicht für jedes Fenster einen Arduino spendieren willst/kannst, von der Bus Anbindung zu jedem Fenster gar nicht zu reden. Wieviele Fenster sind es denn?

Ich glaube ich würde an deiner Stelle einfach ein HomeMatic Device mit Input für den Reed an jedem Fenster anbringen. dass hat Vorteile bei Verkabelung, Schaltungsaufwand für robustes System usw. und spart eine Menge deiner Zeit dass Projekt umzusetzen  :)
Früher: FHEM 5.x
Jetzt: RaspberryMatic / ioBroker

roedert

Schau dir mal die "Wemos-D1-Mini-Clones" an, werden programmiert wie ein Arduino - haben aber mehr Speichern und WLAN gleich mit an Board.
Gut programmiert kann man die sogar mit Batterie betreiben, bei einem "ständigen" Abfragen der Fensterkontakte wäre aber schon eine Stromversorgung vorzuziehen.
In China gekauft bekommst die Teile umzieh 5 Euro, hier in D etwas teurer.

Wenn du nicht selbst programmieren möchtest, gibts auch fertige ESPeasy-Images dafür, dort kannst die einzelnen Pins auch direkt als Schalteingänge mit entsprechenden PullUp-Widerständen und Entprellung etc. einrichten.
Darüber greife ich zB die S0-Schnittstellen der Stromzähler ab - läuft wirklich klasse.

f5b7

Vielen Dank für eure Beiträge. Nach langer Zeit habe ich an diesem Projekt nun endlich etwas weiter gearbeitet und habe soeben testweise einen älteren Raspberry Pi in Betrieb genommen. Auf die Variante mit galvanischer Trennung (Optokoppler) habe ich vorerst mal verzichtet und obwohl ich auch einen Arduino zur Verfügung gehabt hätte, habe ich die Kontakte nun direkt an den Raspberry angeschlossen. Denn bei einer Überspannung geht das Ding so oder so kaputt, ob jetzt das der Raspberry oder der Arduino ist spielt kostentechnisch ja keine Rolle. Und nur Raspberry ist für den Moment einfacher :)

Mal schauen wie lange das hält. Auf dem Raspberry läuft ein Raspbian mit einem Webserver mit einem PHP-Script, welches für die verwendeten GPIOs den Pull-up-Widerstand setzt (sicherheitshalber jedes Mal) und dann den Wert ausliest. Hier ein Auszug:


$val = exec("gpio -g mode " . $bcmPinNumber . " up && gpio -g read " . $bcmPinNumber);
if ($val == "1") {
  $state = "<b>OPEN</b>";
}
elseif ($val == "0") {
  $state = "closed";
}

Das Ganze wird dann in einer Tabelle dargestellt. Vorerst sind nun mal 7 Fenster angeschlossen.

Hardwaretechnisch habe ich die Pins auf ein Breadboard gesetzt und dort direkt mit den Cat-Drähten verbunden. Das hält nicht gut, da die verwendeten Cat-Drähte unüblich dünn sind (AWG 26). Für eine weniger provisorische Phase werde ich auf WAGO-Klemmen umsteigen (221), das klappt nicht schlecht mit den Jumperkabeln. Cat-Drähte direkt in Jumperkabel (F) stecken klappt mit AWG 26 überhaupt nicht, vielleicht mit dickeren Cat-Drähten. Oder dann das bereits erwähnte Pi-EzConnect (wobei dann auch ein anderes Gehäuse her müsste, wenn ich den Pi nicht "nackt" betreiben will ;)).

fpg

Moin,

....jede Menge Strippen  :)

Ich denke seit längerer Zeit über eine sinnvolle Lösung für meine Türen und Fenster nach... immerhin 5 Türen und 17 Fenster deren Status ich gerne wissen möchte.
Funk scheidet eher aus, da min. 22 potentielle Batteriewechsel pro Jahr zuviel äktschn sind
Bleibt also nur Kabelgebundenes. Weil die Ästhetik eine nicht zu unterschätzende Rolle spielt, sollte der Kabelstrang nicht zu dick sein. Zwei, max. drei Strippen pro Sensor müssen reichen. Zudem möchte ich nicht alle Meldeleitungen an einen Ort zusammenführen.... Kupfer ist teuer und braucht platz! Ein Bus soll es sein....
- 1wire (eigentlich 3wire  ;) )
- can (2wire +)
....
- hart (2wire)
- andere 4 - 20 mA basierende Industriebusse  (2wire)

Ziel ist, das der Sensor bzw. der Transmitter über die Busverkabelung mit der notwendigen Energie versorgt werden.

Sicher steht irgendwo im Forum dazu etwas....  ;) :)

Gruss vom fpg