Hallo SmartHome Gemeinde,
wegen der Umstellung auf SmarthomeNG bzw. Python 3.5x benötige ich Hilfe.
folgendes Plugin zum Auslesen eines Solarlog ab Firmware 3.x habe ich mir mit Hilfe anderer Plugins zusammengestellt.
Das hat bisher auch super funktioniert.
Mit der Umstellung bekomme ich aber folgende Fehlermeldung und kann als blutiger Anfänger nichts damit anfangen.
Hat jemand eine Idee was ich ändern muss?
Vielen Dank im vorraus.
Gruß
Klaus
Fehlermeldung:
Plugin:
wegen der Umstellung auf SmarthomeNG bzw. Python 3.5x benötige ich Hilfe.
folgendes Plugin zum Auslesen eines Solarlog ab Firmware 3.x habe ich mir mit Hilfe anderer Plugins zusammengestellt.
Das hat bisher auch super funktioniert.
Mit der Umstellung bekomme ich aber folgende Fehlermeldung und kann als blutiger Anfänger nichts damit anfangen.
Hat jemand eine Idee was ich ändern muss?
Vielen Dank im vorraus.
Gruß
Klaus
Fehlermeldung:
Code:
2016-09-16 15:18:09 ERROR scheduler Solarv3 Method Solarv3 exception: Invalid header name b'Content-Type:' -- scheduler.py:_task:375
Traceback (most recent call last):
File "/usr/local/smarthome/lib/scheduler.py", line 371, in _task
obj()
File "/usr/local/smarthome/plugins/solarv3/__init__.py", line 49, in update_status
conn.request("POST", "/getjp", params, headers)
File "/usr/lib/python3.5/http/client.py", line 1106, in request
self._send_request(method, url, body, headers)
File "/usr/lib/python3.5/http/client.py", line 1146, in _send_request
self.putheader(hdr, value)
File "/usr/lib/python3.5/http/client.py", line 1073, in putheader
raise ValueError('Invalid header name %r' % (header,))
ValueError: Invalid header name b'Content-Type:'
Plugin:
Code:
#!/usr/bin/env python3
import logging
from datetime import datetime, timedelta
import json
import http.client
class Solarv3():
def __init__(self, smarthome, host='192.168.1.49'):
self.logger = logging.getLogger(__name__)
self.logger.info('Init SolarLog ab Firmware V3.x')
self._sh=smarthome
self._host = host
self._cycle = 120
self._items = {}
def run(self):
self.alive = True
self._sh.scheduler.add('Solarv3', self.update_status, cycle=self._cycle)
def stop(self):
self.alive = False
def parse_item(self, item):
if 'solarv3' in item.conf:
solarv3_key = item.conf['solarv3']
self._items[solarv3_key]=item
# self.logger.debug("item {0} added with solarv3_key {1}".format(item,solarv3_key))
return self.update_item
else:
return None
def parse_logic(self, logic):
pass
def update_item(self, item, caller=None, source=None, dest=None):
if caller != 'plugin':
self.logger.info("update item: {0}".format(item.id()))
def update_status(self):
for parameter in self._items:
params = '{"801":{"170":null}}'
paramsbytes = params.encode('utf-8')
headers = {"Content-Type": "application/json",
"Accept": "text/plain"}
conn = http.client.HTTPConnection(self._host)
conn.request("POST", "/getjp", params, headers)
response = conn.getresponse()
data=response.read()
jsondata = json.loads(data.decode('utf-8'))
value = jsondata['801']['170'][str(parameter)]
# self.logger.debug("value is {0} key is {1} self._item is {2}".format(value, parameter, self._items[parameter]))
if parameter in self._items:
self.logger.debug("update item {0} with {1}".format(self._items[parameter], value))
item = self._items[parameter]
item (value, 'solarv3')
return



Kommentar