Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

API JSON change? #29

Closed
Tinus016 opened this issue Nov 19, 2022 · 19 comments
Closed

API JSON change? #29

Tinus016 opened this issue Nov 19, 2022 · 19 comments

Comments

@Tinus016
Copy link

After a few years of working perfectly, today i received the following error message. My experience with python is too low to understand what is failing now. The error message came after a few 403 messages.

2022-11-19 11:40:51.259 Error: Growatt: Call to function 'onMessage' failed, exception details:
2022-11-19 11:40:51.260 Error: Growatt: Traceback (most recent call last):
2022-11-19 11:40:51.260 Error: Growatt: File "/home/pi/domoticz/plugins/Domoticz-Growatt-Webserver-Plugin/plugin.py", line 285, in onMessage
2022-11-19 11:40:51.260 Error: Growatt: _plugin.onMessage(Connection, Data)
2022-11-19 11:40:51.260 Error: Growatt: File "/home/pi/domoticz/plugins/Domoticz-Growatt-Webserver-Plugin/plugin.py", line 171, in onMessage
2022-11-19 11:40:51.260 Error: Growatt: apiResponse = json.loads(strData)
2022-11-19 11:40:51.260 Error: Growatt: File "/usr/lib/python3.7/json/__init__.py", line 348, in loads
2022-11-19 11:40:51.260 Error: Growatt: return _default_decoder.decode(s)
2022-11-19 11:40:51.260 Error: Growatt: File "/usr/lib/python3.7/json/decoder.py", line 337, in decode
2022-11-19 11:40:51.260 Error: Growatt: obj, end = self.raw_decode(s, idx=_w(s, 0).end())
2022-11-19 11:40:51.260 Error: Growatt: File "/usr/lib/python3.7/json/decoder.py", line 355, in raw_decode
2022-11-19 11:40:51.261 Error: Growatt: raise JSONDecodeError("Expecting value", s, err.value) from None
2022-11-19 11:40:51.261 Error: Growatt: json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
@tonbor
Copy link

tonbor commented Nov 19, 2022

Same problem for me
2022-11-19 18:37:59.199 Error: Growatt Inverter: Call to function 'onMessage' failed, exception details:
2022-11-19 18:37:59.200 Error: Growatt Inverter: Traceback (most recent call last):
2022-11-19 18:37:59.200 Error: Growatt Inverter: File "/home/pi/domoticz/plugins/Domoticz-Growatt-Webserver-Plugin/plugin.py", line 275, in onMessage
2022-11-19 18:37:59.200 Error: Growatt Inverter: _plugin.onMessage(Connection, Data)
2022-11-19 18:37:59.200 Error: Growatt Inverter: File "/home/pi/domoticz/plugins/Domoticz-Growatt-Webserver-Plugin/plugin.py", line 172, in onMessage
2022-11-19 18:37:59.201 Error: Growatt Inverter: apiResponse = json.loads(strData)
2022-11-19 18:37:59.201 Error: Growatt Inverter: File "/usr/lib/python3.7/json/init.py", line 348, in loads
2022-11-19 18:37:59.201 Error: Growatt Inverter: return _default_decoder.decode(s)
2022-11-19 18:37:59.201 Error: Growatt Inverter: File "/usr/lib/python3.7/json/decoder.py", line 337, in decode
2022-11-19 18:37:59.201 Error: Growatt Inverter: obj, end = self.raw_decode(s, idx=_w(s, 0).end())
2022-11-19 18:37:59.201 Error: Growatt Inverter: File "/usr/lib/python3.7/json/decoder.py", line 355, in raw_decode
2022-11-19 18:37:59.201 Error: Growatt Inverter: raise JSONDecodeError("Expecting value", s, err.value) from None
2022-11-19 18:37:59.201 Error: Growatt Inverter: json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

@Tinus016
Copy link
Author

I have tried to find it out my self, but no success at this moment. I also put the highest level of debug on and that tells me this:

19-11-2022 | 16:55:01.615 | Growatt: >'Status':'200'
19-11-2022 | 16:55:01.615 | Growatt: >'Headers':
19-11-2022 | 16:55:01.615 | Growatt: ---->'Server':'Tengine'
19-11-2022 | 16:55:01.615 | Growatt: ---->'Content-Type':'application/json;charset=UTF-8'
19-11-2022 | 16:55:01.615 | Growatt: ---->'Transfer-Encoding':'chunked'
19-11-2022 | 16:55:01.615 | Growatt: ---->'Connection':'keep-alive'
19-11-2022 | 16:55:01.615 | Growatt: ---->'Vary':'Accept-Encoding'
19-11-2022 | 16:55:01.615 | Growatt: ---->'Date':'Sat, 19 Nov 2022 15:55:01 GMT'
19-11-2022 | 16:55:01.615 | Growatt: ---->'Set-Cookie':
19-11-2022 | 16:55:01.615 | Growatt: --------['JSESSIONID=A830E37613389AF6211DC2513BA2F5A6; Path=/; HttpOnly']
19-11-2022 | 16:55:01.615 | Growatt: --------['SERVERID=c6ce5dcf4bc4a6d94703a96816e904f0\|1668873301\|1668873301;Path=/']
19-11-2022 | 16:55:01.615 | Growatt: ---->'Via':'cache26.l2de2[63,0], cache7.nl2[304,0]'
19-11-2022 | 16:55:01.615 | Growatt: ---->'Timing-Allow-Origin':'*'
19-11-2022 | 16:55:01.615 | Growatt: ---->'EagleId':'2ff6309b16688733012721957e'
19-11-2022 | 16:55:01.616 | Growatt: ---->'Content-Encoding':'gzip'
19-11-2022 | 16:55:01.616 | Growatt: >'Data':'b'\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\x03tS\xc1n\xdb0\x0c\xfd\x95A\xe7\xb4\xb0\xe5:N\|Z\x9a\x06C\x80 \x0b\xb6\xb6\x03V\x0c\x03-\xd3\x8e\x10Y\xf2$9EQ\xf4\xdfG\xc9\xce\xbaK\xe1\x8bEQ\xe4\xe3{\x8f\xaf\xac\x02qb\xe5+\xeb\\\xcbJ\xc6f\xcc\x1b\x0f\xea\x0e<P\xf4m\xc6\xea\xf8\xf7\xf4\xcaz\x05\xdaokJ\xe2\xd9\x82\xa7\x05\xa5\xc6\xd0\x1e:\xa4\xe0\xadA\xfb\xfb\xa7\xd1\xec\xed\x17=\xc2\xb3\x14\xb86\x83\xf6t\x95R\xaat_{\xd4w1\xbe\x93\x8e\xc2\xe9\x8c\xfd\x19@I\xffB)ILY\x1fQ\x9c\x1e\x1c\xda\xd5\xe0\x8f\xac\xf4v\xc0\x10\xdeH\x11\x83u\xfd\xbd\x03\xeb\xc7"\xef\xd7\xef\x85\x0f`\xa1s\xacLB\xf8Q\xe2\xf3\x18\xde\xea\xc6\xb0\xb2\x01\xe5(\xdf\rB\xa0s\x97\xe7Tw\xac\x16Q\x0et\x0cd@\x8b\xda\xafM\x1d\xe2\xab\xdd\xfe\xc7&\x0c{4\x1a\xf7C7\xb2$z\xf3\x8c\xf6\xde\x9cPS\x00\xe7\xd5<o\xc4\\p\xc1\x9b"\xab\x8aE.R^\xa0\xe0\xf5\x9c\xd7M(\xed_z\x8c\xc8\xce\xb2?\x18\xa9=AH\xe9\x08}o\xcd\x19\xeb\x7f\x00{p\xee\xd9\xd8@tZ,\x01\xb3<_.\xaa\x9b\x1b\xe4\x15O\xe7I\x86\xcb\xa4i\xe6MSU\r\x95\xb5\xb2=z\x85gT\x91Q\xe9V\x01zl\x14\x86\xd9\n\xa3\x0f\x10\xc8\x0c\xa0\xc3\xb0h\x1f\xac\x1a\x8fR\xd3\xc9\xa3\x1d\xf5x"\xdd$u\xbdIx\xbe(fL\x81\x1f\xd3\xc0"9\x80m\x06kh\x04\xba\xd0\x93SNR\xd7\xb1\x93\x96\xe24\xd9@\x0fJ\x05\xb2\xe8\x91\xf6A\xb5\xed\x98\xe2e\x87\xe4\x0e\x8c(A\x88`\x8d\xe9I\xd0T\xea\xcf\x9d\xd4\xd2\xe6\xf3k\x1d\xde\x87{\x1b\x9d\xb1G\x7fDKF\xab\xdd\x7f\x90\xbfX3\xf4#f18o:\xb4\x93\\\x81\x13li"R\'R\x1e\xbd\x85\x1a*\x15H\x1eUW\xe0\xfc\xce\xb4Ro\xfb@3/\xae\x13\xfa.\x0e\xd8\x81n\x07\xb2@\x10VGc\xde\xcav=\xb5\x19\xa9\rD\xb1)}4\xd9\xfdE_\xa9\x1d-\x90B\xbb\x89=\'g\x91\xcc\x13\x9c8]\xd7\x83~\x99Tp\x8f\xb4\x05\x87c$g4\xc4JIp\x1f0\x83\x1dH\xf5\x11k\xa4\x94G\xda\xdd\xd0\x87\'\xe9\xf2*\xe5Wi\xf1)-\xca,)\xb3\x88Cxy\xc6\x89\xf9\xc0\x95Q8I\xe4:\xb77>.\xc3dE\x1d\x8f\xef\xb8\xa5;LK\xf0\r\xdb\xcb\x9a\x11\xf8\xcd\x88)\xc8<-D\xc2\x93\x04P\x14\xb8\xac\x05\xf0<\x1ci%\x16\xbc\x81\xac\x80\xe4/\x00\x00\x00\xff\xff2NRB\x8a\x83\x90\xcc\\\x88{\x8d\x80\x8e5\xd45\xb4T02\xb625\xb52\x00\xb9\x17d2\xccU\x90\xb8CJ<\xfe\xc5\xb8B\tTj9&\x17"Rv\n\x90U\x94\x99TZ\x92\x8f\x1a/\xc9\xc0T\xe3\x99\x97\x92Z\x01L\x98\xb5\xb0\xd2\x04\\\xcc\xb8%\xe6f\xe6T\xc2\xa2$>\x19\x92\xbc\x0c\x95jk\x01\x00\x00\x00\xff\xff\x03\x00\xa5\x17]\'5\x05\x00\x00''
19-11-2022 | 16:55:01.616 | Error: Growatt: Call to function 'onMessage' failed, exception details:
19-11-2022 | 16:55:01.617 | Error: Growatt: Traceback (most recent call last):
19-11-2022 | 16:55:01.617 | Error: Growatt:   File "/home/pi/domoticz/plugins/Domoticz-Growatt-Webserver-Plugin/plugin.py", line 285, in onMessage
19-11-2022 | 16:55:01.618 | Error: Growatt:     _plugin.onMessage(Connection, Data)
19-11-2022 | 16:55:01.618 | Error: Growatt:   File "/home/pi/domoticz/plugins/Domoticz-Growatt-Webserver-Plugin/plugin.py", line 171, in onMessage
19-11-2022 | 16:55:01.618 | Error: Growatt:     apiResponse = json.loads(strData)
19-11-2022 | 16:55:01.618 | Error: Growatt:   File "/usr/lib/python3.7/json/__init__.py", line 348, in loads
19-11-2022 | 16:55:01.618 | Error: Growatt:     return _default_decoder.decode(s)
19-11-2022 | 16:55:01.618 | Error: Growatt:   File "/usr/lib/python3.7/json/decoder.py", line 337, in decode
19-11-2022 | 16:55:01.618 | Error: Growatt:     obj, end = self.raw_decode(s, idx=_w(s, 0).end())
19-11-2022 | 16:55:01.618 | Error: Growatt:   File "/usr/lib/python3.7/json/decoder.py", line 355, in raw_decode
19-11-2022 | 16:55:01.618 | Error: Growatt:     raise JSONDecodeError("Expecting value", s, err.value) from None
19-11-2022 | 16:55:01.618 | Error: Growatt: json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

In my opinion there is something wrong with the received data. It's expecting a encoded JSON but it's no JSON or so

@tonbor
Copy link

tonbor commented Nov 20, 2022

same problem here 2 years aga, they fixed the plugin stas-demydiuk/domoticz-zigbee2mqtt-plugin#521

@Tinus016
Copy link
Author

Tinus016 commented Nov 20, 2022

As temporary fix i use this: domoticz.local:8080/json.htm?type=command&param=udevice&idx=IDX&nvalue=0&svalue=0;Total amount from the Growatt app by 1000 forget the . and add 00
in my case:
domoticz.local:8080/json.htm?type=command&param=udevice&idx=17&nvalue=0&svalue=0;6714300
I do this once a day at the end off the day otherwise my "real use counter" is out of sinq

@sincze
Copy link
Owner

sincze commented Nov 20, 2022

Can you give the following a try:
So add a # 2 times in front of the encoding of 'Accept-Encoding': 'gzip'

    def apiRequestHeaders(self):        # Needed headers for Login Function
        return {
            'Content-Type': 'application/x-www-form-urlencoded; charset=utf-8',
            'Connection': 'keep-alive',
            'Host': 'server-api.growatt.com',
            'User-Agent': 'Domoticz/1.0'
#            'Accept-Encoding': 'gzip'
        }

    def apiRequestHeaders_cookie(self): # Needed headers for Data retrieval
        return {
            'Verb': 'POST',
            'URL': '/newTwoPlantAPI.do?op=getUserCenterEnertyDataByPlantid',
            'Headers' : { 'Content-Type': 'application/x-www-form-urlencoded; charset=utf-8',
                          'Connection': 'keep-alive',
                          'Host': 'server-api.growatt.com',
                          'User-Agent': 'Domoticz/1.0',
#                          'Accept-Encoding': 'gzip',
                          'Cookie': ['JSESSIONID='+self.sessionId, 'SERVERID='+self.serverId]
                        },

@Superpjeter
Copy link

I had the same problem and the 2 times # works for me, thanks

@Tinus016
Copy link
Author

Can you give the following a try: So add a # 2 times in front of the encoding of 'Accept-Encoding': 'gzip'

    def apiRequestHeaders(self):        # Needed headers for Login Function
        return {
            'Content-Type': 'application/x-www-form-urlencoded; charset=utf-8',
            'Connection': 'keep-alive',
            'Host': 'server-api.growatt.com',
            'User-Agent': 'Domoticz/1.0'
#            'Accept-Encoding': 'gzip'
        }

    def apiRequestHeaders_cookie(self): # Needed headers for Data retrieval
        return {
            'Verb': 'POST',
            'URL': '/newTwoPlantAPI.do?op=getUserCenterEnertyDataByPlantid',
            'Headers' : { 'Content-Type': 'application/x-www-form-urlencoded; charset=utf-8',
                          'Connection': 'keep-alive',
                          'Host': 'server-api.growatt.com',
                          'User-Agent': 'Domoticz/1.0',
#                          'Accept-Encoding': 'gzip',
                          'Cookie': ['JSESSIONID='+self.sessionId, 'SERVERID='+self.serverId]
                        },

This fixed the issue!! Thank you very much!

@Tinus016 Tinus016 reopened this Nov 20, 2022
@tonbor
Copy link

tonbor commented Nov 20, 2022

Can you give the following a try: So add a # 2 times in front of the encoding of 'Accept-Encoding': 'gzip'

    def apiRequestHeaders(self):        # Needed headers for Login Function
        return {
            'Content-Type': 'application/x-www-form-urlencoded; charset=utf-8',
            'Connection': 'keep-alive',
            'Host': 'server-api.growatt.com',
            'User-Agent': 'Domoticz/1.0'
#            'Accept-Encoding': 'gzip'
        }

    def apiRequestHeaders_cookie(self): # Needed headers for Data retrieval
        return {
            'Verb': 'POST',
            'URL': '/newTwoPlantAPI.do?op=getUserCenterEnertyDataByPlantid',
            'Headers' : { 'Content-Type': 'application/x-www-form-urlencoded; charset=utf-8',
                          'Connection': 'keep-alive',
                          'Host': 'server-api.growatt.com',
                          'User-Agent': 'Domoticz/1.0',
#                          'Accept-Encoding': 'gzip',
                          'Cookie': ['JSESSIONID='+self.sessionId, 'SERVERID='+self.serverId]
                        },

Thanks, is working

@bertinholland
Copy link

bertinholland commented Nov 20, 2022

confirm it is working fine after remark two lines !
Thanks for your quick fi.
The code is ready for integration in the production version
And no errors in de domoticz logfile anymore

image

@sincze
Copy link
Owner

sincze commented Nov 20, 2022

Merged into V1.0.1

@sincze sincze closed this as completed Nov 20, 2022
@hofikhof
Copy link

After this update still not working. I have domoticz 2022.2 and growatt pligin 1.0.1
I deleted this hw and create new without success.

2022-11-21 13:02:48.527 Status: growatt: Entering work loop.
2022-11-21 13:02:48.528 Status: growatt: Started.
2022-11-21 13:02:48.781 Status: growatt: Initialized version 1.0.1, author 'sincze'
2022-11-21 13:02:48.802 Error: growatt: Call to function 'onStart' failed, exception details:
2022-11-21 13:02:48.828 Error: growatt: Traceback (most recent call last):
2022-11-21 13:02:48.828 Error: growatt: File "/home/pi/domoticz/plugins/Domoticz-Growatt-Webserver-Plugin/plugin.py", line 265, in onStart
2022-11-21 13:02:48.828 Error: growatt: _plugin.onStart()
2022-11-21 13:02:48.828 Error: growatt: File "/home/pi/domoticz/plugins/Domoticz-Growatt-Webserver-Plugin/plugin.py", line 137, in onStart
2022-11-21 13:02:48.828 Error: growatt: createDevices()
2022-11-21 13:02:48.828 Error: growatt: File "/home/pi/domoticz/plugins/Domoticz-Growatt-Webserver-Plugin/plugin.py", line 354, in createDevices
2022-11-21 13:02:48.828 Error: growatt: image = Images["Growatt"].ID # Get id from database
2022-11-21 13:02:48.828 Error: growatt: KeyError: 'Growatt'
2022-11-21 13:02:58.006 growatt: Pushing 'onHeartbeatCallback' on to queue
2022-11-21 13:02:58.056 growatt: Processing 'onHeartbeatCallback' message
...

@sincze
Copy link
Owner

sincze commented Nov 21, 2022

@hofikhof did you remove the icons as well before re-adding the plugin ???

@hofikhof
Copy link

hofikhof commented Nov 21, 2022

@hofikhof did you remove the icons as well before re-adding the plugin ???

yes, in www/images

Edit: it has been created 2 devices, growatt Inverter (W) and growatt inverter (kWh) but the 3. not - it will be inverter status

@sincze
Copy link
Owner

sincze commented Nov 21, 2022

You can do this from the Domoticz Inteface that will probably clean the ID's as well. I always remove via Domoticz interface not on file level.

@hofikhof
Copy link

without succes. I deleted via interface this 2 devices (inverter status has not been created as i wrote), remove hw, delete plugin, new git clone and adding, but still the same error...

@sincze
Copy link
Owner

sincze commented Nov 21, 2022

Not only delete 2 devices... delete Growatt icons as described here
image

@sincze
Copy link
Owner

sincze commented Nov 21, 2022

image
Gives me the follwing after I recreate the plugin from the hardware menu.

@hofikhof
Copy link

image Gives me the follwing after I recreate the plugin from the hardware menu.

Now it works without errors - I see this 2 devices (inverter status has not been created but earlier yes}.... I don't need status. Thank you for your reply.

image

@hofikhof
Copy link

Gives me the follwing after I recreate the plugin from the hardware menu.

I use my own python script with more devices - only run as cronjob python script. If you need to upgrade your plugin please send me message.

image

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

6 participants