GitHub - openfaas/mqtt-connector: MQTT connector for OpenFaaS (original) (raw)

mqtt-connector

This is an MQTT connector for OpenFaaS.

build

About

Once configured and deployed it will deliver messages from selected topics to OpenFaaS functions.

There are various other connectors available for OpenFaaS which form "triggers" for event-driven architectures.

Prior work:

This is inspired by prior work by Alex Ellis: Collect, plot and analyse sensor readings from your IoT devices with OpenFaaS

Component parts:

Deploy in-cluster with Kubernetes

See helm chart for deployment instructions. Then continue at "Test the connector".

export TAG=0.3.1

make build push

Deploy out of cluster

go build

export GATEWAY_PASSWORD="" export BROKER="tcp://test.mosquitto.org:1883" export TOPIC="openfaas-sensor-data"

./mqtt-connector --gateway http://127.0.0.1:8080
--broker $BROKER
--gw-username admin
--gw-password $GATEWAY_PASSWORD
--topic $TOPIC

Deploy a function:

faas-cli deploy --name echo --image ghcr.io/openfaas/alpine:latest
--fprocess=cat
--annotation topic="openfaas-sensor-data"

Test the connector

Annotate a function with the annotation topic: <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>T</mi><mi>O</mi><mi>P</mi><mi>I</mi><mi>C</mi><mi mathvariant="normal">‘</mi><mo>&lt;</mo><mo>−</mo><mi>w</mi><mi>h</mi><mi>e</mi><mi>r</mi><mi>e</mi><mi mathvariant="normal">‘</mi></mrow><annotation encoding="application/x-tex">TOPIC <- where </annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7335em;vertical-align:-0.0391em;"></span><span class="mord mathnormal" style="margin-right:0.13889em;">TOP</span><span class="mord mathnormal" style="margin-right:0.07847em;">I</span><span class="mord mathnormal" style="margin-right:0.07153em;">C</span><span class="mord">‘</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">&lt;</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.7778em;vertical-align:-0.0833em;"></span><span class="mord">−</span><span class="mord mathnormal" style="margin-right:0.02691em;">w</span><span class="mord mathnormal">h</span><span class="mord mathnormal">ere</span><span class="mord">‘</span></span></span></span>TOPIC is the MQTT topic you care about.

2019/12/03 16:43:26 Topic: topic Broker: tcp://test.mosquitto.org:1883 2019/12/03 16:43:29 Invoking (http://192.168.0.35:8080) on topic: "topic", value: "{"sensor": "s1", "humidity": "52.09", "temp": "23.200", "ip": "192.168.0.40", "vdd33": "65535", "rssi": -45}" 2019/12/03 16:43:29 Invoke function: print-out Send: "{"sensor": "s1", "humidity": "52.09", "temp": "23.200", "ip": "192.168.0.40", "vdd33": "65535", "rssi": -45}" 2019/12/03 16:43:29 connector-sdk got result: [200] topic => print-out (24) bytes [200] topic => print-out {"temperature":"23.200"} 2019/12/03 16:43:29 tester got result: [200] topic => print-out (24) bytes

This data was generated on the topic topic by my NodeMCU device which publishes sensor data.

A node12 function named print-out returned the temperature as reported.

License

MIT