Closed bartandeweg closed 5 years ago
Thanks for the report. I haven't seen this behavior myself, so I'd like to get some more info.
The usual reason for this error message is that a malformed command reached the gateway. Normal behavior in such case is to log an error and ignore the command that was given. The platform should continue to behave normally after such an event (except that the issued command has no effect). I am planning to implement retry functionality for failed commands and reconnect for lost connections, but haven't had a lot of time for it recently.
Hi there,
Did check the logs. But no message comes up while loosing its connection.
There have been more reports of lost/bad connectivity when using this platform over a network connection, mostly related to esp8266 devices. I took some time to implement command retry and inactivity reconnect logic in the library that is being used. I have tested it for functionality with syntax errors and lost connections and I have been test driving it in my home setup for more than a day now (without any retries/reconnects) so it should be usable. I would like to test it some more before pushing any updates, but if you want you can try out the new code at mvn23/pyotgw:retry_reconnect.
Where should i put the new code?
Just overwrite the existing .py files. I'm not sure where they are placed on Hassio, but in my virtualenv install on debian it's under <venv>/lib/python3.5/site-packages/pyotgw/
.
To revert to the distributed version, just remove that pyotgw
folder and the pyotgw-0.3b1.dist-info
folder next to it and restart Home Assistant.
Will wait until it is embedded in an update. Cant find the files directly in Hassio.
There have been more reports of lost/bad connectivity when using this platform over a network connection, mostly related to esp8266 devices. I took some time to implement command retry and inactivity reconnect logic in the library that is being used. I have tested it for functionality with syntax errors and lost connections and I have been test driving it in my home setup for more than a day now (without any retries/reconnects) so it should be usable. I would like to test it some more before pushing any updates, but if you want you can try out the new code at mvn23/pyotgw:retry_reconnect.
Hi mvn23, I had the exact same error bartandeweg subscribe, trying your 'retry_reconnect' branch solved the problem for me!
I have the same issue. I have the OTGW connected with a NodeMCU and hooked up with HASSIO using otmonitor. otmonitor is working fine and I receive the information through my MQTT broker (events/central_heating/otmonitor/#). Although I am not able to change the setpoint temperature using MQTT (actions/central_heating/otmonitor/setpoint, but may be this is the wrong action command?)
Now I'm trying to use the opentherm_gw, but without success. The logging shows the following warnings/error:
2018-12-28 17:59:45 ERROR (MainThread) [pyotgw.pyotgw] Command PR with value A raised exception: Syntax Error: The command contained an unexpected character or was incomplete.
2018-12-28 17:59:46 ERROR (MainThread) [pyotgw.pyotgw] Command PR with value B raised exception: Syntax Error: The command contained an unexpected character or was incomplete.
2018-12-28 17:59:56 ERROR (MainThread) [pyotgw.pyotgw] Timed out waiting for command: PR, value: C. Are you connecting to the OpenTherm Gateway?
2018-12-28 18:00:06 ERROR (MainThread) [pyotgw.pyotgw] Timed out waiting for command: PR, value: G. Are you connecting to the OpenTherm Gateway?
2018-12-28 18:00:16 ERROR (MainThread) [pyotgw.pyotgw] Timed out waiting for command: PR, value: I. Are you connecting to the OpenTherm Gateway?
2018-12-28 18:00:26 ERROR (MainThread) [pyotgw.pyotgw] Timed out waiting for command: PR, value: L. Are you connecting to the OpenTherm Gateway?
2018-12-28 18:00:36 ERROR (MainThread) [pyotgw.pyotgw] Timed out waiting for command: PR, value: M. Are you connecting to the OpenTherm Gateway?
2018-12-28 18:00:46 ERROR (MainThread) [pyotgw.pyotgw] Timed out waiting for command: PR, value: O. Are you connecting to the OpenTherm Gateway?
2018-12-28 18:00:56 ERROR (MainThread) [pyotgw.pyotgw] Timed out waiting for command: PR, value: P. Are you connecting to the OpenTherm Gateway?
2018-12-28 18:01:06 ERROR (MainThread) [pyotgw.pyotgw] Timed out waiting for command: PR, value: R. Are you connecting to the OpenTherm Gateway?
2018-12-28 18:01:16 ERROR (MainThread) [pyotgw.pyotgw] Timed out waiting for command: PR, value: S. Are you connecting to the OpenTherm Gateway?
2018-12-28 18:01:26 ERROR (MainThread) [pyotgw.pyotgw] Timed out waiting for command: PR, value: T. Are you connecting to the OpenTherm Gateway?
2018-12-28 18:01:36 ERROR (MainThread) [pyotgw.pyotgw] Timed out waiting for command: PR, value: V. Are you connecting to the OpenTherm Gateway?
2018-12-28 18:01:46 ERROR (MainThread) [pyotgw.pyotgw] Timed out waiting for command: PR, value: W. Are you connecting to the OpenTherm Gateway?
2018-12-28 18:01:46 ERROR (MainThread) [homeassistant.core] Error doing job: Task exception was never retrieved
Traceback (most recent call last):
File "/usr/local/lib/python3.6/site-packages/homeassistant/components/opentherm_gw/__init__.py", line 136, in connect_and_subscribe
await gateway.connect(hass.loop, device_path)
File "/usr/local/lib/python3.6/site-packages/pyotgw/pyotgw.py", line 60, in connect
await self.get_reports()
File "/usr/local/lib/python3.6/site-packages/pyotgw/pyotgw.py", line 196, in get_reports
ovrd_mode = str.upper(reports[OTGW_REPORT_SETPOINT_OVRD][0])
TypeError: 'NoneType' object is not subscriptable
This is my configuration part:
opentherm_gw:
device: socket://192.168.130.50:6638
climate:
name: Thermostat2
precision: 0.5
floor_temperature: true
monitored_variables:
- ch_water_temp
- control_setpoint
- dhw_setpoint
- otgw_about
- otgw_mode
- otgw_setback_temp
- otgw_setpoint_ovrd_mode
- room_setpoint
- room_setpoint_ovrd
- room_temp
This is otmonitor.conf which seems to work fine using the same NodeMCU address/port:
web {
enable true
port 84
nopass true
sslport 0
graphlegend false
theme default
sslprotocols tls1,tls1.1,tls1.2
certonly false
}
connection {
type tcp
enable true
port 6638
host 192.168.130.50
device {}
}
server {
enable false
port 7686
relay true
}
mqtt {
enable true
broker 192.168.130.40
port 1883
devicetype central_heating
deviceid otmonitor
format raw
retransmit 10
qos 1
keepalive 120
messages true
client otgw
username {}
password {}
}
Any clue what I am doing wrong or should change? I am using HASSIO version 0.84.6
2018-12-28 17:59:45 ERROR (MainThread) [pyotgw.pyotgw] Command PR with value A raised exception: Syntax Error: The command contained an unexpected character or was incomplete. 2018-12-28 17:59:46 ERROR (MainThread) [pyotgw.pyotgw] Command PR with value B raised exception: Syntax Error: The command contained an unexpected character or was incomplete.
These lines indicate that there is an issue where the commands are getting mangled before they reach the gateway. This could indicate a more serious (possibly hardware) issue and could also be the reason why mqtt commands don't work. Please verify that the gateway is behaving as expected when accessing the NodeMCU via telnet and/or follow the troubleshooting from the OpenTherm Gateway website
Apart from that, I assume you completely stopped all other processes that are accessing the NodeMCU before starting Home Assistant with opentherm_gw enabled. If not, please make sure opentherm_gw has the connection all to itself.
The firmware on the NodeMCU may also be causing issues. Unfortunately you did not provide a firmware and version in your post, but ESPEasy claims support from R124 onwards.
After doing the above, the component should initialize without any problems.
Thanks for taking the time to answer my comment.
I'm pretty sure my NodeMCU / OTGW combo works fine: using otmonitor it works fine, including changing the setpoint using the web interface. I was only not able to change the setpoint using MQTT, more because I think I was probably using the wrong MQTT topic. On the NodeMCU the latest ESP Easy Mega is loaded: mega-20181220
Telnetting to the NodeMCU gives the following output, which looks fine to me:
telnet 192.168.130.50 6638
Trying 192.168.130.50...
Connected to 192.168.130.50.
Escape character is '^]'.
SE
T90011780
B50011780
T00110000
BC0110000
T80190000
B40193CD7
T00050000
BC00500FF
T80000200
BC0000240
T90011780
B50011780
T00110000
BC0110000
T80190000
B40193CCC
...
This looks similar to the 'messages' output of otmonitor.
I have rebooted all machines including the NodeMCU, made sure no other process is accessing the NodeMCU and restarted HASSIO. The timeout errors have disappeared, but still get the following (slightly different) errors:
2018-12-28 21:26:24 ERROR (MainThread) [pyotgw.pyotgw] Command PR with value A raised exception: Syntax Error: The command contained an unexpected character or was incomplete.
2018-12-28 21:26:24 ERROR (MainThread) [pyotgw.pyotgw] Command PR with value B raised exception: Syntax Error: The command contained an unexpected character or was incomplete.
2018-12-28 21:26:28 ERROR (MainThread) [homeassistant.core] Error doing job: Task exception was never retrieved
Traceback (most recent call last):
File "/usr/local/lib/python3.6/site-packages/homeassistant/components/opentherm_gw/__init__.py", line 136, in connect_and_subscribe
await gateway.connect(hass.loop, device_path)
File "/config/deps/lib/python3.6/site-packages/pyotgw/pyotgw.py", line 60, in connect
await self.get_reports()
File "/config/deps/lib/python3.6/site-packages/pyotgw/pyotgw.py", line 202, in get_reports
OTGW_GPIO_B: int(reports[OTGW_REPORT_GPIO_FUNCS][1]),
ValueError: invalid literal for int() with base 10: ' '
Have you disabled serial logging in ESPEasy?
By default logging is disabled in de ESPEasy Mega firmware. Enabling the logging made the NodeMCU unresponsive. I decided to downgrade the firmware to R147. I still get the same errors in the home-assistant.log.
The ESPEasy logging shows a serial buffer full
error:
1025740 : Ser2N: serial buffer full!
1025886 : Ser2N: S>: SE SE SE SE SE SE SE SE SE SE SE SE SE SE SE SE SE SE SE SE SE SE SE SE SE SE SE SE SE SE SE SE
1025915 : Ser2N: serial buffer full!
1026061 : Ser2N: S>: E SE SE SE SE SE SE SE SE SE SE SE SE SE SE SE SE SE SE SE SE SE SE SE SE SE SE SE SE SE SE SE
1026090 : Ser2N: serial buffer full!
1026236 : Ser2N: S>: E SE SE SE SE SE SE SE SE T90011C99 SE SE SE SE SE SE SE SE SE SE SE SE SE SE SE SE SE SE SE SE S
1026288 : WD : Uptime 17 ConnectFailures 0 FreeMem 25576
1026317 : Ser2N: serial buffer full!
1026463 : Ser2N: S>: E SE SE SE SE SE SE SE SE SE SE SE SE SE SE SE SE SE SE SE SE SE SE SE SE SE SE SE SE SE SE SE
1026570 : Ser2N: S>: SE SE SE SE SE SE SE SE SE SE SE SE SE SE SE SE SE SE SE SE SE SE S
All these SE
s means the gateway is receiving garbage on its serial connection.
I have tried to reproduce the issue with a NodeMCU running ESPEasy mega-20181220 and while I was initially having some issues getting it to work (no data being transferred at all between serial and network, only being able to receive data but unable to send commands), it has now been running stable for the last 2 days. Unfortunately I don't know what exactly caused it to work after the initial issues.
For now I went back to my original otmonitor/MQTT setup, which does communicate fine with the NodeMCU serial interface, although I still see some serial buffer full!
errors in the logging.
I will give it another try next week. Anyway, thank you for your work and help!
There have been more reports of lost/bad connectivity when using this platform over a network connection, mostly related to esp8266 devices. I took some time to implement command retry and inactivity reconnect logic in the library that is being used. I have tested it for functionality with syntax errors and lost connections and I have been test driving it in my home setup for more than a day now (without any retries/reconnects) so it should be usable. I would like to test it some more before pushing any updates, but if you want you can try out the new code at mvn23/pyotgw:retry_reconnect.
Do you still have this release? same issue here, but i see HA 0.85 will release pyotgw 0.4b0 and not 0.4b1? is this correct?
From the 0.85 rc branch: https://github.com/home-assistant/home-assistant/blob/6fb8378b459b6e7cb25395440795870f62c1b9fe/homeassistant/components/opentherm_gw/__init__.py#L107 0.4b1 includes the retry_reconnect improvements.
Home Assistant release with the issue:
0.83.2
Last working Home Assistant release (if known): 0.81.0
Operating environment (Hass.io/Docker/Windows/etc.): Hassio
Component/platform: Opentherm Gateway @mvn23
Description of problem: The openthermGateway is connecting as it supposed to but after a while (sometimes just 1 minute, sometimes over a few hours the connection is lost.
Getting this error in the log:
2018-12-03 08:49:26 ERROR (MainThread) [pyotgw.pyotgw] Command PR with value A raised exception: Syntax Error: The command contained an unexpected character or was incomplete.
Problem-relevant
configuration.yaml
entries and (fill out even if it seems unimportant):Traceback (if applicable):
Additional information: