Python plugin: Modbus RTU / ASCII / TCP/IP Topic is solved

Python and python framework

Moderator: leecollings

dzaq
Posts: 1
Joined: Monday 30 October 2017 10:36
Target OS: Raspberry Pi / ODroid
Domoticz version:
Contact:

Re: [RELEASED] Python plugin: Modbus RTU / ASCII / TCP/IP

Post by dzaq »

Hi,
I have an issue with using modbus plugin. Right now I have PLC for controlling lights and heating. I would like to use Domoticz for visualisation.
I have found plugin for Modbus TCP. I tried to install like it is showed in manual, but there is an issue with (i thnink) python version.

2018-12-31 10:19:20.889 Error: (Modbus) failed to load 'plugin.py', Python Path used was '/home/jacek/domoticz/plugins/modbus-read/:/usr/lib/python36.zip:/usr/lib/python3.6:/usr/lib/python3.6:/usr/lib/python3.6/lib-dynload'.
2018-12-31 10:19:20.889 Error: (testowy) Module Import failed, exception: 'ModuleNotFoundError'
2018-12-31 10:19:20.889 Error: (testowy) Module Import failed: ' Name: pymodbus'
2018-12-31 10:19:20.889 Error: (testowy) Error Line details not available.

(Python 3.6.7, Ubuntu 18.04.1 server, Domoticz 4.9701)
raymonvdm
Posts: 5
Joined: Tuesday 29 March 2016 10:17
Target OS: Linux
Domoticz version:
Contact:

Re: [RELEASED] Python plugin: Modbus RTU / ASCII / TCP/IP

Post by raymonvdm »

I`m trying to setup the READ plugin to pull an output from a WAGO PLC. I still learning the basics of the PLC but i got a working Node-RED setup using this youtube video https://www.youtube.com/watch?v=fV78MQks6BI

But when i want to read the value using the plugin it is not working yet. I have 3 input cards four ports so it should be registere 0 - 15 if is stand correct. Seems to be verified by fiddling around with node-red.

But no go so far using READ plugin.

I`m recieving the following error

2019-01-05 01:26:01.380 (DI_01) Modbus error decoding or recieved no data (TCP/IP)!, check your settings!


Image

Code: Select all

Version: 4.10311
Build Hash: e588266e
Compile Date: 2019-01-01 16:54:11
dzVents Version: 2.4.9
Python Version: 3.6.7 (default, Oct 22 2018, 11:32:17) [GCC 8.2.0]
tomlb
Posts: 1
Joined: Tuesday 29 January 2019 13:52
Target OS: Raspberry Pi / ODroid
Domoticz version:
Contact:

Re: [RELEASED] Python plugin: Modbus RTU / ASCII / TCP/IP

Post by tomlb »

Hi!

Ive downloaded and install Modbus Plugin but I get error:
Error: PluginList: Parsing '/home/pi/domoticz/plugins/modbus-write/', 'Error document empty.' at line 0 column 0 in XML
does anybody know what is wrong?

domoticz Version: 4.9700
python Version: 3.5.3
eSbek
Posts: 20
Joined: Saturday 20 April 2019 14:03
Target OS: NAS (Synology & others)
Domoticz version:
Contact:

Re: [RELEASED] Python plugin: Modbus RTU / ASCII / TCP/IP

Post by eSbek »

I corrected a little the script for Modbus RTU TCP and Modbus TCP that was giving decoding errors, you can find test version here:

https://github.com/DomoticX/domoticz-modbus/issues/12
gogofram
Posts: 2
Joined: Monday 25 January 2016 10:53
Target OS: Raspberry Pi / ODroid
Domoticz version:
Contact:

Re: [RELEASED] Python plugin: Modbus RTU / ASCII / TCP/IP

Post by gogofram »

Has anybody got the PZEM-016 energy measure device working?
The PZEM-014/016 can measure Ac voltage V, current A, active power W, frequency Hz, power factor pf and used energy Wh. You can read all these values from the PZEM with the help of a Rs-485 Half duplex bus. The protocol they used is the well known modbus protocol.
I tried different settings but I cannot read any data, in the log no errors except check you settings.

I'm using the latest version 1.2 of the read plugin on a raspberry pi with latest stable Domoticz build

Here is a link to the manual http://kimgrity.com/ac-communication-mo ... OTsA6T-uUk

