Zum Ende der Metadaten springen
Zum Anfang der Metadaten



Autor
Logo

Status

IN ENTWICKLUNG

Version0.0.2
Kompatibilität

LB 0.2.3LB 1.2.4

Download
Zweck Dieses Modul stellt die digitalen Ein- und Ausgänge des Raspberry zur Verfügung
 Version History...

Version 0.0.1

  • erste Test Version

Version 0.0.2

  • Umbenennung von IO nach GPIO
  • Konfiguration geht nun nach einem Update nicht mehr verloren

Hinweis

Dieses Plugin ist aktuell noch in der Entwicklung. Es sollte nur von versierten Anwendern eingesetzt werden, die bereit sind, mich bei der Entwicklung durch testen des Plugins zu unterstützen.

Ein produktiver Einsatz dieses Plugins wird aktuell NICHT empfohlen

Inhalt



Download

https://github.com/joesie/io

Installation

Bei der Installation wird die Bibliothek "pigpio" automatisch geladen. Hierfür muss der Loxberry Zugang zum Internet haben. Ohne diese Bibliothek kann das Plugin nicht betrieben werden.

nach der Installation ist ein Neustart erforderlichN

Konfigurationsoptionen

Über die Konfigurationsoberfläche können folgende Einstellungen vorgenommen werden:

  • Anzahl der Eingänge
  • Anzahl der Ausgänge
  • Zuweisung der GPIO Pins zu den Kanälen die über die LoxConfig aufgerufen werden können.

Funktion des Plugins

Konfiguration

Anzahl Ein/Ausgänge

Als erstes werde die Anzahl der benötigten Ein- und Ausgänge angegeben. Dabei können die Anzahl der Ein- und Ausgänge gemischt oder auch nur Ein- oder nur Ausgänge gewählt werden. siehe folgende Abbildung:

Die Auswahl muss gespeichert werden. Nach dem speichern wird der untere Bereich, die Kanalkonfiguration angepasst. 

Kanalkonfiguration

In der Kanalkonfiguration wird die Zuordnung der physischen Ein- und Ausgänge zu den Kanälen des Plugins vorgenommen. Diese Trennung der physischen Pins (GPIOs) zu den verwendeten Ein- und Ausgängen (Kanälen) dient dazu in der LoxConfig z.B. die Kanäle 0-2 zu verwenden, während im Plugin die GPIOS 15, 19 und 26 verwendet werden. Die Zuordnung kann zu jeder Zeit einfach im Plugin neu vergeben werden ohne die Programmierung im Miniserver anzupassen.

Die Zuweisung erfolgt durch Eingabe der entsprechenden GPIO Nummer. Hierbei ist darauf zu achten, dass jedem GPIO nur ein Kanal zugewiesen wird. Außerdem darf ein GPIO nur ein Ein-oder Ausgang sein. Die Verwendung sowohl als Ausgang wie Eingang ist nicht möglich!

Die Pinbelegung des PIs kann z.B.hier nachgelesen werden.

In der folgenden Abbildung ist eine Beispielkonfiguration abgebildet:

Nach dem speichern wird die Kanalzuweisung übernommen und die gewählten GPIOs entsprechend als Ein oder Ausgänge verwendet.

Funktion des Plugin

Schalten der Ausgänge

Geschaltet werden die Ausgänge über URL Parameter. Dabei ist es möglich sowohl einen, wie auch mehrere Ausgänge auf einmal zu schalten. Die Parameter sind dabei wie folgt aufgebaut: 

Die Parameter der Ausgänge sind mit "o" gefolgt von der Kanalnummer aufgebaut. Z.B. "o1" für Ausgang 1. Der Wert wird mit "on" für einschalten oder "off" für ausschalten angegeben.

Beispiel:

Der Ausgang 1 soll eingeschaltet werden, dann sieht der Parameter folgendermaßen aus: "o1=on".

Eine URL für die Ausgänge 0-3 kann somit folgendermaßen aussehen:

Adresse des Loxberry/plugins/io/?o0=off&o1=on&o2=on&o3=on



Einrichtung in der Loxone Config Software

Vorlagedatei/Config für 8Relais:

VO_Digitale Ausgänge Loxberry.xmlLoxberry GPIO.Loxone

