Relais am externen Ladegerät auslesen

  • Hallo,
    ich möchte gerne mithilfe eines Raspberry Pi 3 eine Zusatzalarmierung für eine Feuerwehr automatisieren.


    Aktueller Stand: Unser Löschzug wird über Digitale Meldeempfänger (DME) alarmiert, die den entsprechenden Einsatzauftrag via Kurznachricht von der Leitstelle erhalten. Parallel nutzen wir über www.divera247.com eine Zusatzalarmierung via App, die den Vorteil hat das hier auch eine Rückmeldung wer alles kommt möglich ist. Die anrückenden Kräfte werden dann auf einem Monitor in der Fahrzeughalle angezeigt, sodass man einen Überblick erhält wer noch auf der Anfahrt zum Gerätehaus ist.
    Die Zusatzalarmierung muss derzeit manuell in der App ausgelöst werden.


    Wunsch: Die Ladegeräte der Meldeempfänger besitzten einen Relaisausgang der bei Alarmeingang einen anderen Zustand schaltet als im Ruhemodus.
    Bei Alarm wird innerhalb des Ladegerätes der Pin 1 und 3 kurzgeschlossen. Die entsprechende Verbindung darf mit maximal 30V / 1A belastet werden. Der Kontakt bleibt solange geschlossen bis der im Ladegerät stehende Melder manuell quittiert wurde.
    Außerdem sind bei Alarm an Kontakt 2 und 4 des Melders 5V DC mit maximal 400mA abgreifbar. (Der Raspberry verträgt ja aber nur 3,3V, also kann ich diese nicht ohne Weiteres nutzen!?)


    Quelle und Schaltplan: Bei dem Ladegerät handelt es sich um das Swissphone LGRA Expert (unten auf Seite 1)
    https://www.google.de/url?sa=t&rct=j&q=&esrc=s&source=web&cd=2&ved=0ahUKEwjRofS52tvTAhXEXBQKHWRhAjkQFggrMAE&url=http%3A%2F%2Fjuergenrupp.de%2Fwp-content%2Fuploads%2F2012%2F04%2FAnschlussbelegung_Ladeger%25C3%25A4te.pdf&usg=AFQjCNFn-VPabzgPPoySd61upJicD3vRuw&sig2=5PPugSNXkJRuEd2vVv1TPQ&cad=rja



    Ich würde nun also gerne die Kontakte 1 und 3 des Ladegeräts mit dem Raspberry Pi GPIO verbinden.
    Im Alarmfall wird dieser Kontakt dann geschlossen und der Raspberry soll ein Kommando an den installierten Divera Alarmgeber senden. Ab Alarm bleiben die entsprechenden Kontakte am Ladegerät dauerhaft verbunden bis der Melder manuell quittiert wird (Dies kann auch mehrere Stunden dauern, da ich mich möglichst bei Alarm / zu Beginn des Einsatzes nicht darum kümmern möchte den Melder zu quittieren.) Hierdurch sollte kein neuer Alarm ausgelöst werden, solange das Relais nicht mindestens x Sekunden nicht mehr verbunden war.


    Ideal wäre wenn ich dies unter Windows 10 IOT nutzen könnte und bei Schließen des Kontaktes / Alarmierung am Ladegerät die Eingabeaufforderung aufgerufen würde und die Zeilen: "cd c:\Program Files (x86)\DIVERA 247" und ""DIVERA247 Alarmgeber.exe" "Einsatz"" übergeben werden könnte.


    Hat jemand hierzu einen Tipp welche Kontakte ich hierfür am Raspberry GPIO nehmen muss und wie ich diese Kontakte dann softwareseitig auswerte und die Eingabe in die Kommandozeile auslöse?


    Für Hilfe wäre ich euch sehr dankbar! :danke_ATDE:

  • Grundlagen gibts hier.
    Lege einen GPIO auf Pin 1 des Relais und Pin 3 des Relais auf Ground. Konfiguriere den GPIO als Eingang mit Pullup. Und schon kannst du das Relais erkennen. Ist es offen, hast du HIGH auf dem GPIO, ist es geschlossen, hast du LOW.

    Oh, man kann hier unliebsame Nutzer blockieren. Wie praktisch!


  • Grundlagen gibts hier.
    Lege einen GPIO auf Pin 1 des Relais und Pin 3 des Relais auf Ground. Konfiguriere den GPIO als Eingang mit Pullup. Und schon kannst du das Relais erkennen. Ist es offen, hast du HIGH auf dem GPIO, ist es geschlossen, hast du LOW.


    Danke für den Hinweis schonmal, habe das bisher noch nicht wirklich verstanden wie ich das Signal von dem GPIO softwaremäßig umsetze.




    Die Relaiskontakte werden vom Hersteller ja extra für Zusatzeinrichtungen "angeboten". Der Melder sieht von hinten so aus: http://images.picalyze.de/Swis…rricane-BOSS-4-687049.jpg Eigentlich ist dies zwar dafür gedacht hier beispielsweise eine Lampe anzuschließen die dann automatisch leuchtet wenn man nachts alarmiert wird, aber wofür ich den Ausgang verwende ist ja egal. :-)
    Die Alarmierung wird hierdurch auch nicht gefährdet, da jeder einen persönlichen Melder hat und die Alarmierung über einen Melder in der Wache durchgeführt werden soll. Die Alarme werden sternförmig von der Leitstelle unmittelbar nacheinander an jeden einzelnen Melder gesendet. Von daher sehe ich da keine Manipulation, schlimmstenfalls versagt die ZUSATZalarmierung.
    Das mit dem Quittieren kann ich nicht ändern, hatte es nur dazugeschrieben, weil es eben möglich ist das das entsprechende Relais dann eben auch mal mehrere Stunden offen ist.



    > ... Swissphone ...
    Habt Ihr Swissphone-Pager im Einsatz?


    > ... Windows 10 IOT ...
    Muss es Windows 10 sein?


    Ja richtig es sind Swissphone BOSS 925 Melder


    An Windows 10 IOT hatte ich gedacht, da der Alarmgeber nur für Windows angeboten wird. Kann ich den dennoch einfach auf Raspbian installieren? Brauch ich da irgendwie einen Emulator?

    Edited once, last by Dennis.85 ().

  • [font="Source Sans Pro, Tahoma, Helvetica Neue, Arial, sans-serif"]> Ja richtig es sind Swissphone BOSS 925 Melder[/font]
    Wenn es ein Swissphone-Abo ist:


    [font="Source Sans Pro, Tahoma, Helvetica Neue, Arial, sans-serif"]Tut erst mal GAR NICHTS![/font]


    [font="Source Sans Pro, Tahoma, Helvetica Neue, Arial, sans-serif"]Wartet bis Mittwoch...[/font]

    Edited once, last by Tell ().


  • [font="Source Sans Pro, Tahoma, Helvetica Neue, Arial, sans-serif"]> Ja richtig es sind Swissphone BOSS 925 Melder[/font]
    Wenn es ein Swissphone-Abo ist:


    [font="Source Sans Pro, Tahoma, Helvetica Neue, Arial, sans-serif"]Tut erst mal GAR NICHTS![/font]


    [font="Source Sans Pro, Tahoma, Helvetica Neue, Arial, sans-serif"]Wartet bis Mittwoch...[/font]


    Was meinst du mit Swissphone Abo?


    Was passiert denn am Mittwoch? :s


    Gruß Dennis

  • [font="Source Sans Pro, Tahoma, Helvetica Neue, Arial, sans-serif"]> Was meinst du mit Swissphone Abo?[/font]
    [font="Source Sans Pro, Tahoma, Helvetica Neue, Arial, sans-serif"]Wem zahlt Ihr Geld damit die Pagermeldungen uebertragen werden?[/font]


    [font="Source Sans Pro, Tahoma, Helvetica Neue, Arial, sans-serif"]Oder genauer: wer betreibt Euer Pagernetz?
    [/font]


    [font="Source Sans Pro, Tahoma, Helvetica Neue, Arial, sans-serif"]> Was passiert denn am Mittwoch?[/font]
    [font="Source Sans Pro, Tahoma, Helvetica Neue, Arial, sans-serif"]Kriege ich weitere Informationen von Swissphone :thumbs1: [/font]

  • Ich habe bei mir auch den Relais Ausgang an den Raspberry angeschlossen, wenn du möchtest, kann ich dir meine quick & Dirty Lösung zusenden, wie ich die Problematik mit der Quittierung gelöst habe.


  • Ich habe bei mir auch den Relais Ausgang an den Raspberry angeschlossen, wenn du möchtest, kann ich dir meine quick & Dirty Lösung zusenden, wie ich die Problematik mit der Quittierung gelöst habe.


    Dafür wäre ich dir sehr dankbar! :danke_ATDE:




    Bin mittlerweile bei Raspberian gelandet, das mit Windows 10 habe ich aufgegeben...


    Probiere grade mit der Flankenänderung wie hier beschrieben zu arbeiten http://indibit.de/raspberry-pi…e-lesen/#Steigende_Flanke, aber irgendwie krieg ich das Programm nicht zum Laufen.. :-(
    Automatisch zusammengefügt:[hr]


    Das Pagernetz wird durch den Kreis betreiben, da haben wir nix mit zu tun. ;-)

    Edited once, last by Dennis.85 ().

  • Wenn ich gleich zuhause bin, kopiere ich mal mein Script, welches bei mir zuhause im Alarmfall das Licht einschaltet, vlt kannst du es ja so umfunktionieren, dass es eure Alarmierung auslöst.

  • Hier mal der ausschnitt, meines Bash Skriptes, nicht wundern, ich verwende es noch für weitere Schalter auszulesen und Relais zu steuern, den Teil habe ich jetzt aber aus Bequemlichkeit nicht mit kopiert.


    Vom Prinzip erstellt das eine log.txt dabei, in welche "Einsatz" geschrieben wird, sobald das Relais anzieht.
    Wird der Alarm Quitiert, wird in die log.txt "Kein Einsatz" geschrieben.


    Zieht das Relais an, und in der Log Datei steht "kein Einsatz" werden die Befehle ausgeführt und in die Log date "Einsatz"geschrieben.
    solange dann in der Log Datei "Einsatz" steht, wird nichts ausgeführt.


    Hoffe, das ganze ist verständlich, bei mir funktioniert diese (wenn auch sehr unsaubere) Methode jetzt schon länger ohne Probleme.



  • Ich würde nun also gerne die Kontakte 1 und 3 des Ladegeräts mit dem Raspberry Pi GPIO verbinden.
    Im Alarmfall wird dieser Kontakt dann geschlossen und der Raspberry soll ein Kommando an den installierten Divera Alarmgeber senden. Ab Alarm bleiben die entsprechenden Kontakte am Ladegerät dauerhaft verbunden bis der Melder manuell quittiert wird (Dies kann auch mehrere Stunden dauern, da ich mich möglichst bei Alarm / zu Beginn des Einsatzes nicht darum kümmern möchte den Melder zu quittieren.) Hierdurch sollte kein neuer Alarm ausgelöst werden, solange das Relais nicht mindestens x Sekunden nicht mehr verbunden war.


    Ideal wäre wenn ich dies unter Windows 10 IOT nutzen könnte und bei Schließen des Kontaktes / Alarmierung am Ladegerät die Eingabeaufforderung aufgerufen würde und die Zeilen: "cd c:\Program Files (x86)\DIVERA 247" und ""DIVERA247 Alarmgeber.exe" "Einsatz"" übergeben werden könnte.


    Hat jemand hierzu einen Tipp welche Kontakte ich hierfür am Raspberry GPIO nehmen muss und wie ich diese Kontakte dann softwareseitig auswerte und die Eingabe in die Kommandozeile auslöse?


    Diesen Part habe ich nur zum Teil verstanden (sry):


    Welches Kommando soll zu dem Alarmgeber gesendet werden?
    Also: Was genau geht da ab? Ist das ein Protokoll (welches) was da bedient wird (wie/Parameter...).


    Hintergrund meiner Frage:
    Auch wenn ein Forenschreiber (C4mp1n0 ) hier offensichtlich schon eine Lösung hat, frage ich mich, warum man für so eine doch recht einfache Aufgabe unbedingt einen ganze RasPi verheizen muss:
    Falls dieses Kommando per LAN/WLAN abgesetzt bzw. evtl sogar nur das Schalten eines GPIOs bedeutet, könnte man das doch wesentlich besser mittels Arduino/ESP8266 lösen (ist zudem dramatisch billiger, braucht bedeutend weniger Strom und bringt nicht das ganze Geraffel mit einem laufenden Linux-System mit...).


    Nur mal so in die Runde geworfen... :-)

  • Hallo,
    vielen Dank für dein Skript. Zwischenzeitlich hatte ich selbst schon etwas rumprobiert und hänge nun aber leider ein wenig.


    Ich greife an Pin 1 3,3 V ab und verbinde die über das Relais im Ladegerät mit Pin 18. Wenn der Melder einen Alarm signalisiert schließt das Relais und die 3,3 V liegen dauerhaft bis zum Quittieren an Pin 18 an.
    Sobald sich der Zustand von Pin 18 ändert (keine Spannung --> 3,3V anliegend) soll die URL aufgerufen werden die dann den Alarm startet. Dies klappt auch soweit.
    Allerdings wird die URL bei konstant geschlossenem Relais immer wieder aufgerufen und so ein Alarm nach dem Anderen erzeugt.
    Sieht jemand den Fehler und kann mir weiterhelfen?
    Alternativ könnte ich auch den Trick 17 mit dem Log-File machen, aber fände diesen Weg hier eigentlich eleganter :-)


    Der Raspberry soll gleichzeitig noch eine Stärkeübersicht auf einem Monitor in der Fahrzeughalle darstellen. Mehr als diese zwei Sachen soll er zumindest aktuell tatsächlich nicht tun.
    Das Linuxsystem läuft dank Noobs mittlerweile auch zumindest meiner Meinung nach problemlos :-)


    Vielen Dank und einen schönen Abend!




    #!/usr/bin/env python
    #coding: utf8


    import time
    import RPi.GPIO as GPIO
    import urllib
    import urllib.request


    # Zählweise der Pins festlegen
    GPIO.setmode(GPIO.BOARD)


    # Pin 18 (GPIO 24) als Eingang festlegen
    GPIO.setup(18, GPIO.IN, pull_up_down = GPIO.PUD_DOWN)


    # Schleifenzähler
    i=0


    #url zur Alarmierung
    url='https://www.divera247.com/api/alarm?accesskey=MeinAccessKey'
    # Ereignis-Prozedur für Eingang HIGH
    def doIfHigh(channel):
    # Zugriff auf Variable i ermöglichen
    global i
    # Wenn Eingang HIGH ist, Ausgabe im Terminal erzeugen
    print("Eingang HIGH ",str(i))
    # Schleifenzähler erhöhen
    i = i + 1
    urllib.request.urlopen(url)
    print(url)
    # Ereignis deklarieren
    GPIO.add_event_detect(18, GPIO.RISING, callback = doIfHigh, bouncetime = 200)


    # Eigentlicher Programmablauf
    while 1:
    time.sleep(0.1)

    Edited once, last by Dennis.85 ().

  • Du hast den GPIO mit Pulldown konfiguriert und gibst übers Relais 3,3 V drauf. Das müsste eigentlich klappen.
    Im Programm seh ich auch keinen Fehler.


    Wie viele Alarme werden pro Sekunde oder Minute ausgelöst?


    Ist dein Kontakt vom Relais vielleicht unsauber, so dass er ständig prellt und dadurch das Signal flattert? Oder vielleicht gibts Störungen durch die Spulen.
    Probiers doch mal mit einem kleinen Kondensator (100 nF) zwischen GPIO und Ground und einen Widerstand (3,3 - 4,7 K Ohm) zwischen Relaisausgang und GPIO. Das sollte Schwankungen auffangen.

    Oh, man kann hier unliebsame Nutzer blockieren. Wie praktisch!

  • So, jetzt hab ichs glaub ich geschafft. :-)
    Der Melder überwacht die Spannung der eingelegten Batterie und gibt dann sobald er geladen werden "will" ein Signal ans Ladegerät. Offensichtlich sorgte dieses Signal dafür das auch kurz das Relais geschlossen wurde und somit der Alarm auflief.
    Ich hab jetzt nach der Kontrolle auf steigende Flanke/Schließen des Relais eine zweisekündige Pause gefolgt von einem Prüfen ob das Relais high ist gesetzt. Erst wenn diese Folge erfüllt wird wird der Alarm gestartet.
    Falls noch wer Fehler in dem Skript findet gerne melden :-)


    #!/usr/bin/env python
    #coding: utf8


    #Python Module importieren
    import time
    import RPi.GPIO as GPIO
    import urllib
    import urllib.request


    # Zählweise der Pins festlegen
    # GPIO.BOARD ermöglicht einfaches Abzählen auf der Platine
    GPIO.setmode(GPIO.BOARD)


    # Pin 18 (GPIO 24) als Eingang festlegen
    GPIO.setup(18, GPIO.IN, pull_up_down = GPIO.PUD_DOWN)


    # Schleifenzähler
    i=0


    #url zur Alarmierung
    url='https://www.divera247.com/api/alarm?accesskey=MeinAccessKey'


    # Ereignis-Prozedur für Eingang HIGH
    def doIfHigh(channel):
    # Zugriff auf Variable i und url ermöglichen
    global i
    global url
    # Relaisschließung bei Einschalten der Ladung ignorieren (Mindestrelaisdauer: 2 Sekunden)
    time.sleep(2)
    #Prüfung nach Mindestdauer ob Relais immer noch geschlossen
    if GPIO.input(18) == GPIO.HIGH:
    # Wenn Eingang HIGH ist, Ausgabe im Terminal erzeugen und URL zur Alarmierung aufrufen
    print("Eingang HIGH ",str(i))
    # Schleifenzähler erhöhen
    i = i + 1
    urllib.request.urlopen(url)
    print(url)


    # Ereignis deklarieren
    # GPIO.RISING --> Ansteigende Flanke (Relais wird geschlossen)
    # Bouncetime bewirkt das zwischen 2 Anstiegen mindestens 1 Sekunde Zeit vergehen müssen
    # Sobald diese Bedingungen erfüllt sind wird 'doIfHigh ausgeführt
    GPIO.add_event_detect(18, GPIO.RISING, callback = doIfHigh, bouncetime = 1000)


    # Eigentlicher Programmablauf
    while 1:
    time.sleep(0.1)

  • Freut mich, dass du ein eigenes Script entwickelt hast, welches funktioniert.
    Mich stört die Variante mit der Log Datei nicht, im Gegenteil, ich binde sie Zeitgleich noch auf einer Webseite ein, Weswegen dies für mich die schnellste einfachste Lösung war.
    Aber es wäre cool, wenn du mir mal ein bisschen zu eurer Handy Alarmierung erzählen kannst, da bei uns die SMS Alarmierung noch immer auf sich warten lässt. .. ;-(
    Hast du evtl ein paar Erfahrungsberichte für mich?
    Gruß, C4