How can I activated more advanced logging, or try to see more debug information?
eSbek
Posts: 20
Joined: Saturday 20 April 2019 14:03
Target OS: NAS (Synology & others)
Domoticz version:
Contact:

Re: [RELEASED] Python plugin: Modbus RTU / ASCII / TCP/IP

Post by eSbek »

Try to verify if modbus on the device side is set correcty using PC (eg. Modbus Poll). Once you know it's ok then you can troubleshoot the python.
hanskie
Posts: 3
Joined: Friday 05 July 2019 13:26
Target OS: Linux
Domoticz version:
Contact:

Re: [RELEASED] Python plugin: Modbus RTU / ASCII / TCP/IP

Post by hanskie »

@Domoticx, or anyone else

could you help me to read my energy meter with RTU Modbus produced in Poland?

https://www.fif.com.pl/en/index.php?con ... hment=1334

How should i configure Modbus Plugin to read "Active energy" in kWh ? I have added Modbus read and write plugins.
Unfortunately, I do not have experience in this kind of communication and devices but I would like to be able to read the parameters of this power meter in my domoticz.
I would be very grateful for your help.
grasuoare
Posts: 5
Joined: Monday 15 July 2019 21:16
Target OS: Raspberry Pi / ODroid
Domoticz version:
Contact:

Re: [RELEASED] Python plugin: Modbus RTU / ASCII / TCP/IP

Post by grasuoare »

Hi,

Thank you for this plugin! It works like a charm. I have now 2 boards with relays with lights on.

My questions. It is possible to read the state of the relays from the board? The board is the exact model that you used. If yes could you please tell me the settings? I tried all :(
ahjwinth
Posts: 16
Joined: Saturday 30 March 2019 20:14
Target OS: Raspberry Pi / ODroid
Domoticz version: 4.9
Location: Beesd, The Netherlands
Contact:

Re: [RELEASED] Python plugin: Modbus RTU / ASCII / TCP/IP

Post by ahjwinth »

I could use some help. I have an Domoticz running on RPI3B without issues.
I have installed solar panels with an Solar edge inverter which I try to read data from using modbus TCP. I have tested the modbus read option using an simulator on the PC and I can read the requested addresses.

On domoticz installed the modbus option including the dependancies. I have configured the modbus read but whatever I do I get the same error message: "Can't convert 'int' object to str implicitly"

Can someone help me with what I'm doing wrong.

See below:

Code: Select all

2019-07-16 19:39:52.330 Status: (Solaredge) Stopped.
2019-07-16 19:39:56.887 (Solaredge) onStart called
2019-07-16 19:39:56.887 (Solaredge) Debug logging mask set to: NONE
2019-07-16 19:39:56.887 (Solaredge) Sensor Type: Custom
2019-07-16 19:39:56.888 (Solaredge) Modbus RTU/ASCII/TCP - Universal READ loaded.
2019-07-16 19:39:56.525 Status: (Solaredge) Started.
2019-07-16 19:39:56.883 Status: (Solaredge) Entering work loop.
2019-07-16 19:39:56.885 Status: (Solaredge) Initialized version 1.2.0, author 'S. Ebeltjes / domoticx.nl'

2019-07-16 19:40:06.906 Error: (Solaredge) 'onHeartbeat' failed 'TypeError':'Can't convert 'int' object to str implicitly'.
2019-07-16 19:40:06.906 Error: (Solaredge) ----> Line 489 in '/home/pi/domoticz/plugins/modbus-read/plugin.py', function onHeartbeat
2019-07-16 19:40:06.906 Error: (Solaredge) ----> Line 297 in '/home/pi/domoticz/plugins/modbus-read/plugin.py', function onHeartbeat
Configuration:
Image
grasuoare
Posts: 5
Joined: Monday 15 July 2019 21:16
Target OS: Raspberry Pi / ODroid
Domoticz version:
Contact:

Re: [RELEASED] Python plugin: Modbus RTU / ASCII / TCP/IP

Post by grasuoare »

grasuoare wrote: Monday 15 July 2019 22:30 Hi,

Thank you for this plugin! It works like a charm. I have now 2 boards with relays with lights on.

My questions. It is possible to read the state of the relays from the board? The board is the exact model that you used. If yes could you please tell me the settings? I tried all :(
Anyone? :)
michaelz
Posts: 3
Joined: Tuesday 23 July 2019 0:04
Target OS: Raspberry Pi / ODroid
Domoticz version:
Contact:

Re: [RELEASED] Python plugin: Modbus RTU / ASCII / TCP/IP

Post by michaelz »

hi guys,

i have excactly the same problem :
2019-07-23 00:08:57.565 Error: (lecture modbus) 'onHeartbeat' failed 'TypeError':'Can't convert 'int' object to str implicitly'.
2019-07-23 00:08:57.565 Error: (lecture modbus) ----> Line 489 in /home/pi/domoticz/plugins/modbus-read/plugin.py, function onHeartbeat

i have raspberry pi3b+
installed dependencies
i have tested it with modbus simulator and always the same message :-(

domoticz v4.97000
modbus read v1.2
i use modbus tcp-ip

i have made a lot of test and nothing is working is the v1.2 has a bug ? is the version 4.97 is not working fine?

thank you so mush for your helping

michael
michaelz
Posts: 3
Joined: Tuesday 23 July 2019 0:04
Target OS: Raspberry Pi / ODroid
Domoticz version:
Contact:

Re: [RELEASED] Python plugin: Modbus RTU / ASCII / TCP/IP

Post by michaelz »

ahjwinth wrote: Tuesday 16 July 2019 19:45 hi same problem is that working when you use modbus slave simulator instead of your solar system ? it is not clear for me?
I could use some help. I have an Domoticz running on RPI3B without issues.
I have installed solar panels with an Solar edge inverter which I try to read data from using modbus TCP. I have tested the modbus read option using an simulator on the PC and I can read the requested addresses.

On domoticz installed the modbus option including the dependancies. I have configured the modbus read but whatever I do I get the same error message: "Can't convert 'int' object to str implicitly"

Can someone help me with what I'm doing wrong.

See below:

Code: Select all

2019-07-16 19:39:52.330 Status: (Solaredge) Stopped.
2019-07-16 19:39:56.887 (Solaredge) onStart called
2019-07-16 19:39:56.887 (Solaredge) Debug logging mask set to: NONE
2019-07-16 19:39:56.887 (Solaredge) Sensor Type: Custom
2019-07-16 19:39:56.888 (Solaredge) Modbus RTU/ASCII/TCP - Universal READ loaded.
2019-07-16 19:39:56.525 Status: (Solaredge) Started.
2019-07-16 19:39:56.883 Status: (Solaredge) Entering work loop.
2019-07-16 19:39:56.885 Status: (Solaredge) Initialized version 1.2.0, author 'S. Ebeltjes / domoticx.nl'

2019-07-16 19:40:06.906 Error: (Solaredge) 'onHeartbeat' failed 'TypeError':'Can't convert 'int' object to str implicitly'.
2019-07-16 19:40:06.906 Error: (Solaredge) ----> Line 489 in '/home/pi/domoticz/plugins/modbus-read/plugin.py', function onHeartbeat
2019-07-16 19:40:06.906 Error: (Solaredge) ----> Line 297 in '/home/pi/domoticz/plugins/modbus-read/plugin.py', function onHeartbeat
Configuration:
Image
ahjwinth
Posts: 16
Joined: Saturday 30 March 2019 20:14
Target OS: Raspberry Pi / ODroid
Domoticz version: 4.9
Location: Beesd, The Netherlands
Contact:

Re: [RELEASED] Python plugin: Modbus RTU / ASCII / TCP/IP

Post by ahjwinth »

Hi Michael,

Good to hear I’m not the only one. I still have not found the answer to the issue and trying different things without results. For my work I often deal with modbus in industrial control systems. But I don’t have knowledge about python code to troubleshoot the script.
Regards, Alex
michaelz wrote: Tuesday 23 July 2019 0:14 hi guys,

i have excactly the same problem :
2019-07-23 00:08:57.565 Error: (lecture modbus) 'onHeartbeat' failed 'TypeError':'Can't convert 'int' object to str implicitly'.
2019-07-23 00:08:57.565 Error: (lecture modbus) ----> Line 489 in /home/pi/domoticz/plugins/modbus-read/plugin.py, function onHeartbeat

i have raspberry pi3b+
installed dependencies
i have tested it with modbus simulator and always the same message :-(

domoticz v4.97000
modbus read v1.2
i use modbus tcp-ip

i have made a lot of test and nothing is working is the v1.2 has a bug ? is the version 4.97 is not working fine?

thank you so mush for your helping

michael
michaelz
Posts: 3
Joined: Tuesday 23 July 2019 0:04
Target OS: Raspberry Pi / ODroid
Domoticz version:
Contact:

Re: [RELEASED] Python plugin: Modbus RTU / ASCII / TCP/IP

Post by michaelz »

hi,

ok i have find the problem :-)
on tcp-ip you need to put the ID
example : 192.168.3.10/1

i can read value in a schneider m241 data settings int16 is working fine
next step writing value

thanks a lot to the author of this plugin

good day

michael z
ahjwinth
Posts: 16
Joined: Saturday 30 March 2019 20:14
Target OS: Raspberry Pi / ODroid
Domoticz version: 4.9
Location: Beesd, The Netherlands
Contact:

Re: [RELEASED] Python plugin: Modbus RTU / ASCII / TCP/IP

Post by ahjwinth »

Thanks Michael,
I also now got the modbus connection working. The trick with the ID did it.
I didn't notice this since in the example screenshot on Github this was not implemented yet.
Thanks for your tip and many thanks for the developer putting all the efforts in to make the program.
michaelz wrote: Tuesday 23 July 2019 16:40 hi,

ok i have find the problem :-)
on tcp-ip you need to put the ID
example : 192.168.3.10/1

i can read value in a schneider m241 data settings int16 is working fine
next step writing value

thanks a lot to the author of this plugin

good day

michael z
Antikillerbm
Posts: 8
Joined: Sunday 01 April 2018 17:30
Target OS: Linux
Domoticz version:
Contact:

Re: [RELEASED] Python plugin: Modbus RTU / ASCII / TCP/IP

Post by Antikillerbm »

Hi
Im trying modbus first time. I use domoticz v4.11024@Python 3.5.3
I just upload an example to my arduino and try to read something trough modbus RTU

Code: Select all

#include <ModbusRtu.h>

// assign the Arduino pin that must be connected to RE-DE RS485 transceiver
#define TXEN	2 

// data array for modbus network sharing
uint16_t au16data[16] = {
  3, 1415, 9265, 4, 2, 7182, 28182, 8, 0, 0, 0, 0, 0, 0, 1, -1 };

/**
 *  Modbus object declaration
 *  u8id : node id = 0 for master, = 1..247 for slave
 *  u8serno : serial port (use 0 for Serial)
 *  u8txenpin : 0 for RS-232 and USB-FTDI 
 *               or any pin number > 1 for RS-485
 */
Modbus slave(1,0,TXEN); // this is slave @1 and RS-485

void setup() {
  slave.begin( 9600 ); 
}

void loop() {
  slave.poll( au16data, 16 );
}
Unfortunately I always get the error that ot depend of payload or register number.

Code: Select all

2019-07-24 19:53:25.632 (test_device) Modbus error decoding or received no data (RTU/ASCII/RTU over TCP)!, check your settings!
On the other side I can read data with modbus poll simulator

What am I doing wrong? Thx.

PS there is no any information what should be a payload for common purpose in domoticz (sensors, buttons etc).
Attachments
3.JPG
3.JPG (29.92 KiB) Viewed 4533 times
2.JPG
2.JPG (34.46 KiB) Viewed 4533 times
1.JPG
1.JPG (60.54 KiB) Viewed 4533 times
ahjwinth
Posts: 16
Joined: Saturday 30 March 2019 20:14
Target OS: Raspberry Pi / ODroid
Domoticz version: 4.9
Location: Beesd, The Netherlands
Contact:

Re: [RELEASED] Python plugin: Modbus RTU / ASCII / TCP/IP

Post by ahjwinth »

Try to use function 3, read holding register in combination with data type int16
Antikillerbm wrote: Wednesday 24 July 2019 19:04 Hi
Im trying modbus first time. I use domoticz v4.11024@Python 3.5.3
I just upload an example to my arduino and try to read something trough modbus RTU

Code: Select all

#include <ModbusRtu.h>

// assign the Arduino pin that must be connected to RE-DE RS485 transceiver
#define TXEN	2 

// data array for modbus network sharing
uint16_t au16data[16] = {
  3, 1415, 9265, 4, 2, 7182, 28182, 8, 0, 0, 0, 0, 0, 0, 1, -1 };

/**
 *  Modbus object declaration
 *  u8id : node id = 0 for master, = 1..247 for slave
 *  u8serno : serial port (use 0 for Serial)
 *  u8txenpin : 0 for RS-232 and USB-FTDI 
 *               or any pin number > 1 for RS-485
 */
Modbus slave(1,0,TXEN); // this is slave @1 and RS-485

void setup() {
  slave.begin( 9600 ); 
}

void loop() {
  slave.poll( au16data, 16 );
}
Unfortunately I always get the error that ot depend of payload or register number.

Code: Select all

2019-07-24 19:53:25.632 (test_device) Modbus error decoding or received no data (RTU/ASCII/RTU over TCP)!, check your settings!
On the other side I can read data with modbus poll simulator

What am I doing wrong? Thx.

PS there is no any information what should be a payload for common purpose in domoticz (sensors, buttons etc).
Antikillerbm
Posts: 8
Joined: Sunday 01 April 2018 17:30
Target OS: Linux
Domoticz version:
Contact:

Re: [RELEASED] Python plugin: Modbus RTU / ASCII / TCP/IP

Post by Antikillerbm »

Every functions gives same error
I even tried to use discrete output slave, but error still the same

Have nothing here
Attachments
Снимок.PNG
Снимок.PNG (32.96 KiB) Viewed 4512 times
Antikillerbm
Posts: 8
Joined: Sunday 01 April 2018 17:30
Target OS: Linux
Domoticz version:
Contact:

Re: [RELEASED] Python plugin: Modbus RTU / ASCII / TCP/IP

Post by Antikillerbm »

I tried example script as well

Code: Select all

#!/usr/bin/env python
 from pymodbus.client.sync import ModbusSerialClient
 client = ModbusSerialClient(method="rtu", port="/dev/ttyUSB0", stopbits=1, bytesize=8, parity="N", baudrate=9600, timeout=1, retries=2)
data = client.read_input_registers(0, 4, unit=12) # FUNCTIE 04 - Lees register (start=0, lengte=4, unitid=12)
client.close()
 print data
print "waarde_0:", data.registers[0]
print "waarde_1:", data.registers[1]
print "waarde_2:", data.registers[2]
print "waarde_3:", data.registers[3]
But the error looks like same with domoticz plugin

Code: Select all

root@orangepipcplus:/home/anti# python3 mbtest.py
Modbus Error: [Input/Output] Modbus Error: [Invalid Message] Incomplete message received, expected at least 2 bytes (0 received)
Traceback (most recent call last):
  File "mbtest.py", line 8, in <module>
    print("waarde_0:", data.registers[0])
AttributeError: 'ModbusIOException' object has no attribute 'registers'

Slave device answering nothing to any read requests
ahjwinth
Posts: 16
Joined: Saturday 30 March 2019 20:14
Target OS: Raspberry Pi / ODroid
Domoticz version: 4.9
Location: Beesd, The Netherlands
Contact:

Re: [RELEASED] Python plugin: Modbus RTU / ASCII / TCP/IP

Post by ahjwinth »

Hi I see in the below script you use unit ID 12. Were in the previous screenshots from the windows tool you use function 3 and unit ID 1.

Antikillerbm wrote: Thursday 25 July 2019 22:40 I tried example script as well

Code: Select all

#!/usr/bin/env python
 from pymodbus.client.sync import ModbusSerialClient
 client = ModbusSerialClient(method="rtu", port="/dev/ttyUSB0", stopbits=1, bytesize=8, parity="N", baudrate=9600, timeout=1, retries=2)
data = client.read_input_registers(0, 4, unit=12) #[b] FUNCTIE 04[/b] - Lees register (start=0, lengte=4,[b] unitid=12)[/b]
client.close()
 print data
print "waarde_0:", data.registers[0]
print "waarde_1:", data.registers[1]
print "waarde_2:", data.registers[2]
print "waarde_3:", data.registers[3]
But the error looks like same with domoticz plugin

Code: Select all

root@orangepipcplus:/home/anti# python3 mbtest.py
Modbus Error: [Input/Output] Modbus Error: [Invalid Message] Incomplete message received, expected at least 2 bytes (0 received)
Traceback (most recent call last):
  File "mbtest.py", line 8, in <module>
    print("waarde_0:", data.registers[0])
AttributeError: 'ModbusIOException' object has no attribute 'registers'

Slave device answering nothing to any read requests
Post Reply

Who is online

Users browsing this forum: No registered users and 1 guest