In folgendes Verzeichnis legen und Config neu starten  C:\ProgramData\Loxone\Loxone Config 10.0\Templates\VirtualOut bzw. einfach die Config verwenden.

IP anpassen nicht vergessen

Hab absichtlich den EIB Taster verwendet um später den Status zu ermitteln.


Verwendung der Eingänge

Alle eingestellten Eingänge werden alle 100ms abgefragt. Damit die am Eingang anliegenden Signale sicher gelesen werden, müssen diese mindestens 200ms lan anliegen. Bei kürzeren Signalen kann es passieren, dass der geänderte Wert nicht erkannt wird.

Gibt es eine Änderung des Wertes eines Eingangs, so wird dieser per http als Push Nachricht an den ersten konfigurierten Miniserver geschickt.

Eingänge wie im Plugin nach der Reihe nach anlegen z.B. I0 bis I7

Mit einem Webbefehl könnt ihr das ganze testen: http://user:password@IP Miniserver/dev/sps/io/I0/Ein oder eben http://user:password@IP Miniserver/dev/sps/io/I0/Aus

Rückmeldung sollte in etwa so ausschauen und die LiveView wird darauf reagieren


Allgemeines zu den GPIO Eingängen:

Von den insgesamt 26 oder 40 Pins (je nach Modelle) der GPIO-Anschlussleiste 17 oder 26 Pins wahlweise als Eingang oder Ausgang programmieren und so für vielfältige Erweiterungen und elektronische und digitale Schaltungen nutzen. Die übrigen Pins sind für die Stromversorgung und andere Zwecke festgelegt.

3,3 Volt über die Pins 1 und 17

An Pins 1 und 17 liegen ungefähr 3,3 Volt an. Da bietet es sich natürlich an externe Elektronik darüber mit Strom zu versorgen. Das Problem dabei ist, dass das nur begrenzt möglich ist, weil über die Stromentnahme die Spannung sinkt und somit nicht mehr zwangsläufig 3,3 Volt anliegen.
Der sichere und für das Gesamtsystem stabilere Weg ist, externe Schaltungen über eine externe Spannungsquelle zu betreiben. Alles andere kann funktionieren, muss aber nicht.

5 Volt über die Pins 2 und 4

An Pins 2 und 4 liegen ungefähr 5 Volt an. Da bietet es sich natürlich an externe Elektronik darüber mit Strom zu versorgen. Das Problem dabei ist, dass das nur begrenzt möglich ist, weil über die Stromentnahme die Spannung sinkt und somit nicht mehr zwangsläufig 5 Volt anliegen.
Der sichere und für das Gesamtsystem stabilere Weg ist, externe Schaltungen über eine externe Spannungsquelle zu betreiben. Alles andere kann funktionieren, muss aber nicht.

Weitere Informationen
  • Einige GPIO-Pins sind direkt mit dem Prozessor verbunden. Ein Kurzschluss kann diesen und damit den Raspberry Pi komplett zerstören. GPIO-Pins sind in jedem Fall mit einer Strombegrenzung zu beschalten.
  • An den Power-Pins für +5V und +3,3V liegt auch dann eine Spannung an, wenn der Raspberry Pi ausgeschaltet bzw. heruntergefahren ist.
  • GPIO 2 und GPIO 3 (Pins 3 und 5) haben je einen internen 1,8 kOhm Pullup-Widerstand verbaut. Bei den anderen GPIOs haben die internen, schaltbaren Widerstände einen Wert von 50 bis 60 kOhm.
  • Alles unter 0,8V ist low, alles über 1,3V ist high, Bemerkung: alles über 3,3V ist tödlich für den Raspberry Pi!


Relaiskarte: https://www.amazon.de/dp/B01BAFLMCI/ref=sspa_dk_detail_1?psc=1&pd_rd_i=B01BAFLMCI&pf_rd_m=A3JWKAKR8XB7XF&pf_rd_p=00903874-3af0-47e0-8622-ee58087f71cf&pf_rd_r=NQQP58QH4M0S47N5HFC8&pd_rd_wg=vEeuN&pf_rd_s=desktop-dp-sims&pf_rd_t=40701&pd_rd_w=5HmxM&pf_rd_i=desktop-dp-sims&pd_rd_r=43118900-ca5a-11e8-ad7e-013f963e194b


