This adapter is based on @iobroker/create-adapter v1.31.0 It was developed looking at E3/DC's sample application which is written in C++.
The sample application package also contains the official tag lists, which are necessary to interpret RSCP frames semantically.
In the DB namespace, time series can be requested from E3/DC:
- TIME_START = start of observed time range
- TIME_SPAN = length of observed time range; minimum is 900 seconds, i.e. 15 minutes
- TIME_INTERVAL = sampling rate; minimum is 900 seconds, i.e. 15 minutes
Results contain GRAPH_INDEX, described as "relative position within the graph". The data point's timestamp can be approximated like
TIMESTAMP = TIME_START + GRAPH_INDEX * TIME_INTERVAL
Here is some data from test calls:
| SPAN | INTERVAL | GRAPH_INDEX increment | # of values |
|---|---|---|---|
| 7200 | 60 | 13.6 | 8 |
| 3600 | 60 | 13.6 | 4 |
| 3600 | 120 | 6.8 | 4 |
| 120 | 3600 | ERR | ERR |
| 120 | 120 | ERR | ERR |
| 360 | 120 | ERR | ERR |
| 1800 | 120 | 6.8 | 2 |
| 900 | 120 | 6.8 | 1 |
| 86400 | 3600 | 1 | 24 |
| 86400 | 60 | 13.6 | 96 |
| 86400 | 7200 | 1 | 12 |
| 86400 | 1800 | 1 | 48 |
| 43200 | 900 | 1 | 48 |
| 86400 | 900 | 1 | 96 |
| 172800 | 3600 | 1 | 32 |
| 172800 | 1800 | 1 | 64 |
| 172800 | 7200 | 1 | 16 |
| 345600 | 7200 | 1 | 16 |
Observations:
- It looks like E3/DC stores values in 15 minutes resolution.
- TIME_SPAN below 900 seconds causes an error response.
- TIME_INTERVAL below 900 seconds is treated like 900 seconds.
- For HISTORY_DATA_DAY, it seems that TIME_SPAN maximum is 32 hours.
- Typically, the first data value is at TIME_START + TIME_INTERVAL/2
- One additional value is (always?) transmitted at the end of TIME_SPAN.
The rest of this Developer manual will be modified/removed when processed and done, respectively.
We've collected some best practices regarding ioBroker development and coding in general. If you're new to ioBroker or Node.js, you should check them out. If you're already experienced, you should also take a look at them - you might learn something new :)
Several npm scripts are predefined for your convenience. You can run them using npm run <scriptname>
| Script name | Description |
|---|---|
test:js |
Executes the tests you defined in *.test.js files. |
test:package |
Ensures your package.json and io-package.json are valid. |
test:unit |
Tests the adapter startup with unit tests (fast, but might require module mocks to work). |
test:integration |
Tests the adapter startup with an actual instance of ioBroker. |
test |
Performs a minimal test run on package files and your tests. |
check |
Performs a type-check on your code (without compiling anything). |
lint |
Runs ESLint to check your code for formatting errors and potential bugs. |
When done right, testing code is invaluable, because it gives you the confidence to change your code while knowing exactly if and when something breaks. A good read on the topic of test-driven development is https://hackernoon.com/introduction-to-test-driven-development-tdd-61a13bc92d92. Although writing tests before the code might seem strange at first, but it has very clear upsides.
The template provides you with basic tests for the adapter startup and package files. It is recommended that you add your own tests into the mix.
Since you have chosen GitHub Actions as your CI service, you can
enable automatic releases on npm whenever you push a new git tag that matches the form
v<major>.<minor>.<patch>. The necessary steps are described in .github/workflows/test-and-release.yml.
To get your adapter released in ioBroker, please refer to the documentation of ioBroker.repositories.
In order to install the adapter locally without publishing, the following steps are recommended:
- Create a tarball from your dev directory:
npm pack
- Upload the resulting file to your ioBroker host
- Install it locally (The paths are different on Windows):
cd /opt/iobroker npm i /path/to/tarball.tgz
For later updates, the above procedure is not necessary. Just do the following:
- Overwrite the changed files in the adapter directory (
/opt/iobroker/node_modules/iobroker.e3dc-rscp) - Execute
iobroker upload e3dc-rscpon the ioBroker host
