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