@evilbunny/node-red-contrib-zigbee2mqtt 0.0.0 → 3.2.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +674 -0
- package/README.md +62 -43
- package/api.html +22 -0
- package/api.js +176 -0
- package/examples/Basic usage.json +316 -0
- package/icons/homekit-logo.png +0 -0
- package/icons/icon-color.png +0 -0
- package/icons/icon.png +0 -0
- package/icons/icon.pxd/QuickLook/Icon.tiff +0 -0
- package/icons/icon.pxd/QuickLook/Thumbnail.tiff +0 -0
- package/icons/icon.pxd/data/15644CBE-CB2C-4054-AAB1-064FBC3F72DB +0 -0
- package/icons/icon.pxd/data/2D35D9CD-316A-4D5B-A1D9-1C09DB37FAC9 +0 -0
- package/icons/icon.pxd/data/BF7855C2-D304-4F39-84A3-141656F5E18C +0 -0
- package/icons/icon.pxd/data/selection/meta +33 -0
- package/icons/icon.pxd/data/selection/shapeSelection/meta +12 -0
- package/icons/icon.pxd/data/selection/shapeSelection/path +0 -0
- package/icons/icon.pxd/data/selectionForContentTransform/meta +33 -0
- package/icons/icon.pxd/data/selectionForContentTransform/shapeSelection/meta +12 -0
- package/icons/icon.pxd/data/selectionForContentTransform/shapeSelection/path +0 -0
- package/icons/icon.pxd/metadata.info +0 -0
- package/nodes/bridge.html +523 -0
- package/nodes/bridge.js +124 -0
- package/nodes/get.html +106 -0
- package/nodes/get.js +47 -0
- package/nodes/in.html +125 -0
- package/nodes/in.js +123 -0
- package/nodes/locales/en-US/bridge.html +23 -0
- package/nodes/locales/en-US/bridge.json +84 -0
- package/nodes/locales/en-US/get.html +19 -0
- package/nodes/locales/en-US/get.json +23 -0
- package/nodes/locales/en-US/in.html +24 -0
- package/nodes/locales/en-US/in.json +43 -0
- package/nodes/locales/en-US/out.html +24 -0
- package/nodes/locales/en-US/out.json +31 -0
- package/nodes/locales/en-US/server.html +12 -0
- package/nodes/locales/en-US/server.json +36 -0
- package/nodes/locales/sk-SK/bridge.html +23 -0
- package/nodes/locales/sk-SK/bridge.json +84 -0
- package/nodes/locales/sk-SK/get.html +18 -0
- package/nodes/locales/sk-SK/get.json +21 -0
- package/nodes/locales/sk-SK/in.html +23 -0
- package/nodes/locales/sk-SK/in.json +43 -0
- package/nodes/locales/sk-SK/out.html +23 -0
- package/nodes/locales/sk-SK/out.json +21 -0
- package/nodes/locales/sk-SK/server.html +12 -0
- package/nodes/locales/sk-SK/server.json +36 -0
- package/nodes/out.html +300 -0
- package/nodes/out.js +361 -0
- package/nodes/server.html +96 -0
- package/nodes/server.js +854 -0
- package/package.json +42 -6
- package/readme/1.png +0 -0
- package/readme/2.png +0 -0
- package/readme/3.png +0 -0
- package/readme/4.png +0 -0
- package/readme/5.png +0 -0
- package/readme/options.gif +0 -0
- package/resources/Zigbee2mqttHelper.js +470 -0
- package/resources/css/common.css +56 -0
- package/resources/css/multiple-select.css +183 -0
- package/resources/js/multiple-select.js +10 -0
- package/resources/js/multiple-select.min.js +10 -0
- package/resources/js/node-red-contrib-zigbee2mqtt-helpers.js +416 -0
- package/resources/js/zigbee2mqtt-helpers.js +416 -0
- package/resources/tokeninput/jquery.tokeninput.js +861 -0
- package/resources/tokeninput/token-input-facebook.css +134 -0
- package/resources/tokeninput/token-input-mac.css +204 -0
- package/resources/tokeninput/token-input.css +113 -0
package/README.md
CHANGED
|
@@ -1,45 +1,64 @@
|
|
|
1
|
-
#
|
|
2
|
-
|
|
3
|
-
## ⚠️ IMPORTANT NOTICE ⚠️
|
|
4
|
-
|
|
5
|
-
**This package is created solely for the purpose of setting up OIDC (OpenID Connect) trusted publishing with npm.**
|
|
6
|
-
|
|
7
|
-
This is **NOT** a functional package and contains **NO** code or functionality beyond the OIDC setup configuration.
|
|
8
|
-
|
|
9
|
-
## Purpose
|
|
10
|
-
|
|
11
|
-
This package exists to:
|
|
12
|
-
1. Configure OIDC trusted publishing for the package name `@evilbunny/node-red-contrib-zigbee2mqtt`
|
|
13
|
-
2. Enable secure, token-less publishing from CI/CD workflows
|
|
14
|
-
3. Establish provenance for packages published under this name
|
|
15
|
-
|
|
16
|
-
## What is OIDC Trusted Publishing?
|
|
17
|
-
|
|
18
|
-
OIDC trusted publishing allows package maintainers to publish packages directly from their CI/CD workflows without needing to manage npm access tokens. Instead, it uses OpenID Connect to establish trust between the CI/CD provider (like GitHub Actions) and npm.
|
|
1
|
+
# Forked
|
|
2
|
+
This was forked from [andreypopov/node-red-contrib-zigbee2mqtt](https://github.com/andreypopov/node-red-contrib-zigbee2mqtt) but that repo was last updated more than 18 months ago and the dependencies were horribly out of date and wouldn't cleanly install for me.
|
|
19
3
|
|
|
20
|
-
|
|
4
|
+
I've made other improvements, such as more state options to support ZigBee devices I own. [I submitted a PR](https://github.com/andreypopov/node-red-contrib-zigbee2mqtt/pull/154) for the changes but given all the unmerged PRs, I don't expect my PR will be merged.
|
|
21
5
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
-
|
|
34
|
-
|
|
35
|
-
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
6
|
+
# @evilbunny/node-red-contrib-zigbee2mqtt
|
|
7
|
+
[](https://nodered.org)
|
|
8
|
+
[](https://nodejs.org/en/)
|
|
9
|
+
[](https://www.npmjs.com/package/node-red-contrib-zigbee2mqtt)
|
|
10
|
+
[](https://github.com/evilbunny2008/node-red-contrib-zigbee2mqtt/stargazers)
|
|
11
|
+
[](https://packagequality.com/#?package=node-red-contrib-zigbee2mqtt)
|
|
12
|
+
|
|
13
|
+
[](https://github.com/evilbunny2008/node-red-contrib-zigbee2mqtt/issues)
|
|
14
|
+

|
|
15
|
+

|
|
16
|
+

|
|
17
|
+

|
|
18
|
+
|
|
19
|
+
Node-Red Nodes for Zigbee2mqtt connectivity.
|
|
20
|
+
|
|
21
|
+
# Install
|
|
22
|
+
You should do the following:
|
|
23
|
+
```
|
|
24
|
+
npm install -g node-red
|
|
25
|
+
mkdir -p /opt/node-red
|
|
26
|
+
useradd -d /opt/node-red -M node-red
|
|
27
|
+
chown -R node-red: /opt/node-red
|
|
28
|
+
su -s /bin/bash - node-red
|
|
29
|
+
mkdir -p .node-red
|
|
30
|
+
cd .node-red
|
|
31
|
+
node-red admin init
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
Next edit the settings.js to match your server
|
|
35
|
+
```nano settings.js```
|
|
36
|
+
|
|
37
|
+
Finally install this module
|
|
38
|
+
```
|
|
39
|
+
npm install @evilbunny/node-red-contrib-zigbee2mqtt
|
|
40
|
+
```
|
|
41
|
+
and then you can start Node Red by doing
|
|
42
|
+
```
|
|
43
|
+
cd ..
|
|
44
|
+
node-red
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
# Available nodes
|
|
48
|
+
* zigbee2mqtt-eb-in: listen to device
|
|
49
|
+
* zigbee2mqtt-eb-get: get current value of device
|
|
50
|
+
* zigbee2mqtt-eb-out: send command to device
|
|
51
|
+
* zigbee2mqtt-eb-bridge: logs, options, other events
|
|
52
|
+
|
|
53
|
+
Extra features:
|
|
54
|
+
* groups support
|
|
55
|
+
* network map generation
|
|
56
|
+
|
|
57
|
+
<img src="https://github.com/evilbunny2008/node-red-contrib-zigbee2mqtt/blob/main/readme/1.png?raw=true">
|
|
58
|
+
<img src="https://github.com/evilbunny2008/node-red-contrib-zigbee2mqtt/blob/main/readme/2.png?raw=true">
|
|
59
|
+
<img src="https://github.com/evilbunny2008/node-red-contrib-zigbee2mqtt/blob/main/readme/3.png?raw=true">
|
|
60
|
+
<img src="https://github.com/evilbunny2008/node-red-contrib-zigbee2mqtt/blob/main/readme/4.png?raw=true">
|
|
61
|
+
<img src="https://github.com/evilbunny2008/node-red-contrib-zigbee2mqtt/blob/main/readme/5.png?raw=true">
|
|
62
|
+
|
|
63
|
+
# Support
|
|
64
|
+
Developing and supporting this plugin needs time and efforts. Appreciate your support on [Patreon](https://www.patreon.com/bePatron?u=12661781). Here, you can sign up to be a member and help support my project.
|
package/api.html
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
<script type="text/x-red" data-template-name="zigbee2mqtt-eb-api" data-hidden="true">
|
|
2
|
+
</script>
|
|
3
|
+
|
|
4
|
+
<script type='text/javascript'>
|
|
5
|
+
// This node has no editable properties and is never shown in the palette;
|
|
6
|
+
// it exists only so the runtime side (api.js) can register its httpAdmin
|
|
7
|
+
// routes as a normal, parseable node module.
|
|
8
|
+
RED.nodes.registerType('zigbee2mqtt-eb-api', {
|
|
9
|
+
category: '',
|
|
10
|
+
defaults: {},
|
|
11
|
+
label: function () { return 'zigbee2mqtt-eb-api'; }
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
$.getScript('resources/@evilbunny/node-red-contrib-zigbee2mqtt/js/multiple-select.min.js');
|
|
15
|
+
$.getScript('resources/@evilbunny/node-red-contrib-zigbee2mqtt/js/node-red-contrib-zigbee2mqtt-helpers.js');
|
|
16
|
+
</script>
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
|
package/api.js
ADDED
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
var NODE_PATH = '/zigbee2mqtt-eb/';
|
|
2
|
+
|
|
3
|
+
module.exports = function(RED) {
|
|
4
|
+
RED.httpAdmin.get(NODE_PATH + 'getDevices', function (req, res) {
|
|
5
|
+
var config = req.query;
|
|
6
|
+
var controller = RED.nodes.getNode(config.controllerID);
|
|
7
|
+
|
|
8
|
+
if (controller && controller.constructor.name === "ServerNode") {
|
|
9
|
+
controller.getDevices(function (items) {
|
|
10
|
+
if (items) {
|
|
11
|
+
res.json(items);
|
|
12
|
+
} else {
|
|
13
|
+
res.status(404).end();
|
|
14
|
+
}
|
|
15
|
+
}, true);
|
|
16
|
+
} else {
|
|
17
|
+
res.json([{},{}]);
|
|
18
|
+
}
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
RED.httpAdmin.get(NODE_PATH + 'restart', function (req, res) {
|
|
22
|
+
var config = req.query;
|
|
23
|
+
var controller = RED.nodes.getNode(config.controllerID);
|
|
24
|
+
if (controller && controller.constructor.name === "ServerNode") {
|
|
25
|
+
controller.restart();
|
|
26
|
+
res.json({"result":"ok"});
|
|
27
|
+
} else {
|
|
28
|
+
res.status(404).end();
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
RED.httpAdmin.get(NODE_PATH + 'setPermitJoin', function (req, res) {
|
|
33
|
+
var config = req.query;
|
|
34
|
+
var controller = RED.nodes.getNode(config.controllerID);
|
|
35
|
+
if (controller && controller.constructor.name === "ServerNode") {
|
|
36
|
+
controller.setPermitJoin(config.permit_join==='true'?true:false);
|
|
37
|
+
res.json({"result":"ok"});
|
|
38
|
+
} else {
|
|
39
|
+
res.status(404).end();
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
RED.httpAdmin.get(NODE_PATH + 'setLogLevel', function (req, res) {
|
|
44
|
+
var config = req.query;
|
|
45
|
+
var controller = RED.nodes.getNode(config.controllerID);
|
|
46
|
+
if (controller && controller.constructor.name === "ServerNode") {
|
|
47
|
+
controller.setLogLevel(config.log_level);
|
|
48
|
+
res.json({"result":"ok"});
|
|
49
|
+
} else {
|
|
50
|
+
res.status(404).end();
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
RED.httpAdmin.get(NODE_PATH + 'getConfig', function (req, res) {
|
|
55
|
+
var config = req.query;
|
|
56
|
+
var controller = RED.nodes.getNode(config.controllerID);
|
|
57
|
+
if (controller && controller.constructor.name === "ServerNode") {
|
|
58
|
+
res.json(controller.bridge_info);
|
|
59
|
+
} else {
|
|
60
|
+
res.status(404).end();
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
RED.httpAdmin.get(NODE_PATH + 'renameDevice', function (req, res) {
|
|
65
|
+
var config = req.query;
|
|
66
|
+
var controller = RED.nodes.getNode(config.controllerID);
|
|
67
|
+
if (controller && controller.constructor.name === "ServerNode") {
|
|
68
|
+
var response = controller.renameDevice(config.ieee_address, config.newName);
|
|
69
|
+
res.json(response);
|
|
70
|
+
} else {
|
|
71
|
+
res.status(404).end();
|
|
72
|
+
}
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
RED.httpAdmin.get(NODE_PATH + 'removeDevice', function (req, res) {
|
|
76
|
+
var config = req.query;
|
|
77
|
+
var controller = RED.nodes.getNode(config.controllerID);
|
|
78
|
+
if (controller && controller.constructor.name === "ServerNode") {
|
|
79
|
+
var response = controller.removeDevice(config.id, config.newName);
|
|
80
|
+
res.json(response);
|
|
81
|
+
} else {
|
|
82
|
+
res.status(404).end();
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
RED.httpAdmin.get(NODE_PATH + 'renameGroup', function (req, res) {
|
|
87
|
+
var config = req.query;
|
|
88
|
+
var controller = RED.nodes.getNode(config.controllerID);
|
|
89
|
+
if (controller && controller.constructor.name === "ServerNode") {
|
|
90
|
+
var response = controller.renameGroup(config.id, config.newName);
|
|
91
|
+
res.json(response);
|
|
92
|
+
} else {
|
|
93
|
+
res.status(404).end();
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
RED.httpAdmin.get(NODE_PATH + 'removeGroup', function (req, res) {
|
|
98
|
+
var config = req.query;
|
|
99
|
+
var controller = RED.nodes.getNode(config.controllerID);
|
|
100
|
+
if (controller && controller.constructor.name === "ServerNode") {
|
|
101
|
+
var response = controller.removeGroup(config.id);
|
|
102
|
+
res.json(response);
|
|
103
|
+
} else {
|
|
104
|
+
res.status(404).end();
|
|
105
|
+
}
|
|
106
|
+
});
|
|
107
|
+
|
|
108
|
+
RED.httpAdmin.get(NODE_PATH + 'addGroup', function (req, res) {
|
|
109
|
+
var config = req.query;
|
|
110
|
+
var controller = RED.nodes.getNode(config.controllerID);
|
|
111
|
+
if (controller && controller.constructor.name === "ServerNode") {
|
|
112
|
+
var response = controller.addGroup(config.name);
|
|
113
|
+
res.json(response);
|
|
114
|
+
} else {
|
|
115
|
+
res.status(404).end();
|
|
116
|
+
}
|
|
117
|
+
});
|
|
118
|
+
|
|
119
|
+
RED.httpAdmin.get(NODE_PATH + 'removeDeviceFromGroup', function (req, res) {
|
|
120
|
+
var config = req.query;
|
|
121
|
+
var controller = RED.nodes.getNode(config.controllerID);
|
|
122
|
+
if (controller && controller.constructor.name === "ServerNode") {
|
|
123
|
+
var response = controller.removeDeviceFromGroup(config.deviceId, config.groupId);
|
|
124
|
+
res.json(response);
|
|
125
|
+
} else {
|
|
126
|
+
res.status(404).end();
|
|
127
|
+
}
|
|
128
|
+
});
|
|
129
|
+
|
|
130
|
+
RED.httpAdmin.get(NODE_PATH + 'addDeviceToGroup', function (req, res) {
|
|
131
|
+
var config = req.query;
|
|
132
|
+
var controller = RED.nodes.getNode(config.controllerID);
|
|
133
|
+
if (controller && controller.constructor.name === "ServerNode") {
|
|
134
|
+
var response = controller.addDeviceToGroup(config.deviceId, config.groupId);
|
|
135
|
+
res.json(response);
|
|
136
|
+
} else {
|
|
137
|
+
res.status(404).end();
|
|
138
|
+
}
|
|
139
|
+
});
|
|
140
|
+
|
|
141
|
+
RED.httpAdmin.get(NODE_PATH + 'refreshMap', function (req, res) {
|
|
142
|
+
var config = req.query;
|
|
143
|
+
var controller = RED.nodes.getNode(config.controllerID);
|
|
144
|
+
if (controller && controller.constructor.name === "ServerNode") {
|
|
145
|
+
controller.refreshMap(true, config.engine).then(function(response){
|
|
146
|
+
res.json(response);
|
|
147
|
+
}).catch(error => {
|
|
148
|
+
res.status(404).end();
|
|
149
|
+
});
|
|
150
|
+
} else {
|
|
151
|
+
res.status(404).end();
|
|
152
|
+
}
|
|
153
|
+
});
|
|
154
|
+
RED.httpAdmin.get(NODE_PATH + 'showMap', function (req, res) {
|
|
155
|
+
var config = req.query;
|
|
156
|
+
var controller = RED.nodes.getNode(config.controllerID);
|
|
157
|
+
if (controller && controller.constructor.name === "ServerNode") {
|
|
158
|
+
var response = controller.map;
|
|
159
|
+
res.writeHead(200, {'Content-Type': 'image/svg+xml'});
|
|
160
|
+
res.end(response); // Send the file data to the browser.
|
|
161
|
+
} else {
|
|
162
|
+
res.status(404).end();
|
|
163
|
+
}
|
|
164
|
+
});
|
|
165
|
+
|
|
166
|
+
// This file exists purely to register the httpAdmin routes above (used by the
|
|
167
|
+
// editor's device/group pickers). It has no runtime behaviour of its own, but is
|
|
168
|
+
// registered as a real (invisible) node so that node-red-dev/other node package
|
|
169
|
+
// validators can parse it like any other node file.
|
|
170
|
+
function Zigbee2mqttApiNode(config) {
|
|
171
|
+
RED.nodes.createNode(this, config);
|
|
172
|
+
}
|
|
173
|
+
RED.nodes.registerType('zigbee2mqtt-eb-api', Zigbee2mqttApiNode, {
|
|
174
|
+
category: '' // empty category keeps it out of the palette
|
|
175
|
+
});
|
|
176
|
+
}
|
|
@@ -0,0 +1,316 @@
|
|
|
1
|
+
[
|
|
2
|
+
{
|
|
3
|
+
"id": "123545dd506fb882",
|
|
4
|
+
"type": "zigbee2mqtt-eb-in",
|
|
5
|
+
"z": "d9c248a1ac73f01a",
|
|
6
|
+
"name": "",
|
|
7
|
+
"server": "183e467f17e7451d",
|
|
8
|
+
"friendly_name": "Outlet 1",
|
|
9
|
+
"device_id": "0xa4c13880d0cef5c9",
|
|
10
|
+
"state": "state",
|
|
11
|
+
"outputAtStartup": true,
|
|
12
|
+
"x": 930,
|
|
13
|
+
"y": 560,
|
|
14
|
+
"wires": [
|
|
15
|
+
[
|
|
16
|
+
"1faf0be4d4395a25"
|
|
17
|
+
]
|
|
18
|
+
]
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
"id": "4834aa1faa625685",
|
|
22
|
+
"type": "zigbee2mqtt-eb-bridge",
|
|
23
|
+
"z": "d9c248a1ac73f01a",
|
|
24
|
+
"name": "",
|
|
25
|
+
"server": "183e467f17e7451d",
|
|
26
|
+
"topic": null,
|
|
27
|
+
"x": 980,
|
|
28
|
+
"y": 160,
|
|
29
|
+
"wires": [
|
|
30
|
+
[]
|
|
31
|
+
]
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"id": "b38b944ffd4e9a66",
|
|
35
|
+
"type": "zigbee2mqtt-eb-out",
|
|
36
|
+
"z": "d9c248a1ac73f01a",
|
|
37
|
+
"name": "",
|
|
38
|
+
"server": "183e467f17e7451d",
|
|
39
|
+
"friendly_name": "0x9035eafffe6acbed",
|
|
40
|
+
"device_id": "0x9035eafffe6acbed",
|
|
41
|
+
"command": "position",
|
|
42
|
+
"commandType": "z2m_cmd",
|
|
43
|
+
"payload": "payload",
|
|
44
|
+
"payloadType": "msg",
|
|
45
|
+
"transition": 0,
|
|
46
|
+
"x": 1460,
|
|
47
|
+
"y": 460,
|
|
48
|
+
"wires": []
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
"id": "33e8ef8026f7ecc1",
|
|
52
|
+
"type": "inject",
|
|
53
|
+
"z": "d9c248a1ac73f01a",
|
|
54
|
+
"name": "",
|
|
55
|
+
"props": [
|
|
56
|
+
{
|
|
57
|
+
"p": "payload"
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
"p": "topic",
|
|
61
|
+
"vt": "str"
|
|
62
|
+
}
|
|
63
|
+
],
|
|
64
|
+
"repeat": "",
|
|
65
|
+
"crontab": "",
|
|
66
|
+
"once": false,
|
|
67
|
+
"onceDelay": 0.1,
|
|
68
|
+
"topic": "",
|
|
69
|
+
"payload": "10",
|
|
70
|
+
"payloadType": "num",
|
|
71
|
+
"x": 1250,
|
|
72
|
+
"y": 460,
|
|
73
|
+
"wires": [
|
|
74
|
+
[
|
|
75
|
+
"b38b944ffd4e9a66"
|
|
76
|
+
]
|
|
77
|
+
]
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
"id": "62a13be50b93dcc9",
|
|
81
|
+
"type": "inject",
|
|
82
|
+
"z": "d9c248a1ac73f01a",
|
|
83
|
+
"name": "",
|
|
84
|
+
"props": [
|
|
85
|
+
{
|
|
86
|
+
"p": "payload"
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
"p": "topic",
|
|
90
|
+
"vt": "str"
|
|
91
|
+
}
|
|
92
|
+
],
|
|
93
|
+
"repeat": "",
|
|
94
|
+
"crontab": "",
|
|
95
|
+
"once": false,
|
|
96
|
+
"onceDelay": 0.1,
|
|
97
|
+
"topic": "",
|
|
98
|
+
"payload": "20",
|
|
99
|
+
"payloadType": "num",
|
|
100
|
+
"x": 1250,
|
|
101
|
+
"y": 500,
|
|
102
|
+
"wires": [
|
|
103
|
+
[
|
|
104
|
+
"b38b944ffd4e9a66"
|
|
105
|
+
]
|
|
106
|
+
]
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
"id": "1faf0be4d4395a25",
|
|
110
|
+
"type": "debug",
|
|
111
|
+
"z": "d9c248a1ac73f01a",
|
|
112
|
+
"name": "",
|
|
113
|
+
"active": true,
|
|
114
|
+
"tosidebar": true,
|
|
115
|
+
"console": false,
|
|
116
|
+
"tostatus": true,
|
|
117
|
+
"complete": "true",
|
|
118
|
+
"targetType": "full",
|
|
119
|
+
"statusVal": "payload",
|
|
120
|
+
"statusType": "auto",
|
|
121
|
+
"x": 1150,
|
|
122
|
+
"y": 560,
|
|
123
|
+
"wires": []
|
|
124
|
+
},
|
|
125
|
+
{
|
|
126
|
+
"id": "89edc10dcce1d277",
|
|
127
|
+
"type": "inject",
|
|
128
|
+
"z": "d9c248a1ac73f01a",
|
|
129
|
+
"name": "test",
|
|
130
|
+
"props": [
|
|
131
|
+
{
|
|
132
|
+
"p": "payload"
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
"p": "topic",
|
|
136
|
+
"vt": "str"
|
|
137
|
+
}
|
|
138
|
+
],
|
|
139
|
+
"repeat": "",
|
|
140
|
+
"crontab": "",
|
|
141
|
+
"once": false,
|
|
142
|
+
"onceDelay": 0.1,
|
|
143
|
+
"topic": "test",
|
|
144
|
+
"payload": "",
|
|
145
|
+
"payloadType": "date",
|
|
146
|
+
"x": 950,
|
|
147
|
+
"y": 360,
|
|
148
|
+
"wires": [
|
|
149
|
+
[
|
|
150
|
+
"7fdcec472ec527db"
|
|
151
|
+
]
|
|
152
|
+
]
|
|
153
|
+
},
|
|
154
|
+
{
|
|
155
|
+
"id": "7fdcec472ec527db",
|
|
156
|
+
"type": "zigbee2mqtt-eb-get",
|
|
157
|
+
"z": "d9c248a1ac73f01a",
|
|
158
|
+
"name": "",
|
|
159
|
+
"server": "183e467f17e7451d",
|
|
160
|
+
"friendly_name": "",
|
|
161
|
+
"device_id": "",
|
|
162
|
+
"state": "0",
|
|
163
|
+
"x": 1240,
|
|
164
|
+
"y": 380,
|
|
165
|
+
"wires": [
|
|
166
|
+
[
|
|
167
|
+
"8b9d391ced3e6d4c"
|
|
168
|
+
]
|
|
169
|
+
]
|
|
170
|
+
},
|
|
171
|
+
{
|
|
172
|
+
"id": "8b9d391ced3e6d4c",
|
|
173
|
+
"type": "debug",
|
|
174
|
+
"z": "d9c248a1ac73f01a",
|
|
175
|
+
"name": "",
|
|
176
|
+
"active": true,
|
|
177
|
+
"tosidebar": true,
|
|
178
|
+
"console": false,
|
|
179
|
+
"tostatus": false,
|
|
180
|
+
"complete": "true",
|
|
181
|
+
"targetType": "full",
|
|
182
|
+
"statusVal": "",
|
|
183
|
+
"statusType": "auto",
|
|
184
|
+
"x": 1430,
|
|
185
|
+
"y": 380,
|
|
186
|
+
"wires": []
|
|
187
|
+
},
|
|
188
|
+
{
|
|
189
|
+
"id": "01f67f868cbc9d5b",
|
|
190
|
+
"type": "inject",
|
|
191
|
+
"z": "d9c248a1ac73f01a",
|
|
192
|
+
"name": "Outlet 1",
|
|
193
|
+
"props": [
|
|
194
|
+
{
|
|
195
|
+
"p": "payload"
|
|
196
|
+
},
|
|
197
|
+
{
|
|
198
|
+
"p": "topic",
|
|
199
|
+
"vt": "str"
|
|
200
|
+
}
|
|
201
|
+
],
|
|
202
|
+
"repeat": "",
|
|
203
|
+
"crontab": "",
|
|
204
|
+
"once": false,
|
|
205
|
+
"onceDelay": 0.1,
|
|
206
|
+
"topic": "Outlet 1",
|
|
207
|
+
"payload": "",
|
|
208
|
+
"payloadType": "date",
|
|
209
|
+
"x": 950,
|
|
210
|
+
"y": 400,
|
|
211
|
+
"wires": [
|
|
212
|
+
[
|
|
213
|
+
"7fdcec472ec527db"
|
|
214
|
+
]
|
|
215
|
+
]
|
|
216
|
+
},
|
|
217
|
+
{
|
|
218
|
+
"id": "f79972418404f0bb",
|
|
219
|
+
"type": "inject",
|
|
220
|
+
"z": "d9c248a1ac73f01a",
|
|
221
|
+
"name": "zigbee2mqtt_Outlet1",
|
|
222
|
+
"props": [
|
|
223
|
+
{
|
|
224
|
+
"p": "payload"
|
|
225
|
+
},
|
|
226
|
+
{
|
|
227
|
+
"p": "topic",
|
|
228
|
+
"vt": "str"
|
|
229
|
+
}
|
|
230
|
+
],
|
|
231
|
+
"repeat": "",
|
|
232
|
+
"crontab": "",
|
|
233
|
+
"once": false,
|
|
234
|
+
"onceDelay": 0.1,
|
|
235
|
+
"topic": "zigbee2mqtt_Outlet1",
|
|
236
|
+
"payload": "",
|
|
237
|
+
"payloadType": "date",
|
|
238
|
+
"x": 1000,
|
|
239
|
+
"y": 440,
|
|
240
|
+
"wires": [
|
|
241
|
+
[
|
|
242
|
+
"7fdcec472ec527db"
|
|
243
|
+
]
|
|
244
|
+
]
|
|
245
|
+
},
|
|
246
|
+
{
|
|
247
|
+
"id": "6cd3c363497388dc",
|
|
248
|
+
"type": "inject",
|
|
249
|
+
"z": "d9c248a1ac73f01a",
|
|
250
|
+
"name": "zigbee2mqtt/Outlet 1",
|
|
251
|
+
"props": [
|
|
252
|
+
{
|
|
253
|
+
"p": "payload"
|
|
254
|
+
},
|
|
255
|
+
{
|
|
256
|
+
"p": "topic",
|
|
257
|
+
"vt": "str"
|
|
258
|
+
}
|
|
259
|
+
],
|
|
260
|
+
"repeat": "",
|
|
261
|
+
"crontab": "",
|
|
262
|
+
"once": false,
|
|
263
|
+
"onceDelay": 0.1,
|
|
264
|
+
"topic": "zigbee2mqtt/Outlet 1",
|
|
265
|
+
"payload": "",
|
|
266
|
+
"payloadType": "date",
|
|
267
|
+
"x": 1000,
|
|
268
|
+
"y": 320,
|
|
269
|
+
"wires": [
|
|
270
|
+
[
|
|
271
|
+
"7fdcec472ec527db"
|
|
272
|
+
]
|
|
273
|
+
]
|
|
274
|
+
},
|
|
275
|
+
{
|
|
276
|
+
"id": "3cb917c78bc66b0e",
|
|
277
|
+
"type": "inject",
|
|
278
|
+
"z": "d9c248a1ac73f01a",
|
|
279
|
+
"name": "",
|
|
280
|
+
"props": [
|
|
281
|
+
{
|
|
282
|
+
"p": "payload"
|
|
283
|
+
},
|
|
284
|
+
{
|
|
285
|
+
"p": "topic",
|
|
286
|
+
"vt": "str"
|
|
287
|
+
}
|
|
288
|
+
],
|
|
289
|
+
"repeat": "",
|
|
290
|
+
"crontab": "",
|
|
291
|
+
"once": false,
|
|
292
|
+
"onceDelay": 0.1,
|
|
293
|
+
"topic": "no device",
|
|
294
|
+
"payload": "",
|
|
295
|
+
"payloadType": "date",
|
|
296
|
+
"x": 1010,
|
|
297
|
+
"y": 220,
|
|
298
|
+
"wires": [
|
|
299
|
+
[
|
|
300
|
+
"7fdcec472ec527db"
|
|
301
|
+
]
|
|
302
|
+
]
|
|
303
|
+
},
|
|
304
|
+
{
|
|
305
|
+
"id": "183e467f17e7451d",
|
|
306
|
+
"type": "zigbee2mqtt-eb-server",
|
|
307
|
+
"name": "",
|
|
308
|
+
"host": "192.168.1.2",
|
|
309
|
+
"mqtt_port": "1883",
|
|
310
|
+
"mqtt_username": "",
|
|
311
|
+
"mqtt_password": "",
|
|
312
|
+
"tls": "",
|
|
313
|
+
"usetls": false,
|
|
314
|
+
"base_topic": "zigbee2mqtt"
|
|
315
|
+
}
|
|
316
|
+
]
|
|
Binary file
|
|
Binary file
|
package/icons/icon.png
ADDED
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
3
|
+
<plist version="1.0">
|
|
4
|
+
<dict>
|
|
5
|
+
<key>backingScale</key>
|
|
6
|
+
<real>1</real>
|
|
7
|
+
<key>mode</key>
|
|
8
|
+
<integer>0</integer>
|
|
9
|
+
<key>shapeSelectionFilename</key>
|
|
10
|
+
<string>shapeSelection</string>
|
|
11
|
+
<key>size</key>
|
|
12
|
+
<data>
|
|
13
|
+
NC10UHpTVFAQAAAAQGbAAAAAAABAZ2AAAAAAAA==
|
|
14
|
+
</data>
|
|
15
|
+
<key>softness</key>
|
|
16
|
+
<real>0.0</real>
|
|
17
|
+
<key>timestamp</key>
|
|
18
|
+
<real>606977233.632658</real>
|
|
19
|
+
<key>transform</key>
|
|
20
|
+
<array>
|
|
21
|
+
<real>1.4945054945054939</real>
|
|
22
|
+
<real>0.0</real>
|
|
23
|
+
<real>0.0</real>
|
|
24
|
+
<real>1.5454545454545454</real>
|
|
25
|
+
<real>-50.956043956043892</real>
|
|
26
|
+
<real>-117.27272727272721</real>
|
|
27
|
+
<real>0.0</real>
|
|
28
|
+
<real>0.0</real>
|
|
29
|
+
</array>
|
|
30
|
+
<key>version</key>
|
|
31
|
+
<integer>2</integer>
|
|
32
|
+
</dict>
|
|
33
|
+
</plist>
|