Ankündigung

Einklappen
Keine Ankündigung bisher.

Plugin Pelletkessel

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

  • greentux
    antwortet
    In der Tat gabs hier sogar eine Version mit neuer sh.tools.
    Mal sehen, ob wir das nochmal machen. Ich schaue mir Deinen Hinweis mal an.

    Neben weiteren ähnlichen Geräten kann ich mir CONNECT auch vorstellen.
    Na schaun wir mal.

    Einen Kommentar schreiben:


  • callidomus
    antwortet
    Hallo,

    Zitat von greentux Beitrag anzeigen
    Vl. könnte man sh.tools um weitere HTTP Request Types erweitern? GET, DELETE, PUT bräuchte ich.
    klar könnte man. Bin auf den diff gespannt. Ich würde es aber wahrscheinlich über das requests Modul machen.

    Zitat von greentux Beitrag anzeigen
    Vermutlich findet sich derlei in verschiedenen Plugins.
    glaube ich nicht.

    Bis bald

    Marcus

    Einen Kommentar schreiben:


  • greentux
    antwortet
    Erste Version uploaded nach develop.
    ToDo:
    - Schreibaktionen
    - Raw Value auslesen
    - Fehler auslesen

    Vl. könnte man sh.tools um weitere HTTP Request Types erweitern? GET, DELETE, PUT bräuchte ich. Vermutlich findet sich derlei in verschiedenen Plugins.

    Grüße

    Einen Kommentar schreiben:


  • callidomus
    antwortet
    mir nicht bekannt. Steht aber in Post #53 in diesem Thread.

    Einen Kommentar schreiben:


  • greentux
    antwortet
    aaahhhhh.

    Gibts ein Plugin, wo das mal bischen kommentiert ist?

    Einen Kommentar schreiben:


  • callidomus
    antwortet
    na
    def run(self):

    Einen Kommentar schreiben:


  • greentux
    antwortet
    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?

    Einen Kommentar schreiben:


  • greentux
    antwortet
    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

    Einen Kommentar schreiben:


  • callidomus
    antwortet
    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

    Einen Kommentar schreiben:


  • greentux
    antwortet
    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.

    Einen Kommentar schreiben:


  • callidomus
    antwortet
    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

    Einen Kommentar schreiben:


  • greentux
    antwortet
    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.

    Einen Kommentar schreiben:


  • callidomus
    antwortet
    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

    Einen Kommentar schreiben:


  • greentux
    antwortet
    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ß

    Einen Kommentar schreiben:


  • greentux
    antwortet
    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ß

    Einen Kommentar schreiben:

Lädt...
X