GPIO ---- Es ist jeweils eine Instanz des Containers zuständig für einen GPIO Pin. Der zu steuernde PIN wird über eine Umgebungsvariable in der Compose Datei konfiguriert: .. literalinclude:: ./gpio.yml optionale Umgebungsvariablen, Standartwerte können in der Compose Datei überschrieben werden.: ==================== ================ ========================================== ENV Standart Beschreibung ==================== ================ ========================================== VOIPIO_GPIO_PIN -1 GPIO PIN Nummer VOIPIO_GPIO_MODE default _default_ gesteuert von MQTT dread _dread_ ließt digitale Input Werte vom PIN aread _aread_ gleiches mit analogen Werten VOIPIO_MQTT_SERVER mqtt IP oder Hostname des MQTT Broker VOIPIO_MQTT_PORT 1883 MQTT Port VOIPIO_MQTT_USER server MQTT Username VOIPIO_MQTT_PASS server MQTT Password VOIPIO_MAX_RING_TIME 60 Zeit in Sekunden, bevor ein eingeschalteter PIN ausgeschaltet wird. ==================== ================ ========================================== Wobei die PIN Nummer für ``VOIPIO_GPIO_PIN`` wie folgend nummeriert ist: ==== ====== ============== Pin Container Name ==== ====== ============== 16 Buzzer gpio_16_buzzer 19 LED gpio_19_led 4 12v gpio_4_12v 17 12v gpio_17_12v 18 12v gpio_18_12v 27 12v gpio_27_12v 22 5v gpio_22_5v 23 5v gpio_23_5v 24 5v gpio_24_5v 25 5v gpio_25_5v ==== ====== ============== Jeder GPIO Port registriert sich am ``MQTT Broker`` und sendet seinen Status. Außerdem horcht er auf bestimmte Topics: ======================== =============================== Topic Beschreibung ======================== =============================== voipio/gpio//status JSON Status Messages voipio/gpio//value current Value voipio/gpio//cmd Listen Topic for Input Commands ======================== =============================== Beispiele ^^^^^^^^^ Registriert sich ein GPIO Container am MQTT Broker, verschickt er eine Birthmessage mit seinem aktuellem Status:: voipio/gpio/19/status { "pin": "19", "piBoardRev": 2, "value": null, "source": "gpio_bot", "state": "up", "mode": "default" } Und abboniert das Controll Topic ``voipio/gpio/19/cmd``. Hier erwartet dieser GPIO Container ``GPIO Pin 19`` Kommandos, wie Beispielweise das Einschalten des Pin:: voipio/gpio/19/cmd digital write 1 Ändert sich der Schaltzustand eines Pin, wird von GPIO Container wieder eine Status Meldung ausgeben ins MQTT:: voipio/gpio/19/value 1 bzw. als ``JSON`` Nachricht:: voipio/gpio/19/status {" pin": "19", "piBoardRev": 2, "value": 1, "source": "gpio_bot", "state": "up", "mode": "default" } Ausschalten lässt sich der Pin dann mit dem Befehl ``digital write 0``:: voipio/gpio/19/cmd digital write 0 voipio/gpio/19/value 0 voipio/gpio/19/status { "pin": "19", "piBoardRev": 2, "value": 0, "source": "gpio_bot", "state": "up", "mode": "default" } Soll der Pin start einfach nur eingeschlatet zu werden einen RTTTL Ton abspielen, wird ihm über eine MQTT Meldung dieser Ton geschickt:: voipio/gpio/19/cmd playrtttl Benny Hill:d=16,o=5[....] voipio/gpio/19/value playingBenny Hill voipio/gpio/19/value 0 voipio/gpio/19/status { "pin": "19", "piBoardRev": 2, "value": 0, "source": "gpio_bot", "state": "up", "mode": "default" } Oder ein Morsecode zur Signalisierung eines Anrufes:: voipio/gpio/19/cmd morse Text to morse voipio/gpio/19/value morsing SOS voipio/gpio/19/value 0 voipio/gpio/19/status { "pin": "19", "piBoardRev": 2, "value": 0, "source": "gpio_bot", "state": "up", "mode": "default" } Bemerkt der MQTT Broker den Verlust der Verbindung zum GPIO Container, verschickt der Broker an alle Clients die das Topic des Containers abonniert haben, eine so genannte WILL Message. Diese hat der Container dem Broker beim ursprünglichem Verbindungaufbau mitgegeben und signalisiert alle Subscribern, dass der GPIO derzeit nicht verbunden ist:: voipio/gpio/19/status { "pin": "19", "piBoardRev": 2, "value": null, "source": "gpio_bot", "state": "down", "mode": "default" } In Node Red ist eine Node verfügbar, mit der diese Optionen gesteuert werden können.