Here you’ll find a practical, event-driven API that lets external apps talk to IoT devices in real time over MQTT, while the platform fans out reliable notifications over AMQP to a pub/sub broker, which external applications can subscribe to using STOMP over WebSocket or MQTT protocols. 🚀 At a glance, clients publish commands to well-defined queues/topics (e.g., resource/commands) with standard envelopes (messageType, appId, jwtToken, correlationId) and receive structured responses on per-app topics. This makes actions like arming, disarming, or reading device status both predictable and traceable end-to-end.
What can you do with it? Plenty. 🔧 Core command families include arming modes (Arm, Stay/Indoor, Sleep/Night), Disarm, zone-scoped operations (Arm/Disarm Zone, Zone Bypass/Unbypass), output control (setOutput for relays/DOs), system introspection (getStatus, getFailures), and panel-level operations like initiateConnection and setPinCode. Each returns a normalized commandResponse with result (e.g., success, failed, not send, send_no_ack, unauthorized) and a clear reason, so your app can guide users with actionable feedback. 🔁
Beyond commands, the platform streams rich notifications to keep UIs in sync without polling. 📣 Expect push events for arm/disarm transitions, zone alarms, keypad/keyfob actions, panic/medical events, connectivity changes (resource connected/disconnected), and connection-initiation outcomes. Each notification carries the essentials (model, brand, network/device IDs, partition/zone context) so you can surface precise, human-readable messages instantly. 📲
Under the hood, security and operability are first-class. 🔐 JWTs authenticate requests, correlation IDs make workflows observable, and sensitive fields such as PIN codes are transmitted as AES-256–encrypted payloads. On the backend side, internal AMQP commands expose inventory and topology data—sensors, controllers, partitions, and names—so you can build dynamic UIs that reflect the live device configuration. In the detailed sections that follow, you’ll see per-command schemas, sample publish/subscribe frames, success/error variants, and notes to help you implement quickly and safely. ✅
- Mqtt server host 1:
platform.bienport.com
- Mqtt server host 2:
sebeketakip.com
- Port:
1883 (8883-mqtts port is not yet supported!)
- In the login operation response of the REST API, the payload contains the user and password information (
mqUser, mqPassword).
- Password decryption must be required before logging in Mqtt server. Password is encrypted with AES-256 algorithm.
Ask us for AES Algorithm, Initialization Vector and Private Key to successful decode encrypted contents (such as mqPassword and pinCode).
Below an example Java source code given to decode the encrpted content:
public class AESUtilTest {
private static final String privateKey = "********************************";
private static final String iv = "****************";
private static final String algorithm = "AES/***/************";
public static void main(String...args) {
try {
String input = "Lorem ipsum dolor sit amet, consectetur adipiscing elit.";
System.out.println("original: " + input);
// SecretKey key = AESUtil.generateKey( 256 );
SecretKey key = AESUtil.getKeySpec(privateKey);
System.out.println("256-bit key (String): " + privateKey);
assert key != null;
System.out.println("256-bit key (Hex): 0x" + HexUtil.toHex(key.getEncoded()));
System.out.println("256-bit key (Base64): " + Base64.getEncoder().encodeToString(key.getEncoded()));
// IvParameterSpec ivParameterSpec = AESUtil.generateIv();
IvParameterSpec ivParameterSpec = new IvParameterSpec(iv.getBytes(StandardCharsets.UTF_8));
System.out.println("IV (string): " + new String(ivParameterSpec.getIV()));
System.out.println("IV (Hex): 0x" + HexUtil.toHex(ivParameterSpec.getIV()));
System.out.println("IV (Base64): " + Base64.getEncoder().encodeToString(ivParameterSpec.getIV()));
System.out.println("Algorithm: " + algorithm);
String cipherText = AESUtil.encrypt(algorithm, input, key, ivParameterSpec, true);
System.out.println("Encrypted (Base64): " + cipherText);
cipherText = AESUtil.encrypt(algorithm, input, key, ivParameterSpec, false);
System.out.println("Encrypted (Hex): 0x" + cipherText);
String plainText = AESUtil.decrypt(algorithm, cipherText, key, ivParameterSpec, false);
System.out.println("Decrypted: " + plainText);
assertEquals(input, plainText);
} catch (Exception e) {
logger.error("Error:", e);
}
}
}