====== GPIO ====== ++++ 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 * In der Konfiguration ist der Miniserver auswählbar, an den die Änderungen des Eingangs gesendet werden * Das Abtastintervall der Eingänge ist einstellbar * Die Eingänge mit einen Präfix versehen **Version 0.0.3** * Für die Ein- und Ausgänge kann zwischen Pullup und Pulldown gewählt werden. **Version 1.0.0** * Identisch mit 0.0.3 nur offizielles Release **Version 1.0.1** * Daemon Bugfix. (siehe https://github.com/joesie/GPIO/issues/9) **Version 2.0.0** * Komplett überarbeitet. * Verwendet nun MQTT zur Kommunikation mit dem Miniserver * Die Eingänge werden nun über Interrupts verarbeitet. Dies erhöht die Stabilität und verringert deutlich die Prozessorlast. * Umstellung der Config Datei auf JSON. * **Diese Version ist nicht kompatibel mit der Plugin Version 1.0.1!** **Das Changelog wird im Github gepflegt. Bitte schaut unter https://github.com/joesie/GPIO/releases** ++++ ---- Die neue Version 2.0.7 ist nicht kompatibel mit den vorherigen Pluginversionen. Wurde bereits eine Pluginversion 1.x  auf dem Loxberry installiert, muss dieser nach dem Update neu konfiguriert werden.  Außerdem muss auch die LoxConfig des verwendeten Miniservers angepasst werden! ---- The new Version 2.0.7 is not compatible with older versions of this plugin. Did you installed a plugin version with 1.x on your Loxberry, you must reconfigure the plugin after update. Furthermore you have also to reconfigure the LoxConfig for the Miniserver you use with this plugin! ===== Einführungsvideo ===== ===== Installation ===== Für dieses Plugin muss das Plugin [[plugins:mqtt_gateway:start|MQTT Gateway]] installiert sein. Außerdem werden die Bibliotheken "python3-pigpio", "python3-paho-mqtt", "python3-colorlog" während der Plugin Installation automatisch installiert. Hierfür muss der Loxberry eine Verbindung zum Internet haben. ===== 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. * Auswahl des Minservers an den der Zustand der Eingänge gesendet werden soll ===== 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: {{plugins:gpio:1269957233.png?w=800}} 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 (GPIOs) als Ein- bzw. Ausgänge vorgenommen.  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! Im Plugin wird die korrekte Eingabe nicht überprüft! Die Pinbelegung des PIs kann z.B. nachgelesen werden: https://www.raspberrypi.org/documentation/usage/gpio/ Die weiteren Einstellungen werden ausschließlich für die Eingänge benötigt: === Beschaltung (Pullup/Pulldown) === Für jeden Eingang kann gewählt werden, ob dieser mit dem internen Pullup oder Pulldown beschaltet werden soll. Dieser Widerstand dient dazu, bei nicht anliegendem Signal am Eingang, diesen auf einen definierten Wert 0V (Pulldown) oder 3,3V (Pullup) zu ziehen (siehe https://de.wikipedia.org/wiki/Open_circuit#Beschaltung_der_Signalleitungen). Der Defaultwert ist Pulldown. === Präfix === Das Plugin verwendet den Hostname des Loxberry als Präfix. Somit ist es möglich, mehrere Loxberrys mit dem Plugin zu verwenden und die Eingänge eindeutig zu zuordnen. In der Konfiguration des Plugins muss hierfür keine Anpassung vorgenommen werden.  ==== Verwendung der Ein- und Ausgänge ==== Im folgenden Abschnitt wird beschrieben, wie die Ein-und Ausgänge funktionieren. Praktische Tipps rund um die GPIOs wurden hier zusammengefasst: [[plugins:gpio:allgemeines_zu_den_gpios|Allgemeines zu den GPIOs]]. Das Plugin kommuniziert über MQTT Nachrichten. Eine Nachricht besteht hierbei immer aus dem und . Im Plugin [[plugins:mqtt_gateway:start|MQTT Gateway]] ist detailliert beschrieben, wie Nachrichten funktionieren, wie diese aufgebaut sind und wie man überprüfen kann, ob die Nachrichten richtig ankommen. Dieses Plugin verfügt zusätzlich über eine Status Nachricht, mit der überprüft werden kann, ob das Plugin aktiv ist, oder nicht.  Diese Nachricht kann wie folgt abgefragt werden: ///gpio/status (online/offline)// === Schalten der Ausgänge === Der Topic zum setzen eines Ausgangs ist hierbei wie folgt aufgebaut: ///gpio/set/// Als Payload können zum Einschalten folgende Werte übergeben werden:  //ON, on, 1// Als Payload können zum Ausschalten folgende Werte übergeben werden:  //OFF, off, 0// **Achtung**: Sowohl der Topic wie auch der Payload muss ohne Leerzeichen, Zeilenumbruch und sonstige Formatierungen angegeben werden! Wurde die Nachricht korrekt gesendet, wird der entsprechende Ausgang gesetzt und zusätzlich erfolgt eine Quittierung der mit einer Statusnachricht, die wie folgt aufgebaut ist: Der Topic zum bestätigen des setzen des Ausgangs ist wie folgt aufgebaut: ///gpio/// Folgende Werte werden hierbei übertragen: //stateText=OFF/ON (Im Fehlerfall wird hier im Klartext eine Meldung geschrieben, dass der Ausgang nicht gesetzt werden konnte)// //state=0/1// //timestamp_OFF=// //timestamp_ON=// __Beispiel:__ Der Ausgang 1 (GPIO5) soll eingeschaltet werden, dann sieht die Nachricht zum Beispiel wie folgt aus: //loxberry/gpio/set/5 on// Das Plugin antwortet mit: //loxberry/gpio/5/stateText=ON// //loxberry/gpio/5/state=1// //loxberry/gpio/5/timestamp_ON=2021-03-16 13:41:59// Der Ausgang 1 soll ausgeschaltet werden, dann sieht die Nachricht zum Beispiel wie folgt aus: //loxberry/gpio/set/5 off// Das Plugin antwortet mit: //loxberry/gpio/5/stateText=OFF// //loxberry/gpio/5/state=0// //loxberry/gpio/5/timestamp_OFF=2021-03-16 13:41:59// === Schalten mehrerer Ausgänge in einem Request === Es ist auch möglich, in einem Request mehrere Ausgänge auf einmal zu schalten. Die  zu schaltenden Ausgänge und deren Werte werden dabei imm json Format übergeben. **Es muss darauf geachtet werden, dass technisch bedingt, die Ausgänge __NICHT__ exakt zur gleichen Zeit geschaltet werden! Daher ist es nicht möglich, eine direkte Umschaltung z.B. von Motoren (Jalousien) vorzunehmen. In diesem Fall muss vorher zwangsweise ein Aus-Kommando an alle betreffenden Ausgänge gesendet werden!** Der Topic zum setzen mehrerer Ausgänge ist hierbei wie folgt aufgebaut: ///gpio/set/json// Des Payload zum schalten mehrerer Ausgänge ist wie folgt aufgebaut. Hierbei werden die GPIO Pin und Wertepaare jeweils kommasepariert aufgelistet. Es muss immer ein valides JSON übergeben werden:  {"GPIO":"on/off","GPIO":"on/off","GPIO":"on/off"} GPIO: Nummer des zu schaltenden Pins on/off: Angabe, on der Pin ein-, oder ausgeschaltet werden soll. Alternativ kann auch 0/1 als Wert für Ein/Aus übergeben werden __Beispiel:__ Der Ausgang 1 (GPIO5) soll ein und der Ausgang 2 (GPIO6) soll ausgeschaltet werden: //loxberry/gpio/set/json {"5":"on", "6":"off"}// Das Plugin antwortet mit: //loxberry/gpio/5/stateText=ON// //loxberry/gpio/5/state=1// //loxberry/gpio/5/timestamp_ON=2021-03-16 13:41:59// //loxberry/gpio/6/stateText=OFF// //loxberry/gpio/6/state=0// //loxberry/gpio/6/timestamp_OFF=2021-03-16 13:41:59// === Verwendung der Eingänge === Eine Änderung des Wertes am Eingang wird automatisch (Interrupts) vom Plugin erkannt. Jede Änderung (von OFF nach ON oder ON nach OFF) wird über MQTT Nachrichten gemeldet. Die Nachricht ist wie folgt aufgebaut: Der Topic zum melden der Änderung ist wie folgt aufgebaut: ///gpio/// Folgende Werte werden hierbei übertragen: //stateText=OFF/ON // //state=0/1// //timestamp_OFF=// //timestamp_ON=// __Beispiel:__ Am Eingang 2 (GPIO4) wurde ein Signalwechsel von //Aus// nach //Ein// erkannt. Das Plugin antwortet mit: //loxberry/gpio/4/stateText=ON// //loxberry/gpio/4/state=1// //loxberry/gpio/4/timestamp_ON=2021-03-16 13:41:59// Am Eingang 2 wurde ein Signalwechsel von //Ein// nach //Aus// erkannt. Das Plugin antwortet mit: //loxberry/gpio/4/stateText=OFF// //loxberry/gpio/4/state=0// //loxberry/gpio/4/timestamp_OFF=2021-03-16 13:41:59// ===== Einrichtung in der Loxone Config Software ===== ==== Ausgänge ==== Wie die Ausgänge in der Loxone Config eingerichtet werden müssen, ist detailliert auf der Seite [[konfiguration:widget_help:widget_mqtt:mqtt_gateway:mqtt_schritt_fur_schritt_loxone_mqtt|MQTT - Schritt für Schritt: Loxone -> MQTT]] beschrieben. Die genauen Befehle und Bezeichnungen werden nach dem Speichern der Konfigurationsseite für jeden Kanal angezeigt. Hierzu ist unter jedem Eingabefeld ein Link, der nach dem anklicken die Informationen anzeigt. {{plugins:gpio:1269957546.png?h=250}} \\ **__Beispiel:__** Es soll der Ausgang 5 über einen Schalter geschaltet werden. - Anlegen eines Virtuellen Ausgang. Die Adresse ist wie folgt aufgebaut: ///dev/udp//// Im Beispiel ist die //=192.168.2.41, der =Default=11884// Somit lautet im Beispiel die zu verwendende Adresse: ///dev/udp/192.168.2.41/11884 // {{plugins:gpio:1269957268.png?h=250}} 2.   Anlegen eines Virtuellen Ausgang Befehls Konfigurieren der Befehle für Ein/Aus: **Ein:** //publish loxberry/gpio/set/5 on// **Aus:** //publish loxberry/gpio/set/5 off// {{plugins:gpio:1269957269.png?h=250}}\\ ==== Eingänge ==== Damit die Eingänge übermittelt werden können, muss im Loxberry und im Plugin ein Miniserver konfiguriert sein. Wie ihr die Eingänge in der Loxone Config anlegt, könnt ihr detailliert auf folgender Seite nachlesen [[konfiguration:widget_help:widget_mqtt:mqtt_gateway:mqtt_schritt_fur_schritt_mqtt_loxone|MQTT - Schritt für Schritt: MQTT -> Loxone]] Die genaue Bezeichnung für jeden Wert wird nach dem Speichern der Konfigurationsseite für jeden Kanal angezeigt. Hierzu ist unter jedem Eingabefeld ein Link, der nach dem anklicken die Informationen anzeigt. {{plugins:gpio:1269957548.png?h=216}} __**Beispiel:**__ Als Beispiel soll der Status von dem Eingang 1 in Loxone übernommen werden. - Aus der "Incoming View" des Plugins [[plugins:mqtt_gateway:start|MQTT Gateway]] wird die exakte Bezeichnung des Eingangs entnommen. In diesem Beispiel: "loxberry_gpio_5_state" (Es ist der Topic mit "_" statt "/") - Anlegen eines Virtuellen Eingangs. Als Bezeichnung wird exakt der Name des Eingangs, in dem Beispiel "loxberry_gpio_5_state" eingetragen. Zusätzlich wird das Häkchen bei "Als Digitaler Eingang verwenden" entfernt {{plugins:gpio:1269957270.png?h=250}} \\ ===== Roadmap ===== Die Roadmap wird hier gepflegt: https://github.com/joesie/GPIO/issues ===== Fragen stellen und Fehler melden ===== Fehler bitte im Github als Issue einstellen. Fragen bitte im Forum: https://www.loxforum.com/forum/projektforen/loxberry/plugins/296663-gpio-2-x stellen. \\ \\ \\