pwitab / iec62056-21

A Python library for IEC62056-21, Local Data Readout of Energy Meters. Former IEC1107
BSD 3-Clause "New" or "Revised" License
65 stars 18 forks source link

Socket Timeout #27

Open gucluceyhan opened 2 years ago

gucluceyhan commented 2 years ago

Hello,

I am trying to implement this code but every time I try I am having 'Socket Timeout' warning.

The meter is Kohler AEL.TF.19 which is using IEC62056-21 protocol to communicate. I am sure that the both the meter and the modem are running perfectly since when I tried it with HW-Group's Hercules Software it connects and gets the data.

If you can help me about the process I'll be glad.

from iec62056_21.client import Iec6205621Client client = Iec6205621Client.with_tcp_transport(address=('5.26.220.136', 502), dev$ password_challange = client.access_programming_mode() client.send_password('00000000') # Common standard password data_answer = client.read_value('1.8.0')

Krolken commented 2 years ago

OK. What happens when you just try to do a standard readout:

from iec62056_21.client import Iec6205621Client

client = Iec6205621Client.with_tcp_transport(address=('192.168.0.1', 8000), device_address='12345678', password='00000000')
client.connect()
print(client.standard_readout())

Also if you have some debug output that would be good.

gucluceyhan commented 2 years ago

14:53:54,32 DEBUG: Connecting to ('5.26.220.136', 502) 14:53:54,870 INFO: Staring init sequence 14:53:54,870 INFO: Sending request message: RequestMessage(device_address='51024441') 14:53:54,870 DEBUG: Sent b'/?510244418!\r\n' over transport: TcpTransport 14:53:54,870 DEBUG: Resting for 0.25 seconds Traceback (most recent call last): File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/iec62056_21/transports.py", line 339, in _recv b = self.socket.recv(chars) TimeoutError: timed out

The above exception was the direct cause of the following exception:

Traceback (most recent call last): File "/Users/gucluceyhan/test_sayac.py", line 13, in print(client.standard_readout()) File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/iec62056_21/client.py", line 179, in standard_readout self.startup() File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/iec62056_21/client.py", line 145, in startup ident_msg = self.read_identification() File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/iec62056_21/client.py", line 247, in read_identification data = self.transport.simple_read(start_char="/", end_char="\x0a") File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/iec62056_21/transports.py", line 144, in simple_read b = self.recv(1) File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/iec62056_21/transports.py", line 191, in recv return self._recv(chars) File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/iec62056_21/transports.py", line 341, in _recv raise TransportError from e iec62056_21.transports.TransportError

Krolken commented 2 years ago

OK. So the device wont even reply.

First thing is to omitt the address. Just set it to "". This usually works for point-to-point interfaces.

It could also be that the modem does not do a conversion to 7E1 and you need to so that client side. See my answer here for more info: https://github.com/pwitab/iec62056-21/issues/16#issuecomment-754783281

If your Hercules program have a communication log it would be good if you could add it to the issue to see if they are doing stuff in a weird way.