
Security News
NVD Concedes Inability to Keep Pace with Surging CVE Disclosures in 2025
Security experts warn that recent classification changes obscure the true scope of the NVD backlog as CVE volume hits all-time highs.
NOTE:
While the 2-CH and the 4-CH relay PCB seem to come without the 120-Ohms termination resistor, the 1-CH relay does have the resistor fitted, this is marked R14 on the 1-CH-PCB.
For multiple devices on the bus, this resistor must be removed.
NOTE:
The relay PCBs require an external, biased RS-485 termination:
The on-board bias network is not sufficient when the bus is properly terminated with 120-Ohms on each end
⚠️ WARNING:
Even though the 2-CH and the 4-CH module come with optocouplers fitted on the digital inputs, the clearance and creepage distances on the PCB are /not/ sufficient for basic or reinforced insulation of 115/230V mains voltage. Use an external optocoupler when connecting the inputs to mains voltage circuits!
1-CH Digital IN + Relay module (non-isolated input)
2-CH Digital IN + Relay module (input with low-voltage isolation)
4-CH Digital IN + Relay module (input with low-voltage isolation)
(untested) 8-CH Digital IN + Relay module
(no image)
PWM8A04 3-CH PWM OUT PCB
R4DIF08 8-CH Digital IN module
N4AIA04 4-CH 0..5V / 0..10V / 0..20mA analog input module
N4DAC02 2-CH 0..5V / 0..10V analog output module
# This requires Python >= 3.9
# and recent version of setuptools and pip
user@linux:~/mysrc$ python -m pip install --upgrade pip
# Install from local git sources:
user@linux:~/mysrc$ git clone https://github.com/ul-gh/cheap_modbus_rtu.git
user@linux:~/mysrc$ cd cheap_modbus_rtu
user@linux:~/mysrc$ pip install .
API Documentation (Github Link)
from cheap_modbus_rtu import R4DIF08
# Slave ID for these modules is pre-set to 1
input_module = R4DIF08(slave_id=1, serial_device_name="/dev/ttyUSB0")
inputs = input_module.get_inputs()
print(inputs)
import time
# Also works with the other multi-channel variants
from cheap_modbus_rtu import Relay2Ch
# Slave ID for these modules is pre-set to 255
modbus_relay = Relay2Ch(slave_id=255, serial_device_name="/dev/ttyUSB0")
while True:
modbus_relay.set_output(1, True)
time.sleep(0.5)
modbus_relay.set_output(1, False)
time.sleep(0.5)
from cheap_modbus_rtu import PWM8A04
# Slave ID for these PWM modules is pre-set to 1
pwm = PWM8A04(slave_id=1, serial_device_name="/dev/ttyUSB0")
pwm.set_output_frequency(1, 20000)
pwm.set_output_duty(1, 33)
while True:
input_1 = modbus_relay.get_input(1)
input_2 = modbus_relay.get_input(2)
modbus_relay.set_output(1, input_1)
modbus_relay.set_output(2, input_2)
print(f"\rInput 1: {input_1} Input 2: {input_2} ", end="")
time.sleep(0.1)
Input 1: False Input 2: False
This must only be done once, not at every device start, otherwise flash wear might be an issue. Once a different Slave ID is configured, invoke the constructor of this library with the new ID as an argument.
modbus_relay.get_broadcast_slave_id()
>>> 255
modbus_relay.set_slave_id(1)
modbus_relay.get_broadcast_slave_id()
>>> 1
Nice documentation of the Modbus-RTU protocol (English): https://ipc2u.com Modbus Protocol Description and Examples
(Same content in German) Beschreibung des Modbus-RTU Protokolls: https://ipc2u.de
FAQs
Lightweight control of cheap Modbus RTU components using Python
We found that cheap-modbus-rtu demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Security experts warn that recent classification changes obscure the true scope of the NVD backlog as CVE volume hits all-time highs.
Security Fundamentals
Attackers use obfuscation to hide malware in open source packages. Learn how to spot these techniques across npm, PyPI, Maven, and more.
Security News
Join Socket for exclusive networking events, rooftop gatherings, and one-on-one meetings during BSidesSF and RSA 2025 in San Francisco.