Raspberry GPIO Pin Belegung:

https://www.elektronik-kompendium.de/sites/raspberry-pi/1907101.htm


Daraus würden sich folgende Belegungen anbieten:

Eingang 0            GPIO17 Pin11                                                   Ausgang 0           GPIO18 Pin12

Eingang 1            GPIO27 Pin13                                                   Ausgang 1           GPIO23 Pin16

Eingang 2            GPIO22 Pin15                                                   Ausgang 2           GPIO24 Pin18

Eingang 3            GPIO 5 Pin29                                                    Ausgang 3           GPIO25 Pin22

Eingang 4            GPIO 6 Pin31                                                    Ausgang 4           GPIO12 Pin32   

Eingang 5            GPIO 13 Pin33                                                  Ausgang 5           GPIO16 Pin36

Eingang 6            GPIO 19 Pin35                                                  Ausgang 6           GPIO20 Pin38   

Eingang 7            GPIO 26 Pin37                                                  Ausgang 7           GPIO21 Pin40  


Achtung die GPIO Eingänge vertragen max. 3,3V darum Eingänge links und die Relais rechts damit nichts passiert!




Roadmap

  • Ein- und Ausgänge als Option invertieren
  • In der Konfiguration soll der Miniserver ausgewählt werden können, an den die Änderungen des Eingangs gesendet werden
  • Das Abtastintervall der Eingänge soll einstellbar sein
  • Die Konfigurationsdatei soll bei einem Update nicht mehr überschrieben werden
  • Die Eingänge mit einen Präfix versehen
  • Das Modul muss einen Namen bekommen, der mindestens 4 Zeichen lang ist
  • Konfigurierbar machen der Pullup/Down Widerstände:
    • PUD g p - Set GPIO pull up/down

                 This command sets the internal pull/up down for GPIO g to mode p.

                 Upon success nothing is returned.  On error a negative status code will be returned.

                 The mode may be pull-down (D), pull-up (U), or off (O).

                 Example

                 $ pigs pud 4 d # Set pull-down on GPIO 4.

                 $ pigs pud 4 u # Set pull-up on GPIO 4.

                 $ pigs pud 4 o # No pull-up/down on GPIO 4.


Fragen stellen und Fehler melden

Fehler bitte im Github als Issue einstellen. Fragen können hier im Kommentar gestellt werden.




