
In this example we are connecting a gamecontroller via bluetooth.
Connect via Bluetooth #
Please NOTE: Bluetooth manual basics
To create a connection with the built-in utils, you can follow this slightly more manual process using bluetoothctl
.
hcitool scan # to get the MAC address of your device
bluetoothctl
power on # in case the bluez controller power is off
agent on
scan on # wait for your device's address to show up here
scan off
trust MAC_ADDRESS
pair MAC_ADDRRESS
connect MAC_ADDRESS
So let’s connect
To connect via bluetooth enter the bluetooth commandline:
bluetoothctl
Start the scan:
[bluetooth]# power on
[bluetooth]# agent on
[bluetooth]# scan on
Discovery started
Power on the MIDI Pad, eventuelly it will be discovered and you will see something like:
[NEW] Device E4:17:D8:07:7F:78 8Bitdo SN30 Pro
Turn scan off:
[bluetooth]# scan off
Pair the device by entering it’s MAC address:
[bluetooth]# pair E4:17:D8:07:7F:78
Output:
[CHG] Device E4:17:D8:07:7F:78 Connected: yes
[CHG] Device E4:17:D8:07:7F:78 Bonded: yes
[CHG] Device E4:17:D8:07:7F:78 Modalias: usb:v2DC8p6101d0100
[CHG] Device E4:17:D8:07:7F:78 UUIDs: 00001124-0000-1000-8000-00805f9b34fb
[CHG] Device E4:17:D8:07:7F:78 UUIDs: 00001200-0000-1000-8000-00805f9b34fb
[CHG] Device E4:17:D8:07:7F:78 ServicesResolved: yes
[CHG] Device E4:17:D8:07:7F:78 Paired: yes
Pairing successful
[CHG] Device E4:17:D8:07:7F:78 ServicesResolved: no
[CHG] Device E4:17:D8:07:7F:78 Connected: no
Connect the device by entering it’s MAC address:
[bluetooth]# connect E4:17:D8:07:7F:78
Output:
Attempting to connect to E4:17:D8:07:7F:78
[CHG] Device E4:17:D8:07:7F:78 Connected: yes
Connection successful
The device is now paired with the system, you can exit the bluetooth terminal.
dmesg
[33943.664791] Bluetooth: HIDP (Human Interface Emulation) ver 1.2
[33943.664839] Bluetooth: HIDP socket layer initialized
[33946.901759] hid-generic 0005:2DC8:6101.0001: unknown main item tag 0x0
[33946.902220] input: 8Bitdo SN30 Pro as /devices/virtual/tty/ttyBT0/hci0/hci0:50/0005:2DC8:6101.0001/input/input3
[33946.902457] hid-generic 0005:2DC8:6101.0001: input,hidraw0: BLUETOOTH HID v1.00 Gamepad [8Bitdo SN30 Pro] on e3:e8:5a:8c:7e:1b
You can see the port number: 142
Test gamepad input #
evtest
sudo evtest
No device specified, trying to scan all of /dev/input/event*
Available devices:
/dev/input/event0: sunxi-ir
/dev/input/event1: 8Bitdo SN30 Pro
Select the device event number [0-1]:1
jstest
jstest /dev/input/js0
Driver version is 2.1.0.
Joystick (8Bitdo SN30 Pro) has 8 axes (X, Y, Z, Rz, Gas, Brake, Hat0X, Hat0Y)
and 16 buttons (BtnA, BtnB, BtnC, BtnX, BtnY, BtnZ, BtnTL, BtnTR, BtnTL2, BtnTR2, BtnSelect, BtnStart, BtnMode, BtnThumbL, BtnThumbR, ?).
Testing ... (interrupt to exit)
Axes: 0: 0 1: 0 2: 0 3: 0 4: 0 5: 0 6: 0 7: 0 Buttons: 0:off 1:off 2:off 3:off 4:off 5:off 6:off 7:off 8:off
Axes: 0: 0 1: 0 2: 0 3: 0 4: 0 5: 0 6: 0 7: 0 Buttons: 0:off 1:off 2:off 3:off 4:off 5:off 6:off 7:off 8:off
Axes: 0: 0 1: 0 2: 0 3: 0 4: 0 5: 0 6: 0 7: 0 Buttons: 0:off 1:off 2:off 3:off 4:off 5:off 6:off 7:off 8:off
Axes: 0: 0 1: 0 2: 0 3: 0 4: 0 5: 0 6: 0 7: 0 Buttons: 0:off 1:off 2:off 3:off 4:off 5:off 6:off 7:off 8:off
Axes: 0: 0 1: 0 2: 0 3: 0 4: 0 5: 0 6: 0 7: 0 Buttons: 0:off 1:off 2:off 3:off 4:off 5:off 6:off 7:off 8:off
Axes: 0: 0 1: 0 2: 0 3: 0 4: 0 5: 0 6: 0 7: 0 Buttons: 0:off 1:off 2:off 3:off 4:off 5:off 6:off 7:off 8:off
Axes: 0: 0 1: 0 2: 0 3: 0 4: 0 5: 0 6: 0 7: 0 Buttons: 0:off 1:off 2:off 3:off 4:off 5:off 6:off 7:off 8:off
Axes: 0: 0 1: 0 2: 0 3: 0 4: 0 5: 0 6: 0 7: 0 Buttons: 0:off 1:off 2:off 3:off 4:off 5:off 6:off 7:off 8:off
Axes: 0: 0 1: 0 2: 0 3: 0 4:-32767 5: 0 6: 0 7: 0 Buttons: 0:off 1:off 2:off 3:off 4:off 5:off 6:off 7:off 8:off
Axes: 0: 0 1: 0 2: 0 3: 0 4:-32767 5:-32767 6: 0 7: 0 Buttons: 0:off 1:off 2:off 3:off 4:off 5:off 6:off 7:off 8:off
Axes: 0: 0 1: 0 2: 0 3: 0 4:-32767 5:-32767 6: 0 7: 0 Buttons: 0:off 1:off 2:off 3:off 4:off 5:off 6:off 7:off 8:off
Axes: 0: 0 1: 0 2: 0 3: 0 4:-32767 5:-32767 6: 0 7: 0 Buttons: 0:off 1:off 2:off 3:off 4:off 5:off 6:off 7:off 8:off
Axes: 0: 2702 1: 0 2: 0 3: 0 4:-32767 5:-32767 6: 0 7: 0 Buttons: 0:off 1:off 2:off 3:off 4:off 5:off 6:off 7:off 8:off
Axes: 0: 5067 1: 0 2: 0 3: 0 4:-32767 5:-32767 6: 0 7: 0 Buttons: 0:off 1:off 2:off 3:off 4:off 5:off 6:off 7:off 8:off
Axes: 0: 13174 1: 0 2: 0 3: 0 4:-32767 5:-32767 6: 0 7: 0 Buttons: 0:off 1:off 2:off 3:off 4:off 5:off 6:off 7:off 8:off
Axes: 0: 13174 1: -2027 2: 0 3: 0 4:-32767 5:-32767 6: 0 7: 0 Buttons: 0:off 1:off 2:off 3:off 4:off 5:off 6:off 7:off 8:off
Axes: 0: 21620 1: -2027 2: 0 3: 0 4:-32767 5:-32767 6: 0 7: 0 Buttons: 0:off 1:off 2:off 3:off 4:off 5:off 6:off 7:off 8:off
Axes: 0: 21620 1: -2365 2: 0 3: 0 4:-32767 5:-32767 6: 0 7: 0 Buttons: 0:off 1:off 2:off 3:off 4:off 5:off 6:off 7:off 8:off
Axes: 0: 30065 1: -2365 2: 0 3: 0 4:-32767 5:-32767 6: 0 7: 0 Buttons: 0:off 1:off 2:off 3:off 4:off 5:off 6:off 7:off 8:off
Axes: 0: 30065 1: -5743 2: 0 3: 0 4:-32767 5:-32767 6: 0 7: 0 Buttons: 0:off 1:off 2:off 3:off 4:off 5:off 6:off 7:off 8:off
Axes: 0: 32767 1: -5743 2: 0 3: 0 4:-32767 5:-32767 6: 0 7: 0 Buttons: 0:off 1:off 2:off 3:off 4:off 5:off 6:off 7:off 8:off
Axes: 0: 32767 1: -9121 2: 0 3: 0 4:-32767 5:-32767 6: 0 7: 0 Buttons: 0:off 1:off 2:off 3:off 4:off 5:off 6:off 7:off 8:off
Axes: 0: 32767 1:-10473 2: 0 3: 0 4:-32767 5:-32767 6: 0 7: 0 Buttons: 0:off 1:off 2:off 3:off 4:off 5:off 6:off 7:off 8:off
Axes: 0: 0 1:-10473 2: 0 3: 0 4:-32767 5:-32767 6: 0 7: 0 Buttons: 0:off 1:off 2:off 3:off 4:off 5:off 6:off 7:off 8:off
Axes: 0: 0 1: -7770 2: 0 3: 0 4:-32767 5:-32767 6: 0 7: 0 Buttons: 0:off 1:off 2:off 3:off 4:off 5:off 6:off 7:off 8:off
Axes: 0: 0 1: 0 2: 0 3: 0 4:-32767 5:-32767 6: 0 7: 0 Buttons: 0:off 1:off 2:off 3:off 4:off 5:off 6:off 7:off 8:off
Axes: 0: -7095 1: 0 2: 0 3: 0 4:-32767 5:-32767 6: 0 7: 0 Buttons: 0:off 1:off 2:off 3:off 4:off 5:off 6:off 7:off 8:off
Axes: 0:-11824 1: 0 2: 0 3: 0 4:-32767 5:-32767 6: 0 7: 0 Buttons: 0:off 1:off 2:off 3:off 4:off 5:off 6:off 7:off 8:off
Axes: 0:-16553 1: 0 2: 0 3: 0 4:-32767 5:-32767 6: 0 7: 0 Buttons: 0:off 1:off 2:off 3:off 4:off 5:off 6:off 7:off 8:off
Axes: 0:-23985 1: 0 2: 0 3: 0 4:-32767 5:-32767 6: 0 7: 0 Buttons: 0:off 1:off 2:off 3:off 4:off 5:off 6:off 7:off 8:off
Axes: 0:-32767 1: 0 2: 0 3: 0 4:-32767 5:-32767 6: 0 7: 0 Buttons: 0:off 1:off 2:off 3:off 4:off 5:off 6:off 7:off 8:off
Axes: 0:-32767 1: -676 2: 0 3: 0 4:-32767 5:-32767 6: 0 7: 0 Buttons: 0:off 1:off 2:off 3:off 4:off 5:off 6:off 7:off 8:off
Axes: 0:-32767 1:-12837 2: 0 3: 0 4:-32767 5:-32767 6: 0 7: 0 Buttons: 0:off 1:off 2:off 3:off 4:off 5:off 6:off 7:off 8:off
Axes: 0:-32093 1:-12837 2: 0 3: 0 4:-32767 5:-32767 6: 0 7: 0 Buttons: 0:off 1:off 2:off 3:off 4:off 5:off 6:off 7:off 8:off
Axes: 0:-32093 1:-24323 2: 0 3: 0 4:-32767 5:-32767 6: 0 7: 0 Buttons: 0:off 1:off 2:off 3:off 4:off 5:off 6:off 7:off 8:off
Axes: 0:-23985 1:-24323 2: 0 3: 0 4:-32767 5:-32767 6: 0 7: 0 Buttons: 0:off 1:off 2:off 3:off 4:off 5:off 6:off 7:off 8:off
Axes: 0:-23985 1:-32431 2: 0 3: 0 4:-32767 5:-32767 6: 0 7: 0 Buttons: 0:off 1:off 2:off 3:off 4:off 5:off 6:off 7:off 8:off
Axes: 0:-16216 1:-32431 2: 0 3: 0 4:-32767 5:-32767 6: 0 7: 0 Buttons: 0:off 1:off 2:off 3:off 4:off 5:off 6:off 7:off 8:off
Axes: 0:-16216 1:-32767 2: 0 3: 0 4:-32767 5:-32767 6: 0 7: 0 Buttons: 0:off 1:off 2:off 3:off 4:off 5:off 6:off 7:off 8:off
Axes: 0: 0 1:-32767 2: 0 3: 0 4:-32767 5:-32767 6: 0 7: 0 Buttons: 0:off 1:off 2:off 3:off 4:off 5:off 6:off 7:off 8:off
Axes: 0: 3378 1:-32767 2: 0 3: 0 4:-32767 5:-32767 6: 0 7: 0 Buttons: 0:off 1:off 2:off 3:off 4:off 5:off 6:off 7:off 8:off
Axes: 0: 8445 1:-32767 2: 0 3: 0 4:-32767 5:-32767 6: 0 7: 0 Buttons: 0:off 1:off 2:off 3:off 4:off 5:off 6:off 7:off 8:off
Axes: 0: 10810 1:-32767 2: 0 3: 0 4:-32767 5:-32767 6: 0 7: 0 Buttons: 0:off 1:off 2:off 3:off 4:off 5:off 6:off 7:off 8:off
Axes: 0: 17566 1:-32767 2: 0 3: 0 4:-32767 5:-32767 6: 0 7: 0 Buttons: 0:off 1:off 2:off 3:off 4:off 5:off 6:off 7:off 8:off
Axes: 0: 25336 1:-32767 2: 0 3: 0 4:-32767 5:-32767 6: 0 7: 0 Buttons: 0:off 1:off 2:off 3:off 4:off 5:off 6:off 7:off 8:off
Node-Red #

