Ankündigung

Einklappen
Keine Ankündigung bisher.

Plugin Pelletkessel

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

    #46
    Zitat von mknx Beitrag anzeigen
    Hi,
    es langt vollkommen wenn Ihr Marcus zu mir sagt. ;-)
    Ach jetzt? Und ich soll dich immer mit "Gott" ansprechen .

    Gruss
    Join smartVISU on facebook. Web: smartvisu.de.
    Dir gefällt smartVISU? Bitte spenden für die Weiterentwicklung.

    Kommentar


      #47
      So geht soweit. Prima.
      Ich kann jetzt Items anlegen ala:

      Code:
      [etatest]
          [[testuri1]]
             eta_pu_uri = 112/10021/0/0/12000
             type = str
             [[[strValue]]]
                 eta_pu_type = strValue
                 type = str
             [[[unit]]]
                 eta_pu_type = unit
                 type = str
          [[testuri2]]
             eta_pu_uri = 112/10021/0/0/12162
             type = str
             [[[strValue]]]
                 eta_pu_type = strValue
                 type = str
             [[[unit]]]
                 eta_pu_type = unit
                 type = str
      Und es gibt die Werte zurück.
      Das muss ich jetzt noch ein wenig aufhübschen, Kommentare in den Code, kurze Doku, dann wirds ins git geschoben.
      Anschliessend fehlt dann noch Error handling der Heizung, sowie schreiben von Parametern.
      Derzeit zwischen Kistenauspacken und Garten anlegen.
      Baublog im Profil.

      Kommentar


        #48
        Hallo,

        Zitat von greentux Beitrag anzeigen
        So geht soweit. Prima.
        klasse, freu mich auf das neue Plugin!

        Bis bald

        Marcus

        Kommentar


          #49
          Ja, dringend! Allerdings bestand das Wochenende aus 14 Kubik Muttererde verteilen (immerhin mit Radlader), verfestigen und glatt bekommen und zum Ausgleich Weinfest.
          Aber ja, steht gaaanz oben

          Gruß
          Derzeit zwischen Kistenauspacken und Garten anlegen.
          Baublog im Profil.

          Kommentar


            #50
            So, ich habe noch ein Problem.
            Während plugin init würde ich gern das Variablen Set auf die ETA schieben.
            Dazu müsste ich die Items alle durchgehen und alle CAN Uri einsammeln. Hat man bei __init irgendwie Zugriff auf die Items?

            Sonst kann ich es auch in parse_item machen, was dann ja aber regelmaessig passieren würde. Klar kann man sich das da dann "merken", schöner wärs in init.

            Danke und Gruß
            Derzeit zwischen Kistenauspacken und Garten anlegen.
            Baublog im Profil.

            Kommentar


              #51
              Hi,

              bei dem init der Plugins gibt es die Items noch nicht.

              Wieso sollte parse_item periodisch aufgerufen werden? Jedes Item ruft die Methode einmalig für jedes Plugin auf.

              Bis bald

              Marcus

              Kommentar


                #52
                Ja eben, immer für ein Icon...
                Also merk ich mir die Liste so lange bis sie vollständig ist? Merkt man das, wann alle Items durch sind?

                Ich muss dem Kessel einmal alle UIDs geben, die in der item.conf stehen.
                Das verwaltet der intern als ein URI-Set, welches ich anshcliessend mit einem Rutsch lesen kann.
                Klar kann ich auch einen externen Helper schreiben. Ich finde nur den Ort beim Plugin Init ganz geeignet, das zu tun.
                Derzeit zwischen Kistenauspacken und Garten anlegen.
                Baublog im Profil.

                Kommentar


                  #53
                  Hi,

                  die Plugins fangen erst mit der Arbeit an, wenn alle Items geparsed sind.

                  Dann wird die Methode run aufgerufen.

                  Wozu brauchst Du einen externen Helper? Und was ist das?

                  Bis bald

                  Marcus

                  Kommentar


                    #54
                    Also nochmal.

                    Man kann bei der Heizung alle Werte mit einem Mal abfragen. Muss man sogar, da die sonst zu langsam ist.
                    Also muss ich einmal alle Items (siehe oben, da stehen ja die URI drin) an die Heizung geben und ihr sagen, das das Set "smarthome" aus den ganzen URI besteht. Das speichert sie und fertig.
                    Das kann ich nun auf der Kommandozeile machen mit einem python Programm, was mit sh.py nix zu tun hat. Das wäre ein Helper. Find ich aber doo, da ich da immer dran denken müsste, wenn ich in der items.conf was ändere.
                    Also dachte ich mir, das ich das doch in __init machen könnte. Klang jedenfalls danach Aber ok, da sind die items noch nicht da.

                    Also muss ich es in parse_item irgendwie reinbauen. Mal sehen.
                    Derzeit zwischen Kistenauspacken und Garten anlegen.
                    Baublog im Profil.

                    Kommentar


                      #55
                      ungefähr so:

                      Code:
                      def __init__(self)
                          uris = {}
                      
                      def parse_item(self, item): 
                          if 'eta_pu_uri' in item.conf:
                              self.uris[item.conf['eta_pu_uri']] = item
                      
                      def run(self):  #  oder besser in eine Methode die zyklisch aufgerufen wird
                          values = self.fetch_values()
                          for uri in self.uris:
                             if uri in values:
                                 value = values[uri]
                                 self.uris[uri](value, 'eta')  # hier wird das Item aktualisiert
                      hth

                      Marcus

                      Kommentar


                        #56
                        ja das ist der Teil den ich schon habe.
                        Code:
                               self._sh.scheduler.add(
                                    'ETA_PU',
                                    self.update_status,
                                    cycle=self._cycle)
                                self.alive = True
                        
                            def stop(self):
                                self.alive = False
                        
                            def parse_item(self, item):
                        
                                if 'eta_pu_type' in item.conf:
                                        uri = None
                                        parent_item = item.return_parent()
                                        if (parent_item != None) and parent_item.conf.has_key('eta_pu_uri'):
                                            uri = parent_item.conf['eta_pu_uri']
                                        if uri:
                                                if uri not in self._uri:
                                                        self._uri[uri] = []
                                                self._uri[uri].append(item)
                                return self.update_item
                        
                            def update_item(self, item, caller=None, source=None, dest=None):
                                return None
                        
                            def update_status(self):
                                url = 'http://' + self._address + ':' + self._port + '/user/vars/basic'
                        
                                # read xml response
                                xml = self._sh.tools.fetch_url(url, timeout=2)
                                root = ET.fromstring(xml)
                        
                                for elem in root.iter():
                                    for key in self._uri.keys():
                                        try:
                                            if key == elem.attrib['uri']:
                                                for i in self._uri[key]:
                                                        pu_type = i.conf['eta_pu_type']
                                                        i(elem.attrib[pu_type], caller='eta_pu')
                                        except:
                                           pass
                        Derzeit zwischen Kistenauspacken und Garten anlegen.
                        Baublog im Profil.

                        Kommentar


                          #57
                          Das /user/vars/basic was dort gelesen wird, ist aber vorher in die Heizung zu schreiben (via http PUT, was sh.tools leider nicht kann, was aber kein Problem ist).

                          Um dieses /user/vars/basic also einmalig(!) pro sh.py start in die Heizung zu schreiben, braucht es also "etwas", was einmal durch alle relevanten items wackelt und die URIs raussucht.
                          Was läuft also einmalig nur beim Start und hat Zugriff auf die Items?
                          Derzeit zwischen Kistenauspacken und Garten anlegen.
                          Baublog im Profil.

                          Kommentar


                            #58
                            na
                            def run(self):

                            Kommentar


                              #59
                              aaahhhhh.

                              Gibts ein Plugin, wo das mal bischen kommentiert ist?
                              Derzeit zwischen Kistenauspacken und Garten anlegen.
                              Baublog im Profil.

                              Kommentar


                                #60
                                mir nicht bekannt. Steht aber in Post #53 in diesem Thread.

                                Kommentar

                                Lädt...
                                X