24 Kommentare

  1. AlexAn sagt:

    Super Arbeit von dir!!

    Denke du bist mit der Doku noch gar nicht so weit - zwecks Anlegen der Eingänge in der Config.

    Wenn ich das richtig verstanden habe dann wäre das eine MultiAir Ersatz: 2*8 sprich 16 10A Ausgänge und 10 digitale Eingänge wenn ich einen 3B+ Raspberry ausnutze?

    1. Hallo Alex,

      ja ich habe mich bisher ausschließlich auf die Plugin Entwicklung konzentriert. Die Einbindung in die LoxConfig sollte bei den Ausgängen ja sehr einfach sein und bei den Eingängen gehe ich auch auf den Loxone Standard. Aber Templates gibts noch nicht. Aber vielleicht kannst Du da ja auch unterstützen (Zwinkern)

      Wenn ich das richtig überschlagen habe hat der RB 3B 25 für GPIO nutzbare Pins. Die können dann wahlweise als Ein- oder Ausgänge verwendet werden.

  2. AlexAn sagt:

    Hi Jörg,

    war mal so frech und hab eine Vorlage für 8Ausgänge eingefügt!

    Wenn du mir den Befehl für die Eingänge gibst mache ich das auch noch in eine Vorlage für die Eingänge.

    1. Hallo Alex, 

      klasse - besten Dank. So macht das ganze Spass. Wie gesagt bin ich noch nicht zur Integration in die Loxone selber gekommen. 

      Die Eingänge werden entsprechend mit I0 .. n gekennzeichnet und der Wert übermittelt. Schau doch mal bitte hier:

      REST Webservice

  3. AlexAn sagt:

    Bedeutet dass du den Befehl gezielt hier reinschreibst: http://admin:password@MeinMiniserver/dev/sps/io/Wohnzimmerlicht/state (wusste ich nicht dass man den von aussen überschreiben kann)

    Ich müsste nur vorher einen Virtuellen Eingang anlegen der dann im Loxberry den gleichen Namen hat? Der Loxberry schickt mir dann jeweils die Statusänderung?

    Das Plugin ist aber vom Eingang noch nicht fertig programmiert damit ich den Eingang angeben könnte?? Eine Vorlage in der config kann ich dann leider nicht machen weil man alles per anlegen muss. Wäre gut wenn dann der Loxberry den Namen des Einganges vorschlägt der dann einfach per copy/paste in der Config eingefügt wird.



    1. Das Plugin sendet bei Statusänderung einen HTTP Request zu Miniserver. Das ist auch alles schon fertig. Der Kanal wird mit I0, I1 usw. angegeben. Ich hätte jetzt erwartet, dass am Miniserver sowas ankommt wie:

      MeinMiniserver/dev/sps/io/I0/on

      MeinMiniserver/dev/sps/io/I2/off

      Habe es aber wie gesagt noch nicht ausprobiert. Aber jetzt wo ich darüber nachdenke, sollte ich vielleicht noch einen weiteren Präfix angegeben. Nicht das es z.B. I0 bereits wo anders gibt ..



  4. AlexAn sagt:

    Nein es müsste lauten: http://user:password@IP Miniserver/dev/sps/io/I0/Ein oder http://user:password@IP Miniserver/dev/sps/io/I0/Aus aber wahrscheinlich wird on off auch gehen wenn ich weiter oben nachlese

    Bei Schalten: https://www.loxone.com/dede/kb/webservices/

    Bei der nächsten Runde/Abfrage der Eingänge vom Miniserver sollte dann der Status automatisch am Eingang erkannt werden

    1. Hast Du das Plugin am laufen? Wenn ja könntest Du doch einfach einen GPIO als Eingang schalten und prüfen was am MS ankommt. 

      Ich komme leider heute nicht dazu mit der HW was zu machen

    2. AlexAnDas Senden geht über das LoxBerry SDK, das mit On/Off passt schon.

      Jörg Siedhof Das mit dem individuellen Präfix solltest du unbedingt einbauen (entweder einstellbar, oder du nimmst den Hostnamen mit, z.B. lbhostname() . '_I1' oder so. Es gibt Installationen, die haben mehr als einen Loxberry im Haus, z.B. ich, deswegen ist ein Pi-Spezifisches Präfix wirklich wichtig.

      Noch was ist mir in den Sinn gekommen, was ich dir noch ans Herz legen würde: Nämlich der Pluginname - IO ist sehr allgemein, es wäre naheliegend, das Plugin in GPIO umzutaufen. IO ist so generisch, und im Forum kann man nach 2 Buchstaben nicht suchen. (Lächeln)

      lg, Christian

      1. Hallo Christian, 

        danke für die Hinweise. Ich werde die Präfixe konfigurierbar machen und einen Defaultwert vorgeben. Somit können wir für die nicht so versierten Nutzer ein fertiges Template anlegen das dann auch funktioniert. 

        Was den Namen angeht war ich auch nicht so glücklich aber bin bei sowas recht unkreativ. GPIO bietet sich an, aber weiß jeder was damit gemeint ist?

        Bist du übers Wochenende mal zum testen gekommen? 

  5. AlexAn sagt:

    Befehle über den Browser gehen beide nach einem Test in der LiveView der Config

    Plugin sollten dann mit I0, I1 … laufen.

    Loxberry bekommt nun eine neues Gehäuse (Lächeln)

    1. Klasse, dann sollte das ganze so funktionieren. Ich habe vorhin mal geschaut, ob es fertige Module gibt mit Sicherheitsbeschaltung (Optokoppler) für die GPIOs. So direkt sollte man lieber keine Peripherie (Bewegungsmelder, Sensoren, ...) anschließen. Hab aber auf die schnelle nichts gefunden. Ich habe gesehen, dass du dich auch an anderer Stelle schon mit Beschaltungen des RP beschäftigt hast. Hast du da was fertigen, das man hier empfehlen kann?

      1. AlexAn sagt:

        Hab das hier gefunden aber das geht über den I2C und damit wären die GPIO frei für die Ausgänge aber das wird ohnehin zum Platzproblem im Gehäuse.

        https://www.horter-shop.de/de/i2c-hutschienen-module/232-bausatz-i2c-digital-input-modul-mit-optokoppler-4260404260851.html

        Hab mir für diesen Zweck ein leeres Extension Gehäuse bestellt. 2mal 4 Kuman Relais und ein 3erRaspberry würden sich ausgehen. Spannungswandler muss ich noch schauen wie das gehen könnte aber ich denke ich baue alles auf eine Grundplatte auf.

        Soll dann alles über 24V laufen wie hier: Einbau i2c



  6. AlexAn sagt:

    Was mir noch eingefallen ist: könnte man per Script die jeweiligen Eingänge mit dem Pulldownwiderstand aktivieren beim abspeichern der GPIO

    http://www.gtkdb.de/index_36_2679.html

    1. Ich muss mir nochmal die verwendete Bibliothek genauer ansehen. Beim SW konfigurieren würde ich erwarten, dass der interne Pullup/down aktiviert wird. Ich habe in der Beschreibung nichts darüber gelesen, dass man sich das aussuchen kann.

      Ich schaue mir das aber an.

    1. Klasse, genau sowas hab ich mir vorgestellt. Du hast ja schon sehr viel zum Aufbau und der Beschaltung geschrieben. Da könnten wir auch überlegen ob wir dem eine eigene Seite spendieren. Den Warnhinweis, dass man den Raspberry bei falscher Beschaltung zerstören kann, hast Du auch schon drin. Den würde ich vielleicht noch etwas hervorheben. 

  7. AlexAn sagt:

    Möchte deine Seite nicht komplett kapern (Zwinkern)

    Eventuell sollten wir die Hardwaregeschichte in eine Unterseite packen.

  8. Alles gut. Ich freue mich, dass ich das Thema nicht alleine machen muss. Wir sollten nur schauen, dass die Seite übersichtlich bleibt. 

  9. AlexAn sagt:

    Tu dir keinen Zwang an und schiebe es hin und her wie du es haben möchtest!

    1. Nene, nix da nun bist du auch am Zug. Ich stimme mich mal mit den Foren Admins ab, wie und wohin wir das am besten legen können. Dann können wir uns ja nochmal beraten.

      So ich hab noch ein wenig rumgesucht und rausgefunden, wie ich die internen Pullups steuern kann. Standard scheint Pulldown zu sein.

      Ich schau mal, wie und wann ich das eingebaut bekomme.

  10. bernhard sagt:

    Hi Leute!

    Hab mir das Plugin mal auf meinem test loxberry installiert.

    Es würde denk ich genau zu meinem aktuellen Projekt passen, den Strom und die Wasserzähler per Lichttaster abzufragen.


    Habe aber das Problem, dass das Plugin die Eingänge nicht am Miniserver ankommen.

    http://user:password@IP Miniserver/dev/sps/io/I0/Ein bzw. Aus bewirkt aber eine Reaktion in Liveview.

    Konfiguriert habe ich das Plugin so:

    2 Eingänge - GPIO 17 und 27.


    Aufgefallen ist mir noch das die Pinbelegung im Bild oben und im Link https://www.elektronik-kompendium.de/sites/raspberry-pi/1907101.htm unterschiedlich sind, GPIO 22 und 27.



  11. AlexAn sagt:

    bernhard danke für den Hinweis ich hab das korrigiert.

    Jörg Siedhof bei mir kommt auch nichts an - eventuell der fehlende Pull Widerstand oder er holt sich noch nicht die Daten vom zugehörigen Miniserver im Loxberry. Relais ziehen bei Low an - eventuell wäre ein Auswahl Active Low oder eben High gut je nach dem welches Relais man hat.

    Neuer Pfad /plugins/gpio/?o0=off  ?? Weil dann eine neue Vorlage fällig ist.

    1. Hallo bernhard  und AlexAn,

      ich habe die Logik für die Eingänge zwar implementiert, aber noch nicht wirklich getestet. Gut möglich, das da noch was nicht funktioniert.

      Ich werde in dem Bereich aber auch noch ein paar Issues beheben, siehe TODOs von oben. Dann gebe ich Euch Bescheid und ihr könnt es bei Euch testen. Wird aber wohl noch übers Wochenende dauern.

      Ich freue mich, dass es so reges Interesse gibt.