Skip to content

Instantly share code, notes, and snippets.

@craftoid
Last active June 9, 2020 22:35
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save craftoid/6f2c4325859197aba9b46be4582100c8 to your computer and use it in GitHub Desktop.
Save craftoid/6f2c4325859197aba9b46be4582100c8 to your computer and use it in GitHub Desktop.
OSC 2 MQTT with IanniX

Converting OSC to MQTT, and back.

This example uses the IanniX sequencer to generate a stream of OSC packages, send them to an MQTT broker, receive them again, then send them as OSC packages to a Processing Sketch for visualization.
As MQTT topic we use the OSC-path with a unique prefix.

MQTT brokers

The flow is preconfigured with three different MQTT brokers:

  • localhost
  • test.mosquitto.org
  • mqtt.eclipse.org

Visualization

Use the processing sketch included in the IanniX Patches folder. You can find it on github. The sketch should also come with your Iannix install. For OSX this is: /Applications/IanniX.app/Contents/Resources/Patches/Processing

Make sure to change the OSC port in the processing sketch from 57120 to 57121.

Requirements

[
{
"id": "1bd2b382.4dd4f4",
"type": "tab",
"label": "OSC 2 MQTT with IanniX",
"disabled": false,
"info": "Converting OSC to MQTT, and back.\n\nThis example uses the [IanniX](https://www.iannix.org/en/) sequencer to generate a stream of OSC packages, send them to an MQTT broker, receive them again, then send them as OSC packages to a Processing Sketch for visualization. \nAs MQTT topic we use the OSC-path with a unique prefix.\n\n## MQTT brokers\n\nThe flow is preconfigured with three different MQTT brokers:\n\n* localhost\n* test.mosquitto.org\n* mqtt.eclipse.org\n\n## Visualization\n\nUse the processing sketch included in the IanniX Patches folder. You can find it [on github](https://github.com/buzzinglight/IanniX/tree/master/Patches/Processing). The sketch should also come with your Iannix install. For OSX this is: `/Applications/IanniX.app/Contents/Resources/Patches/Processing`\n\nMake sure to change the OSC port in the processing sketch from 57120 to 57121.\n\n## Requirements\n\n* [node-red-contrib-osc](https://flows.nodered.org/node/node-red-contrib-osc)"
},
{
"id": "a4f954b.ada4d28",
"type": "mqtt-broker",
"z": "",
"name": "localhost",
"broker": "localhost",
"port": "1883",
"clientid": "",
"usetls": false,
"compatmode": false,
"keepalive": "60",
"cleansession": true,
"birthTopic": "",
"birthQos": "0",
"birthPayload": "",
"closeTopic": "",
"closeQos": "0",
"closePayload": "",
"willTopic": "",
"willQos": "0",
"willPayload": ""
},
{
"id": "8ea55f65.a37958",
"type": "mqtt-broker",
"z": "",
"name": "mqtt.eclipse.org",
"broker": "mqtt.eclipse.org",
"port": "1883",
"clientid": "",
"usetls": false,
"compatmode": false,
"keepalive": "60",
"cleansession": true,
"birthTopic": "",
"birthQos": "0",
"birthPayload": "",
"closeTopic": "",
"closeQos": "0",
"closePayload": "",
"willTopic": "",
"willQos": "0",
"willPayload": ""
},
{
"id": "1dd4851e.412ce3",
"type": "mqtt-broker",
"z": "",
"name": "test.mosquitto.org",
"broker": "test.mosquitto.org",
"port": "1883",
"clientid": "",
"usetls": false,
"compatmode": false,
"keepalive": "60",
"cleansession": true,
"birthTopic": "",
"birthQos": "0",
"birthPayload": "",
"closeTopic": "",
"closeQos": "0",
"closePayload": "",
"willTopic": "",
"willQos": "0",
"willPayload": ""
},
{
"id": "9e0b1c81.2cfd58",
"type": "osc",
"z": "1bd2b382.4dd4f4",
"name": "",
"path": "",
"metadata": false,
"x": 250,
"y": 200,
"wires": [
[
"377f7eea.8bab4a"
]
]
},
{
"id": "1e240763.dd1161",
"type": "udp in",
"z": "1bd2b382.4dd4f4",
"name": "",
"iface": "",
"port": "57120",
"ipv": "udp4",
"multicast": "false",
"group": "",
"datatype": "buffer",
"x": 100,
"y": 200,
"wires": [
[
"9e0b1c81.2cfd58"
]
]
},
{
"id": "3f085b2c.3d462c",
"type": "mqtt out",
"z": "1bd2b382.4dd4f4",
"name": "",
"topic": "",
"qos": "",
"retain": "",
"broker": "a4f954b.ada4d28",
"x": 890,
"y": 200,
"wires": []
},
{
"id": "f390cb1f.223058",
"type": "mqtt in",
"z": "1bd2b382.4dd4f4",
"name": "",
"topic": "plab/feeds/iannix/#",
"qos": "0",
"datatype": "json",
"broker": "a4f954b.ada4d28",
"x": 130,
"y": 300,
"wires": [
[
"68caace7.b2aa64"
]
]
},
{
"id": "377f7eea.8bab4a",
"type": "change",
"z": "1bd2b382.4dd4f4",
"name": "add prefix",
"rules": [
{
"t": "set",
"p": "topic",
"pt": "msg",
"to": "$join([$flowContext(\"prefix\"), topic])",
"tot": "jsonata"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 440,
"y": 200,
"wires": [
[
"10e8f26d.b035ee",
"3f085b2c.3d462c"
]
]
},
{
"id": "b2f9d670.9038b8",
"type": "inject",
"z": "1bd2b382.4dd4f4",
"name": "",
"topic": "",
"payload": "plab/feeds/iannix",
"payloadType": "str",
"repeat": "",
"crontab": "",
"once": true,
"onceDelay": 0.1,
"x": 150,
"y": 100,
"wires": [
[
"f2cbadc0.4d87e8"
]
]
},
{
"id": "f2cbadc0.4d87e8",
"type": "change",
"z": "1bd2b382.4dd4f4",
"name": "set prefix",
"rules": [
{
"t": "set",
"p": "prefix",
"pt": "flow",
"to": "payload",
"tot": "msg"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 440,
"y": 100,
"wires": [
[]
]
},
{
"id": "f696638b.0c69d8",
"type": "comment",
"z": "1bd2b382.4dd4f4",
"name": "set topic prefix",
"info": "",
"x": 120,
"y": 60,
"wires": []
},
{
"id": "259ef9e3.cf8046",
"type": "comment",
"z": "1bd2b382.4dd4f4",
"name": "receive OSC messages from IanniX",
"info": "",
"x": 180,
"y": 160,
"wires": []
},
{
"id": "65a5b34f.9f0e0c",
"type": "comment",
"z": "1bd2b382.4dd4f4",
"name": "... send MQTT messages to the broker",
"info": "",
"x": 750,
"y": 160,
"wires": []
},
{
"id": "132ce4b7.b27cbb",
"type": "comment",
"z": "1bd2b382.4dd4f4",
"name": "receive MQTT messages from the broker ...",
"info": "",
"x": 210,
"y": 260,
"wires": []
},
{
"id": "68caace7.b2aa64",
"type": "change",
"z": "1bd2b382.4dd4f4",
"name": "remove prefix",
"rules": [
{
"t": "set",
"p": "topic",
"pt": "msg",
"to": "$replace(topic, $flowContext('prefix'), '')",
"tot": "jsonata"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 460,
"y": 300,
"wires": [
[
"ba16d961.6125a"
]
]
},
{
"id": "ba16d961.6125a",
"type": "osc",
"z": "1bd2b382.4dd4f4",
"name": "",
"path": "",
"metadata": false,
"x": 650,
"y": 300,
"wires": [
[
"cc273a95.3d417"
]
]
},
{
"id": "cc273a95.3d417",
"type": "udp out",
"z": "1bd2b382.4dd4f4",
"name": "",
"addr": "localhost",
"iface": "",
"port": "57121",
"ipv": "udp4",
"outport": "",
"base64": false,
"multicast": "false",
"x": 840,
"y": 300,
"wires": []
},
{
"id": "e2a164e8.afa0b8",
"type": "comment",
"z": "1bd2b382.4dd4f4",
"name": "... send OSC messages to processing",
"info": "",
"x": 750,
"y": 260,
"wires": []
},
{
"id": "10e8f26d.b035ee",
"type": "delay",
"z": "1bd2b382.4dd4f4",
"d": true,
"name": "",
"pauseType": "rate",
"timeout": "5",
"timeoutUnits": "seconds",
"rate": "100",
"nbRateUnits": "1",
"rateUnits": "second",
"randomFirst": "1",
"randomLast": "5",
"randomUnits": "seconds",
"drop": true,
"x": 680,
"y": 100,
"wires": [
[
"3f085b2c.3d462c"
]
]
},
{
"id": "86c16ce6.395528",
"type": "comment",
"z": "1bd2b382.4dd4f4",
"name": "use the lmiter if you want ...",
"info": "",
"x": 720,
"y": 60,
"wires": []
}
]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment