Commit Graph

30 Commits

Author SHA1 Message Date
Pim van den Berg c41b700f13 feat(itho-wpu): support for all datatypes supported by the service tool
* 0x0: integer (1 byte)
* 0x1: 1 decimal float (1 byte)
* 0x2: 2 decimal float (1 byte)
* 0xc: integer (1 byte)
* 0xf: integer/2 (1 byte)
* 0x10: 0 decimal unsigned integer (2 bytes)
* 0x11: 1 decimal unsigned float (2 bytes)
* 0x12: 2 decimal unsigned float (2 bytes)
* 0x13: 3 decimal unsigned float (2 bytes)
* 0x14: 4 decimal unsigned float (2 bytes)
* 0x20: 0 decimal unsigned integer (4 bytes)
* 0x21: 1 decimal unsigned float (4 bytes)
* 0x22: 2 decimal unsigned float (4 bytes)
* 0x23: 3 decimal unsigned float (4 bytes)
* 0x24: 4 decimal unsigned float (4 bytes)
* 0x25: 5 decimal unsigned float (4 bytes)
* 0x5b: unsigned integer (2 bytes)
* 0x6c: integer (max 1) (1 byte)
* 0x80: 0 decimal signed integer (1 byte)
* 0x81: 1 decimal signed float (1 byte)
* 0x82: 2 decimal signed float (1 byte)
* 0x8f: 3 decimal signed float (1 byte)
* 0x90: 0 decimal signed integer (2 bytes)
* 0x91: 1 decimal signed float (2 bytes)
* 0x92: 2 decimal signed float (2 bytes)
* 0xa0: 0 decimal signed integer (4 bytes)
* 0xa1: 1 decimal signed float (4 bytes)
* 0xa2: 2 decimal signed float (4 bytes)
* 0xa3: 3 decimal signed float (4 bytes)
* 0xa4: 4 decimal signed float (4 bytes)
* 0xa5: 5 decimal signed float (4 bytes)
2021-06-10 14:14:46 +02:00
Pim van den Berg 370209603b fix(itho-wpu): 0x90 is a 2 byte signed decimal 2021-06-10 13:19:54 +02:00
Pim van den Berg 751182b70d style: apply flake8 and black formatting
To check for errors:
$ pre-commit run --all-files

To install as pre-commit hook:
$ pre-commit install
2021-05-30 14:52:24 +02:00
Pim van den Berg b936311e59 refactor: put all export related stuff in itho_export.py 2021-04-08 14:19:37 +02:00
Pim van den Berg 7f4cdc8682 refactor: put all i2c related stuff in itho_i2c.py 2021-04-08 13:58:52 +02:00
Pim van den Berg 60c4a794a8 feat(itho-wpu): getdatalog: show name identifier in output
This shows the name identifier for each measurement. This identifier is
for example used to store measurements in InfluxDB.
2021-03-25 14:14:27 +01:00
Pim van den Berg 236d5c34fc feat(itho-wpu): add timestamp argument to make it optional
By default don't output timestamps for each line. Provide command line
argument --timestamp to enable it again.
2021-03-25 14:13:21 +01:00
Pim van den Berg 96f91cb9d3 feat(itho-wpu): get datalog structure from the database
Instead of hardcoding the datalog structure for listversion 11 (my WPU
version), get the datalog structure from the database and match that
against the result from the getdatatype call.

This way all WPU versions that are in the database are automatically
supported.
2021-03-14 13:41:46 +01:00
Pim van den Berg 00f098f4e1 fix(itho-wpu): 0x12 is a 2 byte unsigned decimal 2021-03-07 14:59:59 +01:00
Pim van den Berg 1f8eca43f6 feat(itho-wpu): populate IthoWPU object with nodeid, datatype
These are required to look up information in the database related to
your WPU version.
2021-03-07 14:59:59 +01:00
Pim van den Berg ff149eba6a feat(itho-wpu): cache results for getnodeid, getserial, getdatatype in a json file
The results for these calls are static. If we cache them we don't have
to retrieve it from the WPU every time we need it.

To ignore the cache (for reading), provide the --no-cache argument.
2021-03-07 14:59:59 +01:00
Pim van den Berg 0b4b9a3d79 feat(itho-wpu): move itho interaction to an IthoWPU class
To be able to easily execute multiple actions.
2021-02-12 17:07:43 +01:00
WouterJN ce846efb62 Update itho-wpu.py
Resolving issue with datatype 0xc (1 byte integer)
2020-12-27 22:57:22 +01:00
Pim van den Berg 2a25e8148b feat(itho-wpu): use (hardcoded) datatype from getdatatype in datalog
Action "getdatatype" returns a list of bytes representing the datatype
for each field in action "getdatalog". This is a subset of these
datatypes:

* 0x0: integer (1 byte)
* 0xc: integer (1 byte)
* 0x10: unsigned integer (2 bytes)
* 0x92: 2 decimal signed float (2 bytes)
2020-12-03 14:48:50 +01:00
Pim van den Berg d40b0d94ff feat(itho-wpu): add manufacturer naming 2020-11-21 15:08:10 +01:00
Pim van den Berg 273a22a4c0 refactor(itho-wpu): check messageclass in a central function 2020-11-16 14:04:54 +01:00
Pim van den Berg 1a57a8bd9b feat(itho-wpu): implement getserial action 2020-11-15 15:26:25 +01:00
Pim van den Berg b0ea3a9473 refactor(itho-wpu): compose request + calculate checksum on the fly
Messages have 6 header bytes, data bytes and 1 checksum byte.

The 6 header bytes are:
1: i2c destination address (0x82)
2: i2c reply address (0x80)
3,4: message class
5: message type (0x04 = request)
6: data length (0x00 in case of a request)
2020-11-15 15:26:18 +01:00
Pim van den Berg 58f35d988e feat(itho-wpu): implement getnodeid action 2020-11-15 15:18:12 +01:00
Pim van den Berg 11ae0978b3 refactor(itho-wpu): check MessageType + move MessageClass check
MessageType 4th byte (5th if you include 0x80) is:
- 0x01: response
- 0x04: request
2020-11-14 15:31:37 +01:00
Pim van den Berg 152b6021cf feat(itho-wpu): check message length
The 5th byte (6th if you include 0x80) contains the message length. To
double check if the message is correct we can check this against the
actual message length.
2020-11-14 15:10:59 +01:00
Pim van den Berg c43de957e9 feat(itho-wpu): export to influxdb support
Export getdatalog measurements to InfluxDB by giving the
'--export-to-influxdb' argument. Additionally configure the InfluxDB
credentials via environment variables:
- INFLUXDB_HOST (default: localhost)
- INFLUXDB_PORT (default: 8086)
- INFLUXDB_USERNAME (default: root)
- INFLUXDB_PASSWORD (default: root)
- INFLUXDB_DATABASE
2020-11-08 15:08:46 +01:00
Pim van den Berg c867203913 feat(itho-wpu): process getdatalog 2020-11-08 15:08:46 +01:00
Pim van den Berg d00e948208 feat(itho-wpu): rm slave thread + pass result to I2CMaster via a queue + add retry mechanism
Remove the slave thread, set_callback already spawns a thread.

I2CSlave.callback() now puts the result (if valid) in a queue. This item
can be picked up by I2CMaster for further processing.

I2CMaster will wait 0.21s for a result in the queue. 0.21s, because I
always see a response in < 0.2s. If there is no result, it will send the
request again (max 20 retries). This is because I don't get reliable
responses (via pigpiod?). In an earlier commit I mentioned to configure
pigpiod with -s 2 (sample rate 2 microseconds).  This doesn't seem to be
true. For example -s 10 gives the same reliability (and less CPU usage
by pigpiod).
2020-11-08 15:08:46 +01:00
Pim van den Berg e3bc670050 refactor(itho-wpu): rm wait type
The wait type is unreliable. No reason to keep maintaining this.
2020-11-05 13:42:21 +01:00
Pim van den Berg c7b5171a66 feat(itho-wpu): add checksum validation for received messages 2020-11-05 13:41:47 +01:00
Pim van den Berg f989b61789 feat(itho-wpu): cli arguments to run master/slave only + set slave timeout
--master-only allows to only run the I2C master functionality.
--slave-only allows to only run the I2C slave functionality.

The I2C slave functionality via the "set_callback" mechanism (--type
callback) just executes the pigpio "event_callback()" function and waits
for 2 seconds for a response. The amount of seconds can now be
configured via --slave-timeout.
2020-10-25 13:54:43 +01:00
Pim van den Berg ff3c705608 feat(itho-wpu): option to slave via event_callback()
Argument "--type [callback,wait]" is added to be able to switch between
"wait_for_event()" (previous functionality) and "event_callback()" in
the I2C slave functionality.

In a thread set_callback() executes event_callback() and just (very
dirty) sleeps 2 seconds to get a response or else cancels the event and
stops pigpio.

To get the most reliable output pigpiod is started with -s 2 (sample
rate 2 microseconds). Still most of the time too few bytes are received
on the "getdatalog" action (153 bytes expected).
2020-10-22 14:39:04 +02:00
Pim van den Berg 15c6103820 feat(itho-wpu): basic slave functionality
This uses the pigpio library as I'm not quite sure yet how to read this
data directly from /dev/i2c-1, without polling and high CPU usage.
2020-10-22 14:38:43 +02:00
Pim van den Berg 91913c4fe7 feat(itho-wpu): initial i2c master functionality
Writing directly to the /dev/i2c-1 device.

Support for 4 actions:
- getregelaar
- getserial
- getdatatype
- getdatalog
2020-10-17 18:05:56 +02:00