Ankündigung

Einklappen
Keine Ankündigung bisher.

Hilfe wegen Umstellung eines Plugins auf Python3.5

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    Hilfe wegen Umstellung eines Plugins auf Python3.5

    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:
    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
    Zuletzt geändert von klab; 16.09.2016, 20:46.

    #2
    Hi,
    ich denke es liegt am ":" hinter Content-Type

    probier es mal so

    Code:
    headers = {"Content-Type": "application/json", "Accept": "text/plain"}
    VG Jürgen

    Kommentar


      #3
      Hallo Jürgen,
      super, das ging ja hurtig, funktioniert einwandfrei. :-)

      Vielen Dank

      Gruß
      Klaus

      Kommentar


        #4
        Und was hatte das jetzt mit SHNG zu tun?

        Idealerweise: vom SmartPlugin erben und "self.logger." anstatt "logger." schreiben.

        https://github.com/smarthomeNG/smart...ki/SmartPlugin

        Kommentar


          #5
          Hallo psilo,
          danke für die Info.
          Ich habe es oben angepasst.
          Habe etwas Geduld mit den Ahnungslosen.


          Gruß
          Klaus
          Zuletzt geändert von klab; 16.09.2016, 20:43.

          Kommentar

          Lädt...
          X