In node-red you can also catch the output of jstest and put it trough some functions to get all the gamepad data (like pygame):

UI

FLOW:
[{"id":"34ba443e.fcb78c","type":"tab","label":"Flow 1","disabled":false,"info":""},{"id":"97ccaa0f.0545c8","type":"exec","z":"34ba443e.fcb78c","command":"jstest /dev/input/js0","addpay":false,"append":"","useSpawn":"true","timer":"","oldrc":false,"name":"","x":370,"y":580,"wires":[["679a4161.847f"],[],[]]},{"id":"fd5c70bc.5841b","type":"inject","z":"34ba443e.fcb78c","name":"Start","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":true,"onceDelay":0.1,"x":190,"y":580,"wires":[["97ccaa0f.0545c8"]]},{"id":"2ab05681.16c22a","type":"json","z":"34ba443e.fcb78c","name":"","property":"payload","action":"","pretty":false,"x":710,"y":580,"wires":[["958957b1.b14458"]]},{"id":"679a4161.847f","type":"function","z":"34ba443e.fcb78c","name":"Decode","func":"var resArr = msg.payload.split(\"Axes\");\n\nvar res = \"Axes\" + resArr[resArr.length -1];\n\nres = res.replace(/ /g, \" \");\nres = res.replace(/ /g, \" \");\nres = res.replace(/ /g, \" \");\n\nres = res.replace(/: /g, \":\");\n\nres = res.replace(/:/g, \"\\\":\\\"\");\nres = res.replace(/ /g, \"\\\",\\\"\");\n\nres = res.replace(/Axes\\\":/g, \"\\\"Axes\\\":{\");\nres = res.replace(/Buttons\\\":/g, \"},\\\"Buttons\\\":{\");\n\nres = '{' + res + '}}';\nres = res.replace(/,\\\"}/g, \"}\");\n\n\nreturn {'payload':res};","outputs":1,"noerr":0,"x":560,"y":580,"wires":[["2ab05681.16c22a"]]},{"id":"958957b1.b14458","type":"function","z":"34ba443e.fcb78c","name":"","func":"return [{'payload': msg.payload.Axes[0]},\n {'payload': msg.payload.Axes[1]},\n {'payload': msg.payload.Axes[2]},\n {'payload': msg.payload.Axes[3]},\n {'payload': msg.payload.Axes[4]},\n {'payload': msg.payload.Axes[5]},\n {'payload': msg.payload.Axes[6]},\n {'payload': msg.payload.Axes[7]},\n {'payload': msg.payload.Axes[8]},\n {'payload': msg.payload.Axes[9]},\n {'payload': msg.payload.Buttons[0]},\n {'payload': msg.payload.Buttons[1]},\n {'payload': msg.payload.Buttons[2]},\n {'payload': msg.payload.Buttons[3]},\n {'payload': msg.payload.Buttons[4]},\n {'payload': msg.payload.Buttons[5]},\n {'payload': msg.payload.Buttons[6]},\n {'payload': msg.payload.Buttons[7]},\n {'payload': msg.payload.Buttons[8]},\n {'payload': msg.payload.Buttons[9]},\n {'payload': msg.payload.Buttons[10]},\n {'payload': msg.payload.Buttons[11]},\n {'payload': msg.payload.Buttons[12]},\n {'payload': msg.payload.Buttons[13]},\n {'payload': msg.payload.Buttons[14]},\n {'payload': msg.payload.Buttons[15]},\n {'payload': msg.payload.Buttons[16]},\n {'payload': msg.payload.Buttons[17]},\n {'payload': msg.payload.Buttons[18]},\n {'payload': msg.payload.Buttons[19]},\n {'payload': msg.payload.Buttons[20]},\n {'payload': msg.payload.Buttons[21]},\n {'payload': msg.payload.Buttons[22]},\n {'payload': msg.payload.Buttons[23]},\n {'payload': msg.payload.Buttons[24]},\n {'payload': msg.payload.Buttons[25]},\n {'payload': msg.payload.Buttons[26]},\n {'payload': msg.payload.Buttons[27]},\n {'payload': msg.payload.Buttons[28]},\n {'payload': msg.payload.Buttons[29]}];","outputs":40,"noerr":0,"x":850,"y":580,"wires":[["e6e4902a.091b1"],["325b0e1.8d782f2"],["4d531f51.d747d"],["4850e96.e287018"],["52c01436.d9821c"],["e9edf17f.6793e"],["9c5f5e4f.496df"],["ab416bbe.3cbb78"],["13920e4a.04ae22"],["9696c05c.f55cc"],["7a97e1ff.ac42b"],["9dd6c484.0a44e8"],["2b8c22cb.0590ce"],["39fca120.123c3e"],["1c9d741e.bf607c"],["5387a6ee.793b08"],["778dc471.b6d46c"],["8628f944.beea88"],["22da13a7.dbd2ac"],["6d7b4193.a676c"],["d8c50d2e.f02c9"],["394ee31a.a89bac"],["f614702f.49c93"],["95d3c8b5.7ca458"],["b53bf5ae.43bde8"],["9d9e437b.4f3e3"],["7f1b10af.fe49"],["af963e9a.76a1e"],["1901f994.007d96"],["772f9183.f8ebf"],["ac9c9985.b8f098"],["85b880bc.92121"],["4f03dccd.009ea4"],["5e9cb928.f06368"],["373e644e.0ad47c"],["74eb023b.1eebfc"],["d07be527.8cc958"],["e5635884.027868"],["a17a4729.244628"],["e0a15b49.902c28"]]},{"id":"e6e4902a.091b1","type":"ui_gauge","z":"34ba443e.fcb78c","name":"","group":"9b6bc4eb.3b6f08","order":1,"width":"2","height":"2","gtype":"compass","title":"0","label":"","format":"{{value}}","min":"-35000","max":"35000","colors":["#00b500","#e6e600","#ca3838"],"seg1":"","seg2":"","x":1110,"y":180,"wires":[]},{"id":"325b0e1.8d782f2","type":"ui_gauge","z":"34ba443e.fcb78c","name":"","group":"9b6bc4eb.3b6f08","order":3,"width":"2","height":"2","gtype":"compass","title":"1","label":"","format":"{{value}}","min":"-35000","max":"35000","colors":["#00b500","#e6e600","#ca3838"],"seg1":"","seg2":"","x":1110,"y":220,"wires":[]},{"id":"4d531f51.d747d","type":"ui_gauge","z":"34ba443e.fcb78c","name":"","group":"9b6bc4eb.3b6f08","order":4,"width":"2","height":"2","gtype":"compass","title":"2","label":"","format":"{{value}}","min":"-35000","max":"35000","colors":["#00b500","#e6e600","#ca3838"],"seg1":"","seg2":"","x":1110,"y":260,"wires":[]},{"id":"4850e96.e287018","type":"ui_gauge","z":"34ba443e.fcb78c","name":"","group":"9b6bc4eb.3b6f08","order":5,"width":"2","height":"2","gtype":"compass","title":"3","label":"","format":"{{value}}","min":"-35000","max":"35000","colors":["#00b500","#e6e600","#ca3838"],"seg1":"","seg2":"","x":1110,"y":300,"wires":[]},{"id":"52c01436.d9821c","type":"ui_gauge","z":"34ba443e.fcb78c","name":"","group":"9b6bc4eb.3b6f08","order":6,"width":"2","height":"2","gtype":"compass","title":"4","label":"","format":"{{value}}","min":"-35000","max":"35000","colors":["#00b500","#e6e600","#ca3838"],"seg1":"","seg2":"","x":1110,"y":340,"wires":[]},{"id":"e9edf17f.6793e","type":"ui_gauge","z":"34ba443e.fcb78c","name":"","group":"9b6bc4eb.3b6f08","order":7,"width":"2","height":"2","gtype":"compass","title":"5","label":"","format":"{{value}}","min":"-35000","max":"35000","colors":["#00b500","#e6e600","#ca3838"],"seg1":"","seg2":"","x":1110,"y":380,"wires":[]},{"id":"9c5f5e4f.496df","type":"ui_gauge","z":"34ba443e.fcb78c","name":"","group":"9b6bc4eb.3b6f08","order":8,"width":"2","height":"2","gtype":"compass","title":"6","label":"","format":"{{value}}","min":"-35000","max":"35000","colors":["#00b500","#e6e600","#ca3838"],"seg1":"","seg2":"","x":1110,"y":420,"wires":[]},{"id":"ab416bbe.3cbb78","type":"ui_gauge","z":"34ba443e.fcb78c","name":"","group":"9b6bc4eb.3b6f08","order":9,"width":"2","height":"2","gtype":"compass","title":"7","label":"","format":"{{value}}","min":"-35000","max":"35000","colors":["#00b500","#e6e600","#ca3838"],"seg1":"","seg2":"","x":1110,"y":460,"wires":[]},{"id":"13920e4a.04ae22","type":"ui_gauge","z":"34ba443e.fcb78c","name":"","group":"9b6bc4eb.3b6f08","order":10,"width":"2","height":"2","gtype":"compass","title":"8","label":"","format":"{{value}}","min":"-35000","max":"35000","colors":["#00b500","#e6e600","#ca3838"],"seg1":"","seg2":"","x":1110,"y":500,"wires":[]},{"id":"9696c05c.f55cc","type":"ui_gauge","z":"34ba443e.fcb78c","name":"","group":"9b6bc4eb.3b6f08","order":11,"width":"2","height":"2","gtype":"compass","title":"9","label":"","format":"{{value}}","min":"-35000","max":"35000","colors":["#00b500","#e6e600","#ca3838"],"seg1":"","seg2":"","x":1110,"y":540,"wires":[]},{"id":"7a97e1ff.ac42b","type":"ui_switch","z":"34ba443e.fcb78c","name":"","label":"0","tooltip":"","group":"9b6bc4eb.3b6f08","order":12,"width":"2","height":"1","passthru":true,"decouple":"false","topic":"","style":"","onvalue":"on","onvalueType":"str","onicon":"","oncolor":"","offvalue":"off","offvalueType":"str","officon":"","offcolor":"","x":1250,"y":180,"wires":[[]]},{"id":"9dd6c484.0a44e8","type":"ui_switch","z":"34ba443e.fcb78c","name":"","label":"1","tooltip":"","group":"9b6bc4eb.3b6f08","order":13,"width":2,"height":1,"passthru":true,"decouple":"false","topic":"","style":"","onvalue":"on","onvalueType":"str","onicon":"","oncolor":"","offvalue":"off","offvalueType":"str","officon":"","offcolor":"","x":1250,"y":220,"wires":[[]]},{"id":"2b8c22cb.0590ce","type":"ui_switch","z":"34ba443e.fcb78c","name":"","label":"2","tooltip":"","group":"9b6bc4eb.3b6f08","order":14,"width":2,"height":1,"passthru":true,"decouple":"false","topic":"","style":"","onvalue":"on","onvalueType":"str","onicon":"","oncolor":"","offvalue":"off","offvalueType":"str","officon":"","offcolor":"","x":1250,"y":260,"wires":[[]]},{"id":"39fca120.123c3e","type":"ui_switch","z":"34ba443e.fcb78c","name":"","label":"3","tooltip":"","group":"9b6bc4eb.3b6f08","order":15,"width":2,"height":1,"passthru":true,"decouple":"false","topic":"","style":"","onvalue":"on","onvalueType":"str","onicon":"","oncolor":"","offvalue":"off","offvalueType":"str","officon":"","offcolor":"","x":1250,"y":300,"wires":[[]]},{"id":"1c9d741e.bf607c","type":"ui_switch","z":"34ba443e.fcb78c","name":"","label":"4","tooltip":"","group":"9b6bc4eb.3b6f08","order":16,"width":2,"height":1,"passthru":true,"decouple":"false","topic":"","style":"","onvalue":"on","onvalueType":"str","onicon":"","oncolor":"","offvalue":"off","offvalueType":"str","officon":"","offcolor":"","x":1250,"y":340,"wires":[[]]},{"id":"5387a6ee.793b08","type":"ui_switch","z":"34ba443e.fcb78c","name":"","label":"5","tooltip":"","group":"9b6bc4eb.3b6f08","order":17,"width":2,"height":1,"passthru":true,"decouple":"false","topic":"","style":"","onvalue":"on","onvalueType":"str","onicon":"","oncolor":"","offvalue":"off","offvalueType":"str","officon":"","offcolor":"","x":1250,"y":380,"wires":[[]]},{"id":"778dc471.b6d46c","type":"ui_switch","z":"34ba443e.fcb78c","name":"","label":"6","tooltip":"","group":"9b6bc4eb.3b6f08","order":18,"width":2,"height":1,"passthru":true,"decouple":"false","topic":"","style":"","onvalue":"on","onvalueType":"str","onicon":"","oncolor":"","offvalue":"off","offvalueType":"str","officon":"","offcolor":"","x":1250,"y":420,"wires":[[]]},{"id":"8628f944.beea88","type":"ui_switch","z":"34ba443e.fcb78c","name":"","label":"7","tooltip":"","group":"9b6bc4eb.3b6f08","order":19,"width":2,"height":1,"passthru":true,"decouple":"false","topic":"","style":"","onvalue":"on","onvalueType":"str","onicon":"","oncolor":"","offvalue":"off","offvalueType":"str","officon":"","offcolor":"","x":1250,"y":460,"wires":[[]]},{"id":"22da13a7.dbd2ac","type":"ui_switch","z":"34ba443e.fcb78c","name":"","label":"8","tooltip":"","group":"9b6bc4eb.3b6f08","order":20,"width":2,"height":1,"passthru":true,"decouple":"false","topic":"","style":"","onvalue":"on","onvalueType":"str","onicon":"","oncolor":"","offvalue":"off","offvalueType":"str","officon":"","offcolor":"","x":1250,"y":500,"wires":[[]]},{"id":"6d7b4193.a676c","type":"ui_switch","z":"34ba443e.fcb78c","name":"","label":"9","tooltip":"","group":"9b6bc4eb.3b6f08","order":21,"width":2,"height":1,"passthru":true,"decouple":"false","topic":"","style":"","onvalue":"on","onvalueType":"str","onicon":"","oncolor":"","offvalue":"off","offvalueType":"str","officon":"","offcolor":"","x":1250,"y":540,"wires":[[]]},{"id":"d8c50d2e.f02c9","type":"ui_switch","z":"34ba443e.fcb78c","name":"","label":"10","tooltip":"","group":"9b6bc4eb.3b6f08","order":22,"width":2,"height":1,"passthru":true,"decouple":"false","topic":"","style":"","onvalue":"on","onvalueType":"str","onicon":"","oncolor":"","offvalue":"off","offvalueType":"str","officon":"","offcolor":"","x":1250,"y":580,"wires":[[]]},{"id":"394ee31a.a89bac","type":"ui_switch","z":"34ba443e.fcb78c","name":"","label":"11","tooltip":"","group":"9b6bc4eb.3b6f08","order":23,"width":2,"height":1,"passthru":true,"decouple":"false","topic":"","style":"","onvalue":"on","onvalueType":"str","onicon":"","oncolor":"","offvalue":"off","offvalueType":"str","officon":"","offcolor":"","x":1250,"y":620,"wires":[[]]},{"id":"f614702f.49c93","type":"ui_switch","z":"34ba443e.fcb78c","name":"","label":"12","tooltip":"","group":"9b6bc4eb.3b6f08","order":24,"width":2,"height":1,"passthru":true,"decouple":"false","topic":"","style":"","onvalue":"on","onvalueType":"str","onicon":"","oncolor":"","offvalue":"off","offvalueType":"str","officon":"","offcolor":"","x":1250,"y":660,"wires":[[]]},{"id":"95d3c8b5.7ca458","type":"ui_switch","z":"34ba443e.fcb78c","name":"","label":"13","tooltip":"","group":"9b6bc4eb.3b6f08","order":25,"width":2,"height":1,"passthru":true,"decouple":"false","topic":"","style":"","onvalue":"on","onvalueType":"str","onicon":"","oncolor":"","offvalue":"off","offvalueType":"str","officon":"","offcolor":"","x":1250,"y":700,"wires":[[]]},{"id":"b53bf5ae.43bde8","type":"ui_switch","z":"34ba443e.fcb78c","name":"","label":"14","tooltip":"","group":"9b6bc4eb.3b6f08","order":26,"width":2,"height":1,"passthru":true,"decouple":"false","topic":"","style":"","onvalue":"on","onvalueType":"str","onicon":"","oncolor":"","offvalue":"off","offvalueType":"str","officon":"","offcolor":"","x":1250,"y":740,"wires":[[]]},{"id":"9d9e437b.4f3e3","type":"ui_switch","z":"34ba443e.fcb78c","name":"","label":"15","tooltip":"","group":"9b6bc4eb.3b6f08","order":27,"width":2,"height":1,"passthru":true,"decouple":"false","topic":"","style":"","onvalue":"on","onvalueType":"str","onicon":"","oncolor":"","offvalue":"off","offvalueType":"str","officon":"","offcolor":"","x":1250,"y":780,"wires":[[]]},{"id":"7f1b10af.fe49","type":"ui_switch","z":"34ba443e.fcb78c","name":"","label":"16","tooltip":"","group":"9b6bc4eb.3b6f08","order":28,"width":2,"height":1,"passthru":true,"decouple":"false","topic":"","style":"","onvalue":"on","onvalueType":"str","onicon":"","oncolor":"","offvalue":"off","offvalueType":"str","officon":"","offcolor":"","x":1250,"y":820,"wires":[[]]},{"id":"af963e9a.76a1e","type":"ui_switch","z":"34ba443e.fcb78c","name":"","label":"17","tooltip":"","group":"9b6bc4eb.3b6f08","order":29,"width":2,"height":1,"passthru":true,"decouple":"false","topic":"","style":"","onvalue":"on","onvalueType":"str","onicon":"","oncolor":"","offvalue":"off","offvalueType":"str","officon":"","offcolor":"","x":1250,"y":860,"wires":[[]]},{"id":"1901f994.007d96","type":"ui_switch","z":"34ba443e.fcb78c","name":"","label":"18","tooltip":"","group":"9b6bc4eb.3b6f08","order":30,"width":2,"height":1,"passthru":true,"decouple":"false","topic":"","style":"","onvalue":"on","onvalueType":"str","onicon":"","oncolor":"","offvalue":"off","offvalueType":"str","officon":"","offcolor":"","x":1250,"y":900,"wires":[[]]},{"id":"772f9183.f8ebf","type":"ui_switch","z":"34ba443e.fcb78c","name":"","label":"19","tooltip":"","group":"9b6bc4eb.3b6f08","order":31,"width":2,"height":1,"passthru":true,"decouple":"false","topic":"","style":"","onvalue":"on","onvalueType":"str","onicon":"","oncolor":"","offvalue":"off","offvalueType":"str","officon":"","offcolor":"","x":1250,"y":940,"wires":[[]]},{"id":"ac9c9985.b8f098","type":"ui_switch","z":"34ba443e.fcb78c","name":"","label":"20","tooltip":"","group":"9b6bc4eb.3b6f08","order":32,"width":2,"height":1,"passthru":true,"decouple":"false","topic":"","style":"","onvalue":"on","onvalueType":"str","onicon":"","oncolor":"","offvalue":"off","offvalueType":"str","officon":"","offcolor":"","x":1410,"y":580,"wires":[[]]},{"id":"85b880bc.92121","type":"ui_switch","z":"34ba443e.fcb78c","name":"","label":"21","tooltip":"","group":"9b6bc4eb.3b6f08","order":33,"width":2,"height":1,"passthru":true,"decouple":"false","topic":"","style":"","onvalue":"on","onvalueType":"str","onicon":"","oncolor":"","offvalue":"off","offvalueType":"str","officon":"","offcolor":"","x":1410,"y":620,"wires":[[]]},{"id":"4f03dccd.009ea4","type":"ui_switch","z":"34ba443e.fcb78c","name":"","label":"22","tooltip":"","group":"9b6bc4eb.3b6f08","order":34,"width":2,"height":1,"passthru":true,"decouple":"false","topic":"","style":"","onvalue":"on","onvalueType":"str","onicon":"","oncolor":"","offvalue":"off","offvalueType":"str","officon":"","offcolor":"","x":1410,"y":660,"wires":[[]]},{"id":"5e9cb928.f06368","type":"ui_switch","z":"34ba443e.fcb78c","name":"","label":"23","tooltip":"","group":"9b6bc4eb.3b6f08","order":35,"width":2,"height":1,"passthru":true,"decouple":"false","topic":"","style":"","onvalue":"on","onvalueType":"str","onicon":"","oncolor":"","offvalue":"off","offvalueType":"str","officon":"","offcolor":"","x":1410,"y":700,"wires":[[]]},{"id":"373e644e.0ad47c","type":"ui_switch","z":"34ba443e.fcb78c","name":"","label":"24","tooltip":"","group":"9b6bc4eb.3b6f08","order":36,"width":2,"height":1,"passthru":true,"decouple":"false","topic":"","style":"","onvalue":"on","onvalueType":"str","onicon":"","oncolor":"","offvalue":"off","offvalueType":"str","officon":"","offcolor":"","x":1410,"y":740,"wires":[[]]},{"id":"74eb023b.1eebfc","type":"ui_switch","z":"34ba443e.fcb78c","name":"","label":"25","tooltip":"","group":"9b6bc4eb.3b6f08","order":37,"width":2,"height":1,"passthru":true,"decouple":"false","topic":"","style":"","onvalue":"on","onvalueType":"str","onicon":"","oncolor":"","offvalue":"off","offvalueType":"str","officon":"","offcolor":"","x":1410,"y":780,"wires":[[]]},{"id":"d07be527.8cc958","type":"ui_switch","z":"34ba443e.fcb78c","name":"","label":"26","tooltip":"","group":"9b6bc4eb.3b6f08","order":38,"width":2,"height":1,"passthru":true,"decouple":"false","topic":"","style":"","onvalue":"on","onvalueType":"str","onicon":"","oncolor":"","offvalue":"off","offvalueType":"str","officon":"","offcolor":"","x":1410,"y":820,"wires":[[]]},{"id":"e5635884.027868","type":"ui_switch","z":"34ba443e.fcb78c","name":"","label":"27","tooltip":"","group":"9b6bc4eb.3b6f08","order":39,"width":2,"height":1,"passthru":true,"decouple":"false","topic":"","style":"","onvalue":"on","onvalueType":"str","onicon":"","oncolor":"","offvalue":"off","offvalueType":"str","officon":"","offcolor":"","x":1410,"y":860,"wires":[[]]},{"id":"a17a4729.244628","type":"ui_switch","z":"34ba443e.fcb78c","name":"","label":"28","tooltip":"","group":"9b6bc4eb.3b6f08","order":40,"width":2,"height":1,"passthru":true,"decouple":"false","topic":"","style":"","onvalue":"on","onvalueType":"str","onicon":"","oncolor":"","offvalue":"off","offvalueType":"str","officon":"","offcolor":"","x":1410,"y":900,"wires":[[]]},{"id":"e0a15b49.902c28","type":"ui_switch","z":"34ba443e.fcb78c","name":"","label":"29","tooltip":"","group":"9b6bc4eb.3b6f08","order":41,"width":2,"height":1,"passthru":true,"decouple":"false","topic":"","style":"","onvalue":"on","onvalueType":"str","onicon":"","oncolor":"","offvalue":"off","offvalueType":"str","officon":"","offcolor":"","x":1410,"y":940,"wires":[[]]},{"id":"9b6bc4eb.3b6f08","type":"ui_group","z":"","name":"js0","tab":"40213451.75d39c","order":1,"disp":true,"width":"20","collapse":false},{"id":"40213451.75d39c","type":"ui_tab","z":"","name":"Tab 1","icon":"dashboard","order":1,"disabled":false,"hidden":false}]