Skip to content

Latest commit

 

History

History
123 lines (87 loc) · 3.07 KB

README.md

File metadata and controls

123 lines (87 loc) · 3.07 KB

Python Inverter COM

Python module to communicate with WKS EKO Circle inverters.

Installation

$ python -m pip install 'git+https://github.com/BoboTiG/[email protected]'

Module

You can use the module directly from your code:

from wks_com import constants
from wks_com.inverter import Inverter


# Init the inverter (default port is /dev/ttyUSB0, several optional keyword-arguments are available)
# Example: inverter = Inverter("/dev/ttyAMA0", timeout=5.0)
inverter = Inverter()

# Send a command to the inverter
response = inverter.send("QID")

# The same command via an alias
response = inverter.send("serial-no")

# The same command using a constant
response = inverter.send(constants.CMD_SERIAL_NO)

Program

The module comes with the wks-read program. You can use it to send commands to inverters, and see what data you can get from.

The usage is as follow:

$ wks-read [--port SERIAL_PORT] [--debug] COMMAND_OR_ALIAS [COMMAND_OR_ALIAS...]

As an example, here is how to retrieve the inverter serial number:

$ wks-read QID
"96332309100452"

# The same command via an alias
$ wks-read serial-no
"96332309100452"

When enabling debug logs, it will likely show:

$ wks-read --debug serial-no
DEBUG:wks_com.inverter:/dev/ttyUSB0 > SEND 'QIDÖê\r'
DEBUG:wks_com.inverter:/dev/ttyUSB0 > WRITTEN 6 chars (OK)
DEBUG:wks_com.inverter:/dev/ttyUSB0 < RAW b'(96332309100452?\xf3\r'
DEBUG:wks_com.inverter:/dev/ttyUSB0 < DECODED '96332309100452'
"96332309100452"

The default port is /dev/ttyUSB0, you can change that:

$ wks-read --port /dev/ttyAMA0 serial-no
"96332309100452"

Commands and Aliases

You can send any commands as defined in the official documentation, and even unknown commands.

There are also aliases you could use:

  • daily-load for the QLD command (it will automatically fill the date using the current time);
  • daily-pv for the QED command (it will automatically fill the date using the current time);
  • metrics for the QPGS0 command;
  • monthly-load for the QLM command (it will automatically fill the date using the current time);
  • monthly-pv for the QEM command (it will automatically fill the date using the current time);
  • ratings for the QPIRI command;
  • serial-no for the QID command;
  • status for the QPIGS command;
  • time for the QT command;
  • total-load for the QLT command;
  • total-pv for the QET command;
  • warnings for the QPIWS command;
  • yearly-load for the QLY command (it will automatically fill the date using the current time);
  • yearly-pv for the QEY command (it will automatically fill the date using the current time);

When the inverter does not understand a command, it will respond with NAK.

Development

Setup a virtual environment:

$ python -m venv venv
$ . venv/bin/activate

Install, or update, dependencies:

$ python -m pip install -U pip
$ python -m pip install -e '.[dev]'

Run tests:

$ python -Wd -m pytest --doctest-modules src

Run linters, and quality checkers:

$ ./checks.sh