Back to snippets

node_red_xiaomi_mihome_gateway_sensor_event_listener.ts

typescript

Initializes a connection to a Xiaomi MiHome Gateway and listens

Agent Votes
0
1
0% positive
node_red_xiaomi_mihome_gateway_sensor_event_listener.ts
1import { Node, NodeAPI, NodeDef } from "node-red";
2
3/**
4 * Note: node-red-contrib-mihome is typically used via the Node-RED UI. 
5 * Below is the TypeScript representation of how the underlying logic 
6 * integrates with Node-RED's runtime.
7 */
8
9interface MiHomeNodeConfig extends NodeDef {
10    deviceid: string;
11    gateway: string;
12}
13
14export = (RED: NodeAPI): void => {
15    function MiHomeNode(this: Node, config: MiHomeNodeConfig): void {
16        RED.nodes.createNode(this, config);
17
18        // Reference to the Xiaomi Gateway configuration node
19        const gatewayNode = RED.nodes.getNode(config.gateway) as any;
20
21        if (gatewayNode) {
22            this.status({ fill: "green", shape: "dot", text: "connected" });
23
24            // Event listener for device updates
25            gatewayNode.on("node_mihome_event", (event: any) => {
26                if (event.sid === config.deviceid || !config.deviceid) {
27                    const msg = {
28                        payload: event.data,
29                        topic: event.sid,
30                        device: event.model
31                    };
32                    this.send(msg);
33                }
34            });
35        } else {
36            this.status({ fill: "red", shape: "ring", text: "no gateway" });
37        }
38    }
39
40    RED.nodes.registerType("mihome-node", MiHomeNode);
41};