Skip to content

Latest commit

 

History

History
186 lines (134 loc) · 6.07 KB

README.md

File metadata and controls

186 lines (134 loc) · 6.07 KB

Copyright (C) 2022, KNS Group LLC («YADRO»). All rights reserved

SPDX-License-Identifier: GPL-2.0-or-later

Author: Alexander Amelkin alexander@amelkin.msk.ru

KE24

Introduction

This is a Python program to control the KernelChip KE-USB24R relay module.

Currently, the program supports the following operations:

  • Identify a Ke-USB24R device on a serial port
  • Reading a relay state
  • Reading a GPIO line state
  • Setting a GPIO line output value
  • Setting a relay state
  • Reading firmware version

The tool is quite versatile and can be easily configured to your needs via a YAML file. One of the advantages is that you may define a list of ttyACM ports to search for your Ke-USB24R modules using their serial numbers, and then configure different "devices" to serve your needs.

Imagine that you're developing support for a chassis intrusion sensor, and in your lab you have four devices called "athos", "porthos", "aramis" and "dartagnan" with their chassis intrusion sensors connected to relays 1-4 of your Ke-USB24R module. You may then configure this tool to allow for invocation like this:

$ ke24.py -d athos -r cover -s closed -d aramis -r cover -s open

The program will search for a device definition with name athos in the configuration file (see below), take the serial number of Ke-USB24R, search for the module among the listed ports (ttyACM* devices), and then use the device definition to set the named relay cover to the named state closed. It will then repeat the operation for a device named aramis, except that it will set its cover relay to the named state open.

Alternatively, you may just set up 1 device per Ke-USB24R module and use raw numbers like this:

$ ke24.py -d main_module -r 2 -s 0

Or if you have just one module and one device defined for it, you may even omit the -d option:

$ ke24.py -r 2 -s 0 -r 3 -s 1

Installation

Just put the program into your favourite path for the executables, for example, /usr/local/bin, and make it executable:

$ cp ke24.py /usr/local/bin
$ chmod 755 /user/local/bin/ke24.py

After that, create a configuration file from the ke23.conf template and put it into either /etc/ke24.conf or into ~/.config/ke24.conf. You may also use any other name, but then you'll need to specify it at each run, so that is not advised.

Optionally, you may configure udev to create special device node aliases for Ke-USB24R that will look like this:

/dev/ttyACM.Ke-USB24R.67LR-IT5B-94M7-PIZ6

where the last part is your module's serial number. In order to achieve that, create a udev rule file /etc/udev/rules.d/99-Ke-USB24R.rules with the following content:

SUBSYSTEM=="tty", ATTRS{product}=="Ke-USB24R", PROGRAM="/usr/local/bin/ke24 -I $tempnode", SYMLINK+="ttyACM.Ke-USB24R.%c"

Usage

Generally you use the program by running it like this:

$ ke24.py <options>

You may always check the help on the options by running:

$ ke24.py --help 

Options

-h | --help - Show help

-c | --config - Load configuration from the given file

-q | --quiet - Quiet operation, only the necessary output (like values of the requested relays and/or GPIO lines)

-d | --device - Operate on the given device. Can be omitted if there is only one device that matches the -r and/or -o options. Can be specified multiple times if you want further options to apply to a different device.

-r | --relay <name|index> - Operate on the given relay. Default operation is to get the state. See the config template for more info on names.

-o | --gpio <name|index> - Operate on the given GPIO line. Default operation is to read the value. See the config template for more info on names. Switches the given GPIO line into input mode.

-s | --set <name|value> - Set the state of the preceding device to the given value. See the config template for more info on named values.

-I | --identify - Read and print the serial number from the given port. Return 0 if there was a Ke-USB24R there, return 1 otherwise. Can be used with udev (see Installation above).

The -d, -r, -o, and -s options can be specified multiple times. Each -d option designates a new device to which all the subsequent -r and -o options will apply. Each -r or -o option defines a new operation to be performed in sequence. The -s option modifies the last specified operation. The devices are only specified by name, whereas relays and gpios may be specified either by name or by index. If you wish to specify the relays and/or gpios by name, you must define them in the configuration file. If you only want to use indices, you may skip configuring them.

For example, if you have just a single Ke-USB24R module in your system, then the following command will read the state of relays 1 and 3, switch GPIO line 18 into input mode and read it's value, then print all those data one per line without any extra decoration, like this:

$ ke24.py -q -r 1 -r 3 -o 18
1
0
1

If you want to read relay 2, set relay 3 to 1, then read relay 4, use this:

$ ke24.py -q -r 2 -r 3 -s 1 -r 4
0
1

the relay set operation doesn't produce any output in quiet mode.

If you have defined any names for your devices and control units (relays and gpios), then you may use them like this:

$ ke24.py -q -d Main -r Power -r Reset -d Watchdog -o "Kill switch"
1
0
1

Read the configuration template for more information on how to configure names for your devices and control units.

Configuration

Currently, the configuration can only be set via a yaml file.

Check [ke24.conf] for the configuration example. By default the program looks for a configuration file at the following locations:

  • /etc/config/ke24.conf
  • ~/.config/ke24.conf

You may specify an alternate configuratin file using the -c|--config <path> option.

There is an example ke24.conf file provided with detailed comments.