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:

version: "3.1"
services:

  # GPIO 16 Buzzer
  gpio_16_buzzer:
    image: reg.cloud.trizwo.it/t2t/voipio-gpio:armv7-latest
    depends_on:
      - mqtt
    environment:
      - VOIPIO_GPIO_PIN=16
    restart: always
    privileged: true

  # GPIO 19 LED
  gpio_19_led:
    image: reg.cloud.trizwo.it/t2t/voipio-gpio:armv7-latest
    depends_on:
      - mqtt
    environment:
      - VOIPIO_GPIO_PIN=19
    restart: always
    privileged: true


#12V Ports
  # GPIO 4
  gpio_4_12v:
    image: reg.cloud.trizwo.it/t2t/voipio-gpio:armv7-latest
    depends_on:
      - mqtt
    environment:
      - VOIPIO_GPIO_PIN=4
    restart: always
    privileged: true

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 dread aread

_default_ gesteuert von MQTT _dread_ ließt digitale Input Werte vom PIN _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/<PIN>/status

JSON Status Messages

voipio/gpio/<PIN>/value

current Value

voipio/gpio/<PIN>/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.