
Research
/Security News
Critical Vulnerability in NestJS Devtools: Localhost RCE via Sandbox Escape
A flawed sandbox in @nestjs/devtools-integration lets attackers run code on your machine via CSRF, leading to full Remote Code Execution (RCE).
The pyhoff package allows easy accessing of Beckhoff and Wago terminals with python over ModBus TCP
The pyhoff package allows you to read and write the most common Beckhoff and WAGO bus terminals ("Busklemmen") using the Ethernet bus coupler ("Busskoppler") BK9000, BK9050, BK9100, or WAGO 750_352 over Ethernet TCP/IP based on ModBus TCP.
The package has no additional decencies. It can be installed with pip:
pip install pyhoff
It is easy to use as the following example code shows:
from pyhoff.devices import *
# connect to the BK9050 by tcp/ip on default port 502
bk = BK9050("172.16.17.1")
# add all bus terminals connected to the bus coupler
# in the order of the physical arrangement
bk.add_bus_terminals(KL2404, KL2424, KL9100, KL1104, KL3202,
KL3202, KL4002, KL9188, KL3054, KL3214,
KL4004, KL9010)
# Set 1. output of the first KL2404-type bus terminal to hi
bk.select(KL2404, 0).write_coil(1, True)
# read temperature from the 2. channel of the 2. KL3202-type
# bus terminal
t = bk.select(KL3202, 1).read_temperature(2)
print(f"t = {t:.1f} °C")
# Set 1. output of the 1. KL4002-type bus terminal to 4.2 V
bk.select(KL4002, 0).set_voltage(1, 4.2)
The package comes with automatic generated code stubs for nearly all terminals. These stubs are not tested with hardware but for most digital IO terminals the code should be fully functional. Such a stub looks like this:
# From ./src/pyhoff/devices.py:
class KL2442(DigitalOutputTerminal):
"""
KL2442: 2-channel digital output, 24 V DC, 2 x 4 A/1 x 8 A
(Automatic generated stub)
"""
parameters = {'output_bit_width': 2, 'input_bit_width': 0}
For analog IO terminals the stubs are functional as well,
but they provide only a generic read_channel_word
and
read_normalized
function (for inputs) without scaling the
values to voltages, currents or temperatures. For better usability
they might be extended with functions. Based on the stub the
extension could look like this:
from pyhoff.devices import KL3054 as KL3054_stub
class KL3054(KL3054_stub):
def read_current(self, channel: int) -> float:
return self.read_normalized(channel) * 16.0 + 4.0
Or for contributing to the pyhoff package, the existing stub code can be updated like this:
# From ./src/pyhoff/devices.py:
class KL3054(AnalogInputTerminal):
"""
KL3054: 4x analog input 4...20 mA 12 Bit single-ended
"""
# Input: 4 x 16 Bit Daten (optional 4x 8 Bit Control/Status)
parameters = {'input_word_width': 4}
def read_current(self, channel: int) -> float:
"""
Read the current value from a specific channel.
Args:
channel: The channel number to read from.
Returns:
The current value in mA.
"""
return self.read_normalized(channel) * 16.0 + 4.0
Other analog and digital IO terminals are easy to complement. Contributions are welcome! Please open an issue or submit a pull request on GitHub.
To get started with developing the pyhoff
package, follow these steps:
First, clone the repository to your local machine using Git:
git clone https://github.com/Nonannet/pyhoff.git
cd pyhoff
It is recommended to use a virtual environment:
python -m venv .venv
source .venv/bin/activate # On Windows/Powershell use `.\venv\Scripts\Activate.ps1`
Install pyhoff from source plus the development dependencies:
pip install -e .[dev]
Ensure that everything is set up correctly by running the tests:
pytest
This project is licensed under the MIT License - see the LICENSE file for details.
FAQs
The pyhoff package allows easy accessing of Beckhoff and Wago terminals with python over ModBus TCP
We found that pyhoff 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.
Research
/Security News
A flawed sandbox in @nestjs/devtools-integration lets attackers run code on your machine via CSRF, leading to full Remote Code Execution (RCE).
Product
Customize license detection with Socket’s new license overlays: gain control, reduce noise, and handle edge cases with precision.
Product
Socket now supports Rust and Cargo, offering package search for all users and experimental SBOM generation for enterprise projects.