Skip to content

Communication protocol

According to the type of your tap device you have differents protocol availables.

Your tap device may also be available through a relay (gateway), for example thanks to Tap Manager app. That's why there are additional communication protocols available:

You can also implement your custom protocol.

Provided implementation

Bluetooth Low Energy (BLE)

Connect to bluetooth device with mac address C3:23:DE:AA:BB:CC

// Only available in node.js environment thanks to noble library
import { NobleBLEAdapter, NobleBleScanner } from "@iotize/device-com-ble.node";

const DEVICE_ADDRESS = "C3:23:DE:AA:BB:CC";

let bleScanner = new NobleBleScanner();
let peripheral: noble.Peripheral = await bleScanner.getDeviceByAddress(DEVICE_ADDRESS);
let bleProtocol = new NobleBLEAdapter(peripheral);
import com.iotize.android.device.api.protocol.ComProtocol;
import com.iotize.android.communication.protocol.ble.BLEProtocol;

// From a bluetooth address
ComProtocol bleProtocol = BLEProtocol.fromAddress(context, "C3:23:DE:AA:BB:CC");

// If you already have a android BluetoothDevice instance use this method:
BluetoothDevice bluetoothDevice = // ...
ComProtocol bleProtocol = BLEProtocol.fromDevice(context, bluetoothDevice);

See javadoc for Android of BLEProtocol

NFC

Connect to an IoTize with an NFC tag:

// NOT AVAILABLE
import com.iotize.android.device.api.protocol.ComProtocol;
import com.iotize.android.communication.protocol.nfc.NFCProtocol;

// Suppose you have an NFC tag
android.nfc.Tag tag = // ...

// Instanciate the NFC protcol from this tag
ComProtocol nfcProtocol = NFCProtocol.create(tag);

See javadoc for Android of NFCProtocol

Socket

For wifi communication, if you are connected on the same network as the IoTize, you can use this method to instantiate your communication object:

// With node environment, use sockets
import { SocketProtocol } from "@iotize/device-com-socket.node"
let protocol = new SocketProtocol({
    host: 'localhost',
    port: 2000
})

// With browser environment, use web sockets
import { WebSocketProtocol } from "@iotize/device-com-websocket.js"
let protocol = new WebSocketProtocol({
    url: 'tcp://localhost:2000'
})
import com.iotize.android.communication.protocol.socket.SocketProtocol;
import com.iotize.android.communication.protocol.socket.WIFI.WIFIProtocol;
import com.iotize.android.device.api.protocol.ComProtocol;

// Socket protocol
ComProtocol socketProtocol = new SocketProtocol(new InetSocketAddress("<YOUR_IP_ADDRESS>", <PORT>));

// Wi-Fi protocol (for tap device with Wi-Fi capability)
// If we are already connected to the same network as the tap device:
ComProtocol wifiProtocol = WIFIProtocol.fromIP(context, "192.168.1.1");

// To connect on a specific network, use WifiConfiguration
android.net.wifi.WifiConfiguration wifiConfig;
// If you have an open network
wifiConfig = WIFIProtocol.createConfiguration("networkssid", WIFIProtocol.SecurityType.OPEN);
// Network with WPA key
wifiConfig = WIFIProtocol.createConfiguration("networkssid", WIFIProtocol.SecurityType.WPA, "wifipassord");
// Network with WEP key
wifiConfig = WIFIProtocol.createConfiguration("networkssid", WIFIProtocol.SecurityType.WEP, "wifipassord");

// Create the protocol with a specific network configuration
wifiProtocol = WIFIProtocol.fromIP(context, "192.168.1.1", wifiConfig);

See javadoc for Android of WIFIProtocol

MQTT

import { MqttProtocol } from "@iotize/device-com-mqtt.js";
let protocol = new MqttProtocol();
// Not yet documented 
import com.iotize.android.communication.protocol.mqtt.MQTTProtocol;
import com.iotize.android.communication.protocol.mqtt.IoTizeMQTTClient;

IoTizeMQTTClient mqttClient = new IoTizeMQTTClient("tcp://<yourbrokerurl>:<port>", "ClientId1", "/your/publish/topic");
MQTTProtocol protocol = new MQTTProtocol(mqttClient);

// Configure your protocol
protocol
    .subscribeToTopics(new String[]{
        "/topic/to/subscribe/for/incomming/requests"
    })
    .setResponseTopic("/topic/wher/to/send/response");

LoRa

Not yet available.

Create your own

To use your own protocol, implement interface ComProtocol (See javadoc for Android of ComProtocol)

import { ComProtocol } from '@iotize/device-client/protocol/api';

// Implement interface
class MyCustomProtocol implements ComProtocol{

    // Your implementation here

}

// You can also simply override QueueComProtocol
import { QueueComProtocol } from '@iotize/device-client/protocol/impl';

class MyCustomProtocol extends QueueComProtocol{

}
import com.iotize.android.device.api.protocol.ComProtocol;

class MyCustomProtocol implements ComProtocol{

    // Your implementation here

}