homebridge-solis-new 1.0.2
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 +21 -0
- package/README.md +52 -0
- package/config.schema.json +37 -0
- package/dist/accessory.d.ts +4 -0
- package/dist/accessory.d.ts.map +1 -0
- package/dist/accessory.js +77 -0
- package/dist/accessory.js.map +1 -0
- package/package.json +51 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2020 Simon Arnell
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
<span align="center">
|
|
2
|
+
|
|
3
|
+
# Homebridge Solis Plugin
|
|
4
|
+
|
|
5
|
+
<a href="https://www.npmjs.com/package/homebridge-solis"><img title="npm version" src="https://badgen.net/npm/v/homebridge-solis" ></a>
|
|
6
|
+
<a href="https://www.npmjs.com/package/homebridge-solis"><img title="npm downloads" src="https://badgen.net/npm/dt/homebridge-solis" ></a>
|
|
7
|
+
|
|
8
|
+
</span>
|
|
9
|
+
|
|
10
|
+
<img src="https://github.com/simonarnell/homebridge-solis/blob/resources/inverter.jpg" align="right" alt="inverter">
|
|
11
|
+
|
|
12
|
+
## About
|
|
13
|
+
|
|
14
|
+
**Homebridge-solis** is a [homebridge](https://homebridge.io) plugin that collects solar panel generation data from [Solis PV inverters](https://www.ginlong.com/) with attached [data logging sticks](https://www.ginlong.com/accessories2/1083.html) and publishes the collected data to the Apple [HomeKit](https://developer.apple.com/homekit/) ecosystem.
|
|
15
|
+
|
|
16
|
+
## Background
|
|
17
|
+
|
|
18
|
+
Due to Apple's HomeKit currently only natively supporting a limited set of service types and specifically not domestic energy generation equipment, the inverters are modelled as [outlets](https://developer.apple.com/documentation/homekit/hmservicetypeoutlet). Whilst outlets are modelled in Apple's [Home](https://www.apple.com/uk/ios/home/) app on iOS and macOS, it is only to the degree of representing and allowing modification of their state (on/off).
|
|
19
|
+
|
|
20
|
+
Fortunately [Eve](https://www.evehome.com/en)'s [app](https://www.evehome.com/en/eve-app) supports their own smart outlets that extend the HomeKit API to publish consumption data. The plugin, uses these consumption characteristics to represent PV generation data. In the Eve app, the inverter appears as an outlet that switches on and off according to the sun's intensity and its ability to energise the inverter, in addition the energy generated appears as consumption data.
|
|
21
|
+
|
|
22
|
+
<img src="https://github.com/simonarnell/homebridge-solis/blob/resources/eve.png" align="left" alt="eve app">
|
|
23
|
+
|
|
24
|
+
## Instructions
|
|
25
|
+
|
|
26
|
+
### GUI
|
|
27
|
+
|
|
28
|
+
Install an instance of [homebridge](https://homebridge.io) on your network. If you prefer a graphical interface install [Homebridge Config UI X](https://github.com/oznu/homebridge-config-ui-x#readme).
|
|
29
|
+
|
|
30
|
+
Once installed, login to the interface and scan the QR code with your iPhone, this will start the process to add the homebridge to your Apple Home instance.
|
|
31
|
+
|
|
32
|
+
Once added, login back into the Homebridge Comfig UI X interface, click plugins from the menu, type `solis` as the search term, click install next to the plugin called `homebridge-solis`. You will be asked to provide the IP address and credentials to your inverter's data logging stick.
|
|
33
|
+
|
|
34
|
+
Assuming it's daylight outside, the app should start collecting data immediately, open the Eve [app](https://www.evehome.com/en/eve-app) and select the inverter - its generation data, albeit labelled as consumption data, should be visible as per the above screenshot.
|
|
35
|
+
|
|
36
|
+
### Configuration
|
|
37
|
+
|
|
38
|
+
Alternatively the plugin can be configured within the homebridge `config.json`. The following is an example configuration:
|
|
39
|
+
```
|
|
40
|
+
{
|
|
41
|
+
"accessories": [{
|
|
42
|
+
"name": "Solis PV Inverter",
|
|
43
|
+
"username": "",
|
|
44
|
+
"password": "",
|
|
45
|
+
"hostname": "",
|
|
46
|
+
"interval": 30,
|
|
47
|
+
"accessory": "Solis PV Inverter Homebridge Plugin"
|
|
48
|
+
}]
|
|
49
|
+
}
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
The username, password and hostname properties all relate to the details associated with the inverter data logging stick.
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
{
|
|
2
|
+
"pluginAlias": "Solis PV Inverter Homebridge Plugin",
|
|
3
|
+
"pluginType": "accessory",
|
|
4
|
+
"singular": false,
|
|
5
|
+
"schema": {
|
|
6
|
+
"type": "object",
|
|
7
|
+
"properties": {
|
|
8
|
+
"name": {
|
|
9
|
+
"title": "Name",
|
|
10
|
+
"type": "string",
|
|
11
|
+
"required": true,
|
|
12
|
+
"default": "Solis PV Inverter - Loft"
|
|
13
|
+
},
|
|
14
|
+
"username": {
|
|
15
|
+
"title": "Username",
|
|
16
|
+
"type": "string",
|
|
17
|
+
"required": true
|
|
18
|
+
},
|
|
19
|
+
"password": {
|
|
20
|
+
"title": "Password",
|
|
21
|
+
"type": "string",
|
|
22
|
+
"required": true
|
|
23
|
+
},
|
|
24
|
+
"hostname": {
|
|
25
|
+
"title": "Hostname",
|
|
26
|
+
"type": "string",
|
|
27
|
+
"required": true,
|
|
28
|
+
"format": "hostname"
|
|
29
|
+
},
|
|
30
|
+
"interval": {
|
|
31
|
+
"title": "Update interval (s)",
|
|
32
|
+
"type": "integer",
|
|
33
|
+
"minimum": 30
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"accessory.d.ts","sourceRoot":"","sources":["../src/accessory.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,GAAG,EAQG,MAAM,YAAY,CAAC;8BAMZ,GAAG,KAAG,IAAI;AAAzB,kBAGE"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
const SolisInverterClient = require("solis-inverter/lib/solis_inverter_client");
|
|
3
|
+
let hap;
|
|
4
|
+
class SolisInverter {
|
|
5
|
+
constructor(log, config) {
|
|
6
|
+
this.log = log;
|
|
7
|
+
this.name = config.name;
|
|
8
|
+
this.on = false;
|
|
9
|
+
this.generating = false;
|
|
10
|
+
this.generatedToday = 0;
|
|
11
|
+
this.currentlyGenerating = 0;
|
|
12
|
+
this.interval = isNaN(parseInt(config.interval)) || parseInt(config.interval) < 30 ? 30 : parseInt(config.interval);
|
|
13
|
+
this.address = config.hostname;
|
|
14
|
+
this.username = config.username;
|
|
15
|
+
this.password = config.password;
|
|
16
|
+
this.solisInverterClient = new SolisInverterClient(this.address, this.username, this.password);
|
|
17
|
+
setInterval(this.fetchData.bind(this), this.interval * 1000);
|
|
18
|
+
setInterval(function midnightReset() {
|
|
19
|
+
this.generatedToday = 0;
|
|
20
|
+
setInterval(midnightReset, new Date(new Date().setDate(new Date().getDate() + 1)).setHours(0, 0, 0, 0).valueOf() - new Date().valueOf());
|
|
21
|
+
}, new Date(new Date().setDate(new Date().getDate() + 1)).setHours(0, 0, 0, 0).valueOf() - new Date().valueOf());
|
|
22
|
+
this.inverterService = new hap.Service(this.name, hap.Service.Outlet.UUID);
|
|
23
|
+
this.inverterService.addCharacteristic(hap.Characteristic.On)
|
|
24
|
+
.on("get" /* GET */, (callback) => {
|
|
25
|
+
log.info(`Inverter State: ${this.on ? "On" : "Off"}`);
|
|
26
|
+
callback(undefined, this.on ? 1 : 0);
|
|
27
|
+
});
|
|
28
|
+
this.inverterService.addCharacteristic(hap.Characteristic.OutletInUse)
|
|
29
|
+
.on("get" /* GET */, (callback) => {
|
|
30
|
+
log.info(`Inverter In Use (generating): ${this.generating ? "Yes" : "No"}`);
|
|
31
|
+
callback(undefined, this.generating ? 1 : 0);
|
|
32
|
+
});
|
|
33
|
+
this.inverterService.addCharacteristic(new hap.Characteristic("Current Generation", "E863F10D-079E-48FF-8F27-9C2605A29F52", { format: "uint16" /* UINT16 */, unit: 'Watts', perms: ["pr" /* PAIRED_READ */, "ev" /* NOTIFY */] }))
|
|
34
|
+
.on("get" /* GET */, (callback) => {
|
|
35
|
+
log.info("Currently generating: " + this.currentlyGenerating);
|
|
36
|
+
callback(undefined, this.currentlyGenerating);
|
|
37
|
+
});
|
|
38
|
+
this.inverterService.addCharacteristic(new hap.Characteristic("Today's Generation", "E863F10C-079E-48FF-8F27-9C2605A29F52", { format: "float" /* FLOAT */, unit: 'kWh', perms: ["pr" /* PAIRED_READ */, "ev" /* NOTIFY */] }))
|
|
39
|
+
.on("get" /* GET */, (callback) => {
|
|
40
|
+
log.info("Today's generation: " + this.generatedToday);
|
|
41
|
+
callback(undefined, this.generatedToday);
|
|
42
|
+
});
|
|
43
|
+
this.informationService = new hap.Service.AccessoryInformation()
|
|
44
|
+
.setCharacteristic(hap.Characteristic.Manufacturer, "Solis")
|
|
45
|
+
.setCharacteristic(hap.Characteristic.Model, "Inverter");
|
|
46
|
+
log.info("Solis Inverter HomeKit interface finished initializing!");
|
|
47
|
+
}
|
|
48
|
+
getServices() {
|
|
49
|
+
return [
|
|
50
|
+
this.informationService,
|
|
51
|
+
this.inverterService,
|
|
52
|
+
];
|
|
53
|
+
}
|
|
54
|
+
fetchData() {
|
|
55
|
+
this.solisInverterClient.fetchData()
|
|
56
|
+
.then((data) => {
|
|
57
|
+
this.log.debug(JSON.stringify(data));
|
|
58
|
+
if (data.inverter.serial) {
|
|
59
|
+
this.on = true;
|
|
60
|
+
this.generatedToday = data.energy.today;
|
|
61
|
+
this.currentlyGenerating = data.power;
|
|
62
|
+
this.generating = data.power > 0;
|
|
63
|
+
}
|
|
64
|
+
})
|
|
65
|
+
.catch((err) => {
|
|
66
|
+
this.log.warn(`Error communicating with inverter - ${err.code}`);
|
|
67
|
+
this.on = false;
|
|
68
|
+
this.generating = false;
|
|
69
|
+
this.currentlyGenerating = 0;
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
module.exports = (api) => {
|
|
74
|
+
hap = api.hap;
|
|
75
|
+
api.registerAccessory("Solis PV Inverter Homebridge Plugin", SolisInverter);
|
|
76
|
+
};
|
|
77
|
+
//# sourceMappingURL=accessory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"accessory.js","sourceRoot":"","sources":["../src/accessory.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "homebridge-solis-new",
|
|
3
|
+
"version": "1.0.2",
|
|
4
|
+
"description": "A homebridge plugin that collects solar panel generation data from Solis PV inverters and publishes to the HomeKit system.",
|
|
5
|
+
"main": "dist/accessory.js",
|
|
6
|
+
"scripts": {
|
|
7
|
+
"clean": "rimraf ./dist",
|
|
8
|
+
"build": "rimraf ./dist && tsc",
|
|
9
|
+
"postpublish": "npm run clean",
|
|
10
|
+
"test": "echo \"Error: no test specified\" && exit 1",
|
|
11
|
+
"lint": "eslint src/**.ts --max-warnings=0",
|
|
12
|
+
"watch": "npm run build && npm link && nodemon",
|
|
13
|
+
"prepublishOnly": "npm run lint && npm run build"
|
|
14
|
+
},
|
|
15
|
+
"engines": {
|
|
16
|
+
"node": ">=10.17.0",
|
|
17
|
+
"homebridge": ">=1.0.0"
|
|
18
|
+
},
|
|
19
|
+
"dependencies": {
|
|
20
|
+
"solis-inverter-new": "fss/solis-inverter-new.git"
|
|
21
|
+
},
|
|
22
|
+
"devDependencies": {
|
|
23
|
+
"@types/node": "^14.14.6",
|
|
24
|
+
"@typescript-eslint/eslint-plugin": "^4.10.0",
|
|
25
|
+
"@typescript-eslint/parser": "^4.10.0",
|
|
26
|
+
"eslint": "^7.13.0",
|
|
27
|
+
"homebridge": "^1.2.3",
|
|
28
|
+
"nodemon": "^2.0.6",
|
|
29
|
+
"rimraf": "^3.0.2",
|
|
30
|
+
"ts-node": "^9.0.0",
|
|
31
|
+
"typescript": "^4.0.5"
|
|
32
|
+
},
|
|
33
|
+
"files": [
|
|
34
|
+
"LICENSE",
|
|
35
|
+
"dist",
|
|
36
|
+
"config.schema.json"
|
|
37
|
+
],
|
|
38
|
+
"repository": "github:danknee007/homebridge-solis-new",
|
|
39
|
+
"keywords": [
|
|
40
|
+
"homebridge-plugin",
|
|
41
|
+
"solis",
|
|
42
|
+
"pv",
|
|
43
|
+
"homekit"
|
|
44
|
+
],
|
|
45
|
+
"author": "Dan Knee",
|
|
46
|
+
"license": "MIT",
|
|
47
|
+
"bugs": {
|
|
48
|
+
"url": "https://github.com/danknee007/homebridge-solis-new/issues"
|
|
49
|
+
},
|
|
50
|
+
"homepage": "https://github.com/danknee007/homebridge-solis-new#readme"
|
|
51
|
+
}
|