Ankündigung

Einklappen
Keine Ankündigung bisher.

KOSTAl Plugin

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

    [Featurewunsch] KOSTAl Plugin

    Hallo,
    zunächst einmal großes Lob für die Entwicklung des Kostal Plugins. Das ist mit den entsprechenden Plots und der Umrechnung in € die Lieblingsfunktion meiner Frau geworden und ich überlege mir neben Prozent auch noch in erreichte Zalando Shopping Events umzurechnen . Dokumentation meiner Umsetzung gibt´s ja bereits hier: https://knx-user-forum.de/smartvisu/...be-format.html

    Jetzt weckt das natürlich auch Begehrlichkeiten, denn mein Kostal 10.1 hat auch 4 brachliegende 0-10V Analogeingänge, die auf der Seite Info.shtml des WR angezeigt werden. Da der Wechselrichter nicht weit weg vom Kachelofen steht (bei dem OW Sensoren wg. hohen Temperaturen nicht eingesetzt werden können) , habe ich mir überlegt Sensoren mit 0-10V z.B. Pt1000 einzusetzen und diese durch den Kostal digitalisieren zu lassen.

    So ließe sich die Messung am Kachelofen und an den Solarpanels aufwandsarm umsetzen.

    Unterstützt das aktuelle Plugin schon diese Analogeingänge und ich habe es nur übersehen bzw. könntet Ihr das Plugin dahingehend erweitern ?


    Gruß Stephan

    #2
    hat mir keine Ruhe gelassen

    So, ich habe jetzt ein eigenständiges Plugin gestrickt um die Kostal Analogeingänge abzufragen. Werde in den nächsten Tagen noch versuchen dies in das Kostal Plugin zu integrieren. Hier einmal der aktuelle Stand:

    __init__.py in plugins\
    Code:
    #!/usr/bin/env python3
    # /plugins/kostala/__init__.py
    # vim: set encoding=utf-8 tabstop=4 softtabstop=4 shiftwidth=4 expandtab
    #
     import logging
    import time
    import re
     logger = logging.getLogger('')
     
    class Kostala():
        _key2td = {
            'analog_1': 0,
            'analog_2': 1,
            'analog_3': 2,
            'analog_4': 3,
          
     
        }
         def __init__(self, smarthome, ip, user="pvserver", passwd="pvwr", cycle=300):
            self._sh = smarthome
            self.ip = ip
            self.user = user
            self.passwd = passwd
            self.cycle = int(cycle)
            self._items = []
            self._values = {}
         def run(self):
            self.alive = True
            self._sh.scheduler.add('Kostala', self._refresh, cycle=self.cycle)
         def stop(self):
            self.alive = False
         def parse_item(self, item):
            if 'kostala' in item.conf:
                kostala_key = item.conf['kostala']
                if kostala_key in self._key2td:
                    self._items.append([item, kostala_key])
                    return self.update_item
                else:
                    logger.warn('invalid key {0} configured', kostala_key)
            return None
         def parse_logic(self, logic):
            pass
         def update_item(self, item, caller=None, source=None, dest=None):
            if caller != 'Kostala':
                pass
         def _refresh(self):
            start = time.time()
            try:
                data = self._sh.tools.fetch_url(
                    'http://' + self.ip + '/Info.fhtml', self.user, self.passwd, timeout=2).decode('iso8859-1')
                # remove all attributes for easy findall()
                data = re.sub(r'<([a-zA-Z0-9]+)(\s+[^>]*)>', r'<\1>', data)
                # search all TD elements
              
                table = re.findall(r'<b>([^<>]*)V</b>', data, re.M | re.I | re.S)
               
                for kostala_key in self._key2td:
                                  
                    value = table[self._key2td[kostala_key]].strip()
                  
                    if 'x x x' not in value:
                        logger.debug('set {0} = {1}'.format(kostala_key, value))
                        self._values[kostala_key] = value
                for item_cfg in self._items:
                    if item_cfg[1] in self._values:
                        item_cfg[0](self._values[item_cfg[1]], 'Kostala')
            except Exception as e:
                logger.error(
                    'could not retrieve data from {0}: {1}'.format(self.ip, e))
                return
             cycletime = time.time() - start
            logger.debug("cycle takes {0} seconds".format(cycletime))
    Und hier die Items (noch ohne eval Berechnung)

    Code:
    # items/pva.conf
    [PV]
        [[analog1]]
            type = num
            kostala = analog_1
            
        [[analog2]]
            type = num
            kostala = analog_2
          
            
         [[analog3]]
            type = num
            kostala = analog_3
         
            
         [[analog4]]
            type = num 
            kostala = analog_4
    Und die plugin.conf

    Code:
    [KOSTALA]
       class_name = Kostala
       class_path = plugins.kostala
       ip = 192.168.123.201
      user = pvserver
      passwd = xxxxxx
       cycle = 303
    Falls das hier Fehl am Platze ist, und eher in Github reingehört, bitte um kurze Nachhilfe

    Gruß Stephan

    Kommentar


      #3
      QUOTE=shs2;356332]. Werde in den nächsten Tagen noch versuchen dies in das Kostal Plugin zu integrieren. [/QUOTE]

      Ich glaube daran hab ich mich verhoben ... bekomme einfach nicht die neuen Items aktualisiert. Fällt Euch auf was ich verkehrt mache ?
      Ich glaube da fehlen mir noch einige Grundlagen - leider !

      Die Zuordnung der Werte klappt, aber die Zuweisung zu den Items bekomme ich einfach nicht hin

      Code:
      2013-11-27 17:41:59,421 DEBUG    Kostala      set analog_4 = 0.00 -- __init__.py:_refresh:62
      2013-11-27 17:41:59,426 DEBUG    Kostala      set analog_1 = 0.00 -- __init__.py:_refresh:62
      2013-11-27 17:41:59,431 DEBUG    Kostala      set analog_3 = 0.00 -- __init__.py:_refresh:62
      2013-11-27 17:41:59,435 DEBUG    Kostala      set analog_2 = 0.00 -- __init__.py:_refresh:62
      2013-11-27 17:41:59,441 DEBUG    Kostala      cycle takes 0.17827701568603516 seconds -- __init__.py:_refresh:72
      [

      Gruß Stephan

      Kommentar


        #4
        Hallo Stephan,

        bist du hier schon weiter gekommen ? Ich würde bei mir auch gerne noch die Analogwerte abfragen, danke für die Rückmeldung.

        Gruß
        Tobias

        Kommentar


          #5
          Hallo Tobias, leider nein hatte dann keine Zeit mehr und meine Ursprüngliche Idee die Kachelofentempetatur zu messen habe ich mit onewire gelöst
          Gruß Stephan

          Kommentar


            #6
            Ok danke für die Rückmeldung, dann werde ich mal versuchen an deinem Skript zu feilen

            Kommentar

            Lädt...
            X