t6 Features > Sockets connection

Sockets connection

A socket programming interface to connect physical Objects with t6 IoT platform and using a bi-directional communication.

Sockets connection

How to use Sockets with t6 IoT?

Sockets is an early stage t6 feature made to connect easily Arduino Objects with t6. The idea is to have a minimal code-base on the Arduino device as generic as possible and interface that Object using simple Socket connectivity.

t6 implement a Socket server. Any Client can connect to it using its own t6 credentials (a Basic Authorization header made from base64 encoded key:secret).

The Client must then claim the Object using the specific command:

{"command": "claimObject", "object_id": "aaaaaaaa-aaaa-4bbb-8888-aaaaaaaaaaaa"}

Note: The claimed Object must be owned by the User Account from the Basic Authorization.

Multiple commands can be sent to Socket from any authenticated Client:

Using Sockets with preprocessor and Rule Engine

Of course Sockets on t6 IoT can be triggered from a Decision Rule during Datapoint creation. The prerequisite is the Object to use Arduino with the sample code

The datapoint should stick to the following styntax including a payload on the text node Payload node need to contains an arduinoCommand to specify to command on the Arduino Object. arduinoCommand is one of the following :

E.g: please note the value attribute containing a variable. It will be transformed with the t6 preprocessor dring the ingestion process.

[
    {
        "value": "1\n",
        "flow_id": "{{$randomUUID}}",
        "text": {
            "command": "unicast",
            "object_id": "aaaaaaaa-aaaa-4bbb-8888-aaaaaaaaaaaa",
            "payload": {
                "arduinoCommand": "digitalWrite",
                "pin": "2",
                "value": "{value}"
            }
        },
        "save": false,
        "unit": "",
        "mqtt_topic": "",
        "publish": true,
        "object_id": "aaaaaaaa-aaaa-4bbb-8888-aaaaaaaaaaaa",
        "datatype_id": "e7dbdc23-5fa8-4083-b3ec-bb99c08a2a35"
    }
]

Socket messages to single or several Arduino devices

This is possible to send the same message simultaneously to multiple Arduino Objects or to specify a single Object as target message. In order to send a command, you’d need to use object_ids from the same t6 User Account and claim them to Socket using the above procedure.

On the Socket payload, the command unicast will send the message to a single Object using the attribute object_id.

E.g:

{
    "command": "unicast",
    "object_id": "aaaaaaaa-aaaa-4bbb-8888-aaaaaaaaaaaa",
    "payload": {
        "arduinoCommand": "digitalWrite",
        "pin": "2",
        "value": "0"
    }
}

Obviously, the command broadcast (that does not require any object_id) will send the message to any Object connected to Socket and claimed from the same User Account. The arduinoCommand digitalWrite will be received on all of these devices simultaneously.

E.g:

{
    "command": "broadcast",
    "payload": {
        "arduinoCommand": "digitalWrite",
        "pin": "2",
        "value": "0"
    }
}

The Arduino example code is available at https://github.com/mathcoll/t6iot/blob/master/examples/nodeMCU-websockets-client/nodeMCU-websockets-client.ino

Tagged on #sockets, #preprocessor, #Objects,