Ankündigung

Einklappen
Keine Ankündigung bisher.

Frage zur Plugin Entwicklung

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

  • thengsty
    antwortet
    Bin gerade wieder leicht verzweifelt, weshalb ich euch nochmals um Hilfe bitte.
    Mein Item wird inzwischen einwandfrei mit Daten aus dem Inet aktualisiert. Ich mache dies regelmäßig in "poll_device" und setze dann dort den Wert in "_value" des jeweiligen Item Attributs. Das wird mir auch fehlerfrei im Backend angezeigt. "Update durch: assign property".

    Das Problem ist: Werte-Änderungen werden nicht in SmartVisu angezeigt und ich benötige immer ein "F5" ! Wenn ich die Werte des Items allerdings manuell im Backend ändere, werden diese auch in SmartVisu automatisch aktualisiert.

    Hier mal die Item Conf, ich teste mit dem Attribut "IsDocked":
    Code:
    Neato:
        Robot:
            Name:
                type: str
                neato_name: ''
            State:
                type: num
                neato_state: 0
            Command:
                type: num
                neato_command: 0
            I[B]sDocked:
                type: bool
                neato_isdocked: ''
                visu_acl: rw[/B]
            ChargePercentage:
                type: str
                neato_chargepercentage: ''
    Hat jemand eine Idee?
    Danke!

    Einen Kommentar schreiben:


  • thengsty
    antwortet
    "Warum so einfach wenns auch kompliziert geht?"

    Du liegst natürlich goldrichtig, so werde ich es machen und bin mir sicher dass es funktioniert. Ich werde berichten...

    Danke für den Denkanstoß!

    Einen Kommentar schreiben:


  • bmx
    antwortet
    Warum 2 Items und nicht ein numerisches Item das den Status hat?

    Einen Kommentar schreiben:


  • thengsty
    antwortet
    Zitat von bmx Beitrag anzeigen
    Wenn sich bei einem ItemA was ändert und dadurch in Deinem Plugin dessen update_item() Funktion aufgerufen wird, willst Du ein anderes Item ändern?
    Genau!

    ItemB speichere ich mir in parse_item bei initialisierung weg:
    Code:
    def parse_item(self, item):
        if self.has_iattr(item.conf, 'ItemBAttribut'):
            self.ItemB = item
    Ich machs mal konkreter:
    Das Plugin steuert den Staubsauger:
    1) Item Reinigung(bool) -> true = Reinigung / false = Reinigung beenden
    2) Item PauseResume (bool) -> true = Pause / false = Resume

    Mein konkretes Problem:
    1. Reinigung starten (Item Reinigung = true) -> Funktion update_item startet die Funktion zur Reinigung
    2. Reinigung pause (Item PauseResume = true) -> Funktion update_item startet die Funktion für Pause. Bis hierhin alles wunderbar
    3. Wenn ich jetzt die Reinigung beende (item Reinigung = false) -> Funktion update_item startet Funktion Reinigung stoppen , würde ich gerne zusätzlich das Item PauseResume auf false setzen.
    jetzt deutlicher? ;-)
    Oder gehe ich ganz falsch an die Sache ran?
    Danke euch!

    Einen Kommentar schreiben:


  • bmx
    antwortet
    Verstehe ich das richtig: Wenn sich bei einem ItemA was ändert und dadurch in Deinem Plugin dessen update_item() Funktion aufgerufen wird, willst Du ein anderes Item ändern?
    Was bedeutet in dem Zusammenhang "Wenn ich mir das ItemB vorab zwischenspeichere"? Woher bekommst Du die Info was ItemB ist? Und wie willst Du das aktuell ändern?

    Einen Kommentar schreiben:


  • psilo
    antwortet
    log mal raus oder debugge, ob er in das update läuft
    das update muss einen neuen wert schreiben, sonst keine änderung, ausser du setzt enforce_updates im item.
    und im backend natürlich das item reloaden.. da ist kein websocket oder sowas implementiert derzeit

    Einen Kommentar schreiben:


  • thengsty
    antwortet
    Ich nochmal.
    Plugins basteln macht Spaß... Das mal vorneweg. Allerdings stehe ich vor einer weiteren Herausforderung die ich nicht sauber gelöst bekomme. Mitunter stelle ich mich aber auch einfach blöd an.
    Danke vorab schon mal für eure Hilfe!
    Folgende Situation:

    - 2 Items vorhanden (itemA, itemB)
    - In "parse_item" habe ich definiert dass update_item ausgeführt werden soll wenn sich itemA ändert
    Code:
    [I]if self.has_iattr(item.conf,'IrgendeinItemA-Attribut'):
        return self.update_item[/I]
    Soweit so gut, das klappt auch wunderbar. Allerdings würde ich gerne an unten markierter Stelle in "update_item" den Wert von ItemB ändern
    Code:
    if caller != self.get_shortname():
        if self.has_iattr(item.conf,'IrgendeinItemA-Attribut'):
            self.Objekt.mache_tolle_sachen('toll')
            # hier würde ich gerne den Wert von ItemB ändern
    Wenn ich mir das ItemB vorab zwischenspeichere, kann ich den Wert dort auch ändern, was lt. Debugger funktioniert. Im SHNG Backend wird das Update aber nicht angezeit. Es ist also im Prinzip nur zur Laufzeit gültig. Mir fehlt wohl ein "Trigger" oder so, der den Item Wert ins Backend schiebt.

    Hoffentlich habe ich das einigermaßen verständlich erklärt... :-)
    Danke für eure Hilfe und Grüße,
    Thomas

    Einen Kommentar schreiben:


  • thengsty
    antwortet
    Ohje, du hast natürlich völlig recht. Da hats dran gelegen und funktioniert nun. Danke!

    Einen Kommentar schreiben:


  • psilo
    antwortet
    2 punkte:

    * du hast ein item namens neato_serial, aber keinen konfig wert zu einem item, der so heisst (bspw neato_serial: 'abcd', auf gleicher einrückungsebene wie z.b. type: str). logischerweise findet er das dann nicht



    * direkter zugriff auf "private" item attribute (_name) sollte nicht mehr gemacht werden. bitte properties verwenden (https://www.smarthomeng.de/developer...roperties.html)
    Zuletzt geändert von psilo; 19.09.2019, 17:13.

    Einen Kommentar schreiben:


  • thengsty
    hat ein Thema erstellt Frage zur Plugin Entwicklung.

    Frage zur Plugin Entwicklung

    Hallo zusammen,
    ich versuche mich gerade an der Entwicklung eines Plugins. Soweit habe die Grundsätze auch verstanden. Bei den ersten Tests mit dem "Sample Plugin" stoße ich aber auf ein seltsames Verhalten für das ich mal Unterstützung brauche.

    mit der Methode
    Code:
    def parse_item(self, item):
    ...
     if self.has_iattr(item.conf, 'neato_serial'):
    würde ich gerne, wie vorgeschlagen, die item.CONF prüfen. Leider ist diese bei meinen Items immer leer. (also die conf)

    Wenn ich das item auf den Namen prüfe, klappt es. Würde mich aber gerne ans Template halten.
    Code:
     if item._name == 'Neato_Robot':
    Item.yaml und Plugin.yaml als Bild angehängt.

    Vielen Dank für eure Hilfe und Grüße,
    Thomas
    You do not have permission to view this gallery.
    This gallery has 2 photos.
    Zuletzt geändert von thengsty; 19.09.2019, 15:54.
Lädt...
X