-
Notifications
You must be signed in to change notification settings - Fork 0
/
MqttUtils.ts
88 lines (72 loc) · 2.94 KB
/
MqttUtils.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
import { MqttClient } from 'mqtt';
import { EpConfig, EpMetadata } from '../schemas/Types';
import mqtt from "mqtt";
export const generateMqttRequestId = () => (
Math.round(Math.random() * 1000)
)
export const composeTimeseries = (temperature: number, humidity: number, pressure: number) => (
JSON.stringify([{
"timestamp": new Date().getTime(),
"temperature": temperature,
"humidity": humidity,
"pressure": pressure,
}])
)
export const composeACEnabledStatusTimeseries = (status: string) => (
JSON.stringify(
[{
"ac_enabled": status,
}]
)
)
export const connectToThePlatform = () => mqtt.connect('wss://building.kaaiot.net:20112/ws');
export const sendTimeseries = (client: MqttClient, epToken: string, humidity: number, pressure: number, ambientTemp: number) => {
const reqId = generateMqttRequestId();
const dctopic = `kp1/environment-ver-1/dcx/${epToken}/json/${reqId}`
const data = composeTimeseries(ambientTemp, humidity, pressure);
client.publish(dctopic, data, console.log)
}
export const sendACEnabledStatus = (client: MqttClient, epToken: string, status: string) => {
const reqId = generateMqttRequestId();
const dctopic = `kp1/environment-ver-1/dcx/${epToken}/json/${reqId}`
const data = composeACEnabledStatusTimeseries(status);
client.publish(dctopic, data, (err) => {
if(err) {
console.log('sendACEnabledStatus: ', err)
}
})
}
export const registerMetadataListener = (client: MqttClient, epToken: string, onMetadataReceived: (epMetadata: EpMetadata) => void) => {
const metadataTopic = `kp1/environment-ver-1/epmx/${epToken}/get`;
client.on("message", (topic, payload) => {
if(topic === `${metadataTopic}`) {
onMetadataReceived(JSON.parse(payload.toString()));
}
})
}
export const requestAllMetadata = (client: MqttClient, epToken: string) => {
const reqId = generateMqttRequestId();
const metadataTopic = `kp1/environment-ver-1/epmx/${epToken}/get`;
client.publish(`${metadataTopic}/${reqId}`, '{}')
}
export const sendMetadata = (client: MqttClient, epToken: string, epMetadata: EpMetadata) => {
const metadataRequestId = generateMqttRequestId();
const metadataTopic = `kp1/environment-ver-1/epmx/${epToken}/update/keys/${metadataRequestId}`;
client.subscribe(`${metadataTopic}/status`, console.log)
client.publish(metadataTopic, JSON.stringify(epMetadata), console.log)
}
export const subscribeToConfigs = (client: MqttClient, epToken: string, onConfigReceived: (config: EpConfig) => void) => {
const configRequestId = generateMqttRequestId();
const topicToSend = `kp1/environment-ver-1/cmx/${epToken}/config/json`;
client.subscribe(topicToSend, (err) => {
if(!err) {
console.log('subscribed to configs')
client.publish(`${topicToSend}/${configRequestId}`, JSON.stringify({}))
client.on("message", (topic, payload) => {
if(topic === topicToSend) {
onConfigReceived(JSON.parse(payload.toString()));
}
})
}
})
}