Ankündigung

Einklappen
Keine Ankündigung bisher.

Automatische Beschattung

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

  • offline
    antwortet
    Hi Onkelandy,

    so auf die Schnelle: In "eval" kommt immer Python-Coding. Du musst daher die Id des Items in Anführungszeichen schreiben.

    Grüße
    offline

    Einen Kommentar schreiben:


  • Onkelandy
    antwortet
    Danke für die Rückmeldung.. ich bekomm das mit der Suspendtime einfach nicht gebacken..
    Code:
    2016-01-02 16:12:34.915483       Problem evaluating 'autoblind_eval.insert_suspend_time(steckdosen.og.wohnen_ost.automatik.suspend)': name 'steckdosen' is not defined.
    Das Item gibt es definitiv. Wenn ich das autoblind_eval weglasse wie in deinem Code oben, gibt's ohnehin gleich ne Fehlermeldung. Wenn Ich es mit sh.ITEM() versuche, gibt's einen ValueError (Can't convert 'ValueError' object to str implicitly.). Was genau mache ich falsch?
    Eine Item Abfrage ergibt Folgendes:
    Code:
    steckdosen.og.wohnen_ost.automatik.suspend = True
    Existiert also und ist auch auf ein, wenn Suspend Mode aktiv sowie aus, wenn er deaktiviert wird. Ich habe das Item, in das die Zeit geschrieben werden soll, eine Ebene höher so definiert:
    Code:
    as_item_suspend_end = steckdosen.og.wohnen_ost.automatik.autostate_suspend_end
    Das Item gibt es auch und ist ein str.

    Kannst du schon abschätzen, wann die as_item - Sachen über die eval/item-Funktion verfügen werden ?
    Vielen Dank und einen schönen Abend noch!

    Einen Kommentar schreiben:


  • offline
    antwortet
    Guten Morgen,

    Zitat von Onkelandy Beitrag anzeigen
    Was das by_attr anlangt.... Wenn ich das Attribut mit einem item festlegen will, gibt es die Fehlermeldung, dass das Item kein bool sei. Ich schätze also, dass dieses Attribut noch nicht über item, eval, etc. gesetzt werden kann? Wollte gerade auch mal probieren, ob man nicht die ganzen Attribute im Autoblind-Item nicht doch auch per eval setzen kann. Also zB: as_item_suspend = eval:autoblind_eval.get_item("suspend", 1)
    Das würde die Sache gerade für Neulinge bzw. bei einem größeren Update Das Copy/Paste extrem erleichtern... Oder spricht da was konkret dagegen? Irgendwie gibt es die Funktionalität ja schon..
    Bei as_item_<name> kann bisher eine statische Item-Id angegeben werden. Der Datentyp AbValue, über den "eval:<funktion>" bzw "item:<itemname>" angegeben werden ist dort noch nicht berücksichtigt. Das soll aber auch noch kommen, die Funktion get_item ist ja genau für den Anwendungsfall vorgesehen. (Wobei ich da auch noch eine andere Idee habe, aber das muss ich erst mal austesten)

    Zitat von Onkelandy Beitrag anzeigen
    Aber eine generelle Verständnisfrage zu dem by_attr... Ist es nicht so, dass dann immer ALLE Steckdosen, die eben das gleiche Attribut teilen, auf den Wert gesetzt werden, unabhängig davon, in welchem Zustand sich diese befinden? Das könnte ja dazu führen, dass Items geändert werden, ohne dass sie im entsprechend passenden Zustand sind, oder nicht? Also angenommen, zwei Items sollen mit unterschiedlichen Bedingungen in einen konkreten Zustand (zB ein Licht geht bei Helligkeit <300 Lux in den "Abendmodus", wohingegen ein anderes erst bei 100 Lux in den gleichen Zustand wechselt), wird doch die Schaltaktion für die 2. Lampe schon ausgeführt, sobald die 1. Lampe im entsprechenden Zustand ist. Oder bringe ich da was durcheinander?
    Es werden immer die Steckdosen geschaltet, die sich das Attribut teilen, dass du bei as_byattr angegeben hast. Daher kannst du bei zwei Status zwei unterschiedliche Attribute verwenden und bei den Steckdosen definieren. In deinem Fall könntest du z. B. die Attribute "if_outside_lt_300lux" und "if_outside_lt_100lux" zu den Steckdosen-Items hinzufügen.
    Bei der ersten Steckdose ergänzt du ein
    Code:
    if_outside_lt_300lux = True
    Bei der zweiten Steckdose ergänzt du ein
    Code:
    if_outside_lt_100lux = True
    Im Zustand "Helligkeit < 300 Lux" setzt du die Aktion
    Code:
    as_byattr_steckdosen = if_outside_lt_300lux
    Im Zustand "Helligkeit < 100 Lux" setzt du die Aktion
    Code:
    as_byattr_steckdosen = if_outside_lt_100lux
    Für nur eine Steckdose je Zustand (wie in dem Beispiel) ist das etwas oversized, aber wenn du in diesen Zuständen weitere Objekte schalten willst, kann das einiges an Tipparbeit sparen.

    Zitat von Onkelandy Beitrag anzeigen
    Die neue Möglichkeit, das Manuell Item zu definieren, ist sehr schön. Evtl. die Attribute noch einheitlich englisch oder deutsch benennen Konnte das soeben mit etlichen Items erfolgreich testen, schön!
    Die Attribute sind einheitlich englisch benannt, nur im Post habe ich mich da wohl vertippt. Müssen die Nachwirkungen der Silvesternacht sein ... Die Attribute heißen
    • as_manual_invert
    • as_manual_include
    • as_manual_exclude


    Zitat von Onkelandy Beitrag anzeigen
    Wegen der Jalousie / Lamellenproblematik: Heißt das, wenn man das min_delta weg lässt, dürfte das Problem weniger vorkommen? Ich werde das die nächsten Tage mal testen und berichten...
    Wenn du "as_mindelta_<Aktionsname>" weglässt, sollte das das Problem beseitigen, nicht jedoch die eigentliche Ursache des Problems

    Zitat von Onkelandy Beitrag anzeigen
    Gibt es eigtl. eine Möglichkeit, die Endzeit des Suspends auszulesen? In der Doku steht was, aber mit ist nicht ganz klar, wie das mit der neuen Zustands-Lösung des Suspend-Items umgesetzt werden kann. Kann die Funktion insert_suspend_time irgendwie so eingesetzt werden, dass der Text in ein Item geschrieben wird (am liebsten in ein eigenes, unabhängig vom eigtl. Suspend-Item, um bezügl. der Bezeichnung flexibel zu bleiben..)? Hätte vermutet, ich kann zB im Suspend-Zustand einfach die Funktion per eval aufrufen, hab ich aber nicht hinbekommen. Ist jetzt nicht sonderlich wichtig, aber vielleicht gibt's da eh schon eine Lösung und ich versteh sie nur nicht.. hehe.
    Die Funktion "insert_suspend_time" ermittelt die Endezeit des Suspends. Dazu wird ein Item gebraucht, das im Suspend-Zustand auf "true" und in den anderen Zuständen auf "false" gesetzt wird. Die Funktion "insert_suspend_time" nimmt nun die definierte Suspend-Zeit, zieht davon das Alter dieses Suspend-Items ab. Dies ergibt die Restdauer des Suspends, die einfach zur aktuellen Uhrzeit addiert wird um die Endezeit zu bekommen.

    Über das Attribut "as_name" im Zustands-Item kann der Name eines Zustands, wie er in das über "as_laststate_item_name" geschrieben wird, geändert werden. Hier kann beim Suspend-Zustand die Funktion "insert_suspend_time" eingesetzt werden, um "wie früher" das Ende des Suspends anzuzeigen. Die Funktion "insert_suspend_time" braucht als ersten Parameter die Id des Items, das im Suspend-Zustand auf "true" gesetzt wird. Der zweite Parameter ist optional, hier kann der Text angegeben werden, in den die Endezeit eingesetzt wird. Standardwert für den Text ist "Ausgesetzt bis %X".

    Wenn du die Endezeit in ein anderes Item schreiben möchtest, musst du beim entsprechenden Zustand etwas wie
    Code:
    "as_set_<wasauchimmer> = eval:insert_suspend_time(my.suspend.item)
    angeben.

    Grüße
    offline

    Einen Kommentar schreiben:


  • Onkelandy
    antwortet
    Hallo zusammen!

    Danke für die Rückmeldungen und natürlich euch auch noch ein gutes Neues!!!!

    Das mit dem Taster-Status weiß ich jetzt auch nicht mehr, warum ich das so angegangen bin Die Lösung wäre ja eigtl. simpel. Wobei ich das bei anderen Tastern auch schon anders gelöst hatte. Nämlich mit einer Ausschaltlogik, die die Sekunden/Minuten aus einem Item ausliest und va. bei Ablauf der Zeit wieder das autoblind-Item triggert. Das hat also den Vorteil, dass man unabhängig vom Cycle ist.

    Was das by_attr anlangt.... Wenn ich das Attribut mit einem item festlegen will, gibt es die Fehlermeldung, dass das Item kein bool sei. Ich schätze also, dass dieses Attribut noch nicht über item, eval, etc. gesetzt werden kann? Wollte gerade auch mal probieren, ob man nicht die ganzen Attribute im Autoblind-Item nicht doch auch per eval setzen kann. Also zB: as_item_suspend = eval:autoblind_eval.get_item("suspend", 1)
    Das würde die Sache gerade für Neulinge bzw. bei einem größeren Update Das Copy/Paste extrem erleichtern... Oder spricht da was konkret dagegen? Irgendwie gibt es die Funktionalität ja schon..

    Aber eine generelle Verständnisfrage zu dem by_attr... Ist es nicht so, dass dann immer ALLE Steckdosen, die eben das gleiche Attribut teilen, auf den Wert gesetzt werden, unabhängig davon, in welchem Zustand sich diese befinden? Das könnte ja dazu führen, dass Items geändert werden, ohne dass sie im entsprechend passenden Zustand sind, oder nicht? Also angenommen, zwei Items sollen mit unterschiedlichen Bedingungen in einen konkreten Zustand (zB ein Licht geht bei Helligkeit <300 Lux in den "Abendmodus", wohingegen ein anderes erst bei 100 Lux in den gleichen Zustand wechselt), wird doch die Schaltaktion für die 2. Lampe schon ausgeführt, sobald die 1. Lampe im entsprechenden Zustand ist. Oder bringe ich da was durcheinander?

    Die neue Möglichkeit, das Manuell Item zu definieren, ist sehr schön. Evtl. die Attribute noch einheitlich englisch oder deutsch benennen Konnte das soeben mit etlichen Items erfolgreich testen, schön!

    Wegen der Jalousie / Lamellenproblematik: Heißt das, wenn man das min_delta weg lässt, dürfte das Problem weniger vorkommen? Ich werde das die nächsten Tage mal testen und berichten...

    Gibt es eigtl. eine Möglichkeit, die Endzeit des Suspends auszulesen? In der Doku steht was, aber mit ist nicht ganz klar, wie das mit der neuen Zustands-Lösung des Suspend-Items umgesetzt werden kann. Kann die Funktion insert_suspend_time irgendwie so eingesetzt werden, dass der Text in ein Item geschrieben wird (am liebsten in ein eigenes, unabhängig vom eigtl. Suspend-Item, um bezügl. der Bezeichnung flexibel zu bleiben..)? Hätte vermutet, ich kann zB im Suspend-Zustand einfach die Funktion per eval aufrufen, hab ich aber nicht hinbekommen. Ist jetzt nicht sonderlich wichtig, aber vielleicht gibt's da eh schon eine Lösung und ich versteh sie nur nicht.. hehe.

    Merci und gute Nacht!

    Einen Kommentar schreiben:


  • offline
    antwortet
    Hallo zusammen und auch von mir ein frohes neues Jahr,

    Zitat von Onkelandy Beitrag anzeigen
    Die Fehlermeldungen sind jetzt ein bisschen extrem, aber zumindest ein bisschen aussagekräftiger as_set_schalten = item:steckdosen.autoblind.settings.statusA.Steckdo seX Sobald ein Item, das für eine Condition gebraucht wird, fehlt, geht die Post ab - gerade, wenn mehrere Items auf den Status verweisen

    Ich hatte wohl zum Debuggen ein paar Items zu viel deaktiviert.. jetzt klappt alles.
    ich habe im letzten Jahr am Logging noch etwas gebaut und auch den Aufbau eines "Manuell"-Items noch weiter vereinfacht. Push auf GitHub ist gerade erfolgt. Das Logging sollte nun nicht mehr ganz so extrem sein, wie von Onkelandy beschrieben, aber es kann durchaus vorkommen dass ein einzelnes fehlendes Item mehrfach gemeldet wird, wenn es z. B. von mehreren Zustände/Aktionen verwendet wird.

    Für das Manuell-Item muss man nun nicht mehr von Hand ein eval-Bedingung bauen, das Plugin prüft, ob Items bestimmte Attribute haben und fügt dann solchen Items automatisch eine passende Eval-Bedingung ein.
    Bei
    Code:
    as_manual_invert = <Beliebiger Wert>
    überschreibt das Plugin eine eventuell vorhandene Eval-Bedingung mit "not sh.<Item-Id>()". Gut, das könnte man auch problemlos noch von Hand machen. Interessant wird es, wenn bestimmte Caller/Sources ignoriert werden sollen bzw. nur auf bestimmte Caller/Sources gehört werden soll. Für diesen Fall können die Attribute
    Code:
    as_manuell_exclude = <caller1>:<source1> | <caller2>:<source2> | ... | <callerN>:<sourceN>
    bzw.
    Code:
    as_manuell_include = <caller1>:<source1> | <caller2>:<source2> | ... | <callerN>:<sourceN>
    verwendet werden. Auch hier wird im wesentlichen die eval-Bedingung des Items mit einem Funktionsaufruf auf eine Prüfunktion des AutoBlind-Plugins überschrieben. Die Prüffunktion prüft dann wie die Funktionen "is_called_by" bzw. "not_called_by" den ursprünglichen Caller/die ursprüngliche Source. Man spart sich hier, selbst eine komplexe eval-Bedingung bauen zu müssen.

    Zitat von Onkelandy Beitrag anzeigen
    Ich hab jetzt noch ne Frage.. und zwar möchte ich zB einen Zustand definieren, der konkret von einem Taster abhängt. Ist der Taster aktiv, soll ein Licht in einer bestimmten Stärke für eine bestimmte Maximalzeit eingeschaltet werden. Wird der Taster vor Ablauf der Zeit wieder deaktiviert, soll sich das Licht den nächstbesten Zustand suchen.
    Ich denke, so komplex brauchst du das garnicht. Du baust einen Zustand, der als Enter-Bedingung folgendes enthält:
    Code:
    as_value_Taster = True
    as_maxage_Taster = (Zeit, die das Licht eingeschaltet sein soll)
    Den Zustand baust du weit oben bei den Zuständen ein, als Aktion schaltest du das Licht ein, gibt die Helligkeit mit, etc.
    Bei den anderen Zuständen ergänzt du
    Code:
    as_set_Taster = False
    und ergänzt eine Aktion, die das Licht ausschaltet. Das dürfte es dann auch schon gewesen sein.

    Zitat von Onkelandy Beitrag anzeigen
    Eine weitere Frage/Idee... wie konfiguriert man das Ganze eigtl. am besten, wenn man den Wert, der gesetzt werden soll, über ein entsprechendes Item definieren möchte? Also konkret z.B. folgende Autoblindkonfiguration: (...)
    Ich glaube, das ist ein Fall für as_byattr_<Name>. Du ergänzt bei allen Steckdosen für jeden Zustand den du hast jeweils ein Attribut z. B. "Steckdosen_StatusA", ""Steckdosen_StatusB", ""Steckdosen_StatusC", .... Der Wert dieses Attribut ist der Wert, den das Item im jeweiligen Zustand haben soll.

    z. B.
    Code:
    [steckdosen]
        [[eins]]
            type = bool
            Steckdose_StatusA = True
            Steckdose_StatusB = False
            Steckdose StatusC = True
        [[zwei]]
            type = bool
            Steckdose_StatusA = False
            Steckdose_StatusB = False
            Steckdose StatusC = True
        [[drei]]
            type = bool
            Steckdose_StatusA = True
            Steckdose_StatusB = True
            Steckdose StatusC = False
        
    
        [[rules]]
            as_plugin = active        
            .....
        [[[[Status A]]]]
            ...
            as_byattr_steckdosen = Steckdose_StatusA
        [[[[Status B]]]]
            ...
            as_byattr_steckdosen = Steckdose_StatusB
        [[[[Status C]]]]
            ...
            as_byattr_steckdosen = Steckdose_StatusC
    Wenn nun z. B. der Zustand B aktiv wird, werden alle Items, die das Attribut "Steckdose_StatusB" haben, auf den Wert gesetzt, den dieses Attribut beim jeweiligen Item hat.

    Zitat von Onkelandy Beitrag anzeigen
    Und noch eine letzte Frage.. hat nie jemand Probleme mit dem Stellen der Lamellen nach dem Anfahren einer Jalousieposition? Ich habe meinen Aktor so eingestellt, dass nach dem Anfahren einer Position die Lamellen verstellt werden. Das scheint mit generell auch sinnvoll. Aber ab und an passiert es doch, dass Autoblind zwar die Lamellen auf 100 stellen sollte, komischerweise die Lamellen aber aufgeklappt, also auf Wert 0 gestellt werden.
    Das habe ich auch manchmal. Im Log habe ich gesehen, dass die tatsächliche Lamellenposition in diesem Fall nicht mit dem Wert des Lamellenpositionsitem übereinstimmt. Die Lamellenposition ist beispielsweise 0, das Item hat aber immer noch den Wert 100. Wenn dann ein "Mindelta" angegeben ist, dann führt das dazu, dass das Plugin keinen neuen Lamellenwert sendet, da er ja lt. dem Item bereits stimmt. DIe Ursache des Problems liegt daher (zumindest bei mir) daran, dass die Rückmeldung der Lamellenposition nicht in smarthome.py angekommt. Die Ursache kenne ich allerdings (noch) nicht.

    Zitat von mumpf Beitrag anzeigen
    Ich mach mich vielleicht unbeliebt, aber "leave" finde ich ähnlich "schlimm" wie das alte suspend und lock: Man wird auf einem Zustand festgehalten und kommt nicht raus, selbst wenn ein "wichtigerer" Zustand eigentlich was tun sollte. Kann man nur lösen, wenn man dann in alle untergeordneten "leave" weitere "leave"-Bedingungen zufügt. Insofern bin ich nicht dafür, dass noch mehr Funktionalität ins leave gesteckt wird. Du kannst ein leave auch durch ein enter mit der negativen leave-Bedingung und as_value_laststate = "aktueller Zustand" abbilden... oder als Folgezustand, bei dem Du mit as_set wieder alles setzen kannst. Das ist ungefähr Dein "entsperren" Ansatz, der meiner Meinung nach flexibler als ein leave ist!
    Auf jeden Fall muss man sich ganz genau überlegen, inwieweit man Leave-Bedingungsgruppen noch nutzt, wenn man Lock bzw. Suspend über Items nutzt, denn solange keine der Leave-Bedingungsgruppen eines Items erfüllt ist, kommt man auch in kein Lock bzw. Suspend rein. Ich bin wie gesagt dabei, die Beispiele in der Doku zu überarbeiten. Dort werde ich das auch entsprechend umbauen.

    Grüße
    offline

    Einen Kommentar schreiben:


  • mumpf
    antwortet
    Hi und ein frohes neues Jahr!

    Zitat von Onkelandy Beitrag anzeigen
    Die Funktionsweise mit den Lock und Suspend Stati ist absolut genial, danke hier va. an mumpf. Der Umbau nimmt ein bisschen Zeit in Anspruch, erfüllt aber nun alle Wünsche.
    Vielen Dank für die namentliche Erwähnung, aber der Dank gebührt ganz klar offline, der eine Idee ganz toll umgesetzt hat. Ich habe ja sowieso schon vorher versucht, lock und suspend über Zustände abzubilden (allerdings mit einigen Hilfsitems), jetzt geht es wahrscheinlich wesentlich komfortabler - leider kann ich nicht testen, bin im Urlaub...

    Zitat von Onkelandy Beitrag anzeigen
    Ich hab jetzt noch ne Frage.. und zwar möchte ich zB einen Zustand definieren, der konkret von einem Taster abhängt. Ist der Taster aktiv, soll ein Licht in einer bestimmten Stärke für eine bestimmte Maximalzeit eingeschaltet werden. Wird der Taster vor Ablauf der Zeit wieder deaktiviert, soll sich das Licht den nächstbesten Zustand suchen.
    Ich habe das ziemlich kompliziert gelöst, und zwar mit einem zusätzlichen entsperren-Item und Zustand. Wird das Item gesetzt, wird Autoblind für das Licht nochmals durchlaufen, damit ein neuer Zustand gesucht werden kann.
    Vielleicht übersehe ich ja etwas, aber Dein "Taster"-Zustand hängt doch nur vom Taster und vom Alter des Zustandes ab. Warum dann ein entsperren? Sobald der Taster aus ist bzw. das Alter abläuft, wird doch sowieso ein neuer Zustand gesucht. Oder ist es nur, um den Status des Tasters zu aktualisieren? Das passiert doch wahrscheinlich direkt über den Aktorstatus, oder? Aber wahrscheinlich sehe ich irgendwas nicht...

    Zitat von Onkelandy Beitrag anzeigen
    Cool wäre, wenn man beim Leave noch Items ändern könnte...
    Ich mach mich vielleicht unbeliebt, aber "leave" finde ich ähnlich "schlimm" wie das alte suspend und lock: Man wird auf einem Zustand festgehalten und kommt nicht raus, selbst wenn ein "wichtigerer" Zustand eigentlich was tun sollte. Kann man nur lösen, wenn man dann in alle untergeordneten "leave" weitere "leave"-Bedingungen zufügt. Insofern bin ich nicht dafür, dass noch mehr Funktionalität ins leave gesteckt wird. Du kannst ein leave auch durch ein enter mit der negativen leave-Bedingung und as_value_laststate = "aktueller Zustand" abbilden... oder als Folgezustand, bei dem Du mit as_set wieder alles setzen kannst. Das ist ungefähr Dein "entsperren" Ansatz, der meiner Meinung nach flexibler als ein leave ist!

    Zitat von Onkelandy Beitrag anzeigen
    Es geht um die rote Zeile.. ist das derzeit schon irgendwie möglich? Aktuell löse ich das durch die blau eingezeichneten Einträge.. Das ist aber halt bei vielen Items bezüglich Copy/Paste nicht wirklich so angenehm, da es immer wieder angepasst werden muss.
    Ich hab mir für solche Sachen einen Generator gebastelt, der relative Adressierung unterstützt und somit (bei geeigneter Item-Struktur) solche Sachen komfortabel abdeckt... Ist aber Windows only.
    Ich weiß nicht, ob es autoblind gut tut, noch eine weitere Metasprache da reinzubringen, ist jetzt schon recht komplex, aber offline hat da immer gute ideen...

    Gruß, Waldemar

    Einen Kommentar schreiben:


  • Onkelandy
    antwortet


    Hi Offline!

    Vielen Dank für das Posting und das Update. Die Fehlermeldungen sind jetzt ein bisschen extrem, aber zumindest ein bisschen aussagekräftiger as_set_schalten = item:steckdosen.autoblind.settings.statusA.Steckdo seX Sobald ein Item, das für eine Condition gebraucht wird, fehlt, geht die Post ab - gerade, wenn mehrere Items auf den Status verweisen

    Ich hatte wohl zum Debuggen ein paar Items zu viel deaktiviert.. jetzt klappt alles.

    Die Funktionsweise mit den Lock und Suspend Stati ist absolut genial, danke hier va. an mumpf . Der Umbau nimmt ein bisschen Zeit in Anspruch, erfüllt aber nun alle Wünsche.

    Ich hab jetzt noch ne Frage.. und zwar möchte ich zB einen Zustand definieren, der konkret von einem Taster abhängt. Ist der Taster aktiv, soll ein Licht in einer bestimmten Stärke für eine bestimmte Maximalzeit eingeschaltet werden. Wird der Taster vor Ablauf der Zeit wieder deaktiviert, soll sich das Licht den nächstbesten Zustand suchen.

    Ich habe das ziemlich kompliziert gelöst, und zwar mit einem zusätzlichen entsperren-Item und Zustand. Wird das Item gesetzt, wird Autoblind für das Licht nochmals durchlaufen, damit ein neuer Zustand gesucht werden kann. Irgendwie scheint mir mein Ansatz komisch, gäbe es da nicht ne andere Variante? Cool wäre, wenn man beim Leave noch Items ändern könnte, hehe Aber vielleicht gibt es ja auch so schon einen besseren Ansatz.
    Code:
                [[autoblind]]
                [[[Taster]]]
                    type = foo
                    name = Manuell
                    enforce_updates = false  
                    as_set_sollwert = value:240
                    as_set_sperren = value:1            
                    [[[[enter]]]]    
                        type = foo
                        as_value_Taster = 1
                        as_agemax_Taster = item:autoblind.settings.light.suspend.bad_spiegel                    
                [[[entsperren]]]
                    type = foo
                    name = Manuell entsperren
                    enforce_updates = false  
                    as_set_sperren = value:0                  
                    as_set_Taster = value:0
                    as_set_entsperren = value:1
                    as_delay_entsperren = 1
                    [[[[enter]]]]    
                        type = foo
                        as_value_laststate = bad.spiegel.manuell
    Eine weitere Frage/Idee... wie konfiguriert man das Ganze eigtl. am besten, wenn man den Wert, der gesetzt werden soll, über ein entsprechendes Item definieren möchte? Also konkret z.B. folgende Autoblindkonfiguration:

    Code:
    [steckdosen]
        [[autoblind]]
            [[[settings]]]
                [[[[ status A ]]]]
                    [[[[[Steckdose X]]]]]
                        type = num
                        visu_acl = rw
                    [[[[[Steckdose Y]]]]]
                        type = num
                        visu_acl = rw
    
                [[[[ status B ]]]]
                    [[[[[Steckdose X]]]]]
                        type = num
                        visu_acl = rw
                    [[[[[Steckdose Y]]]]]
                        type = num
                        visu_acl = rw
    
            [[[default]]]
                [[[[ status A ]]]]
                    name = Status A
    [COLOR=#FF0000][B]                as_set_schalten = eval:steckdosen.autoblind.settings.status A.{ITEM} [/B][/COLOR]
                    [[[[['enter']]]]]
                        type = foo
                        .....
    Und hier die Items, die auf den entsprechend in settings definierten Wert geschalten werden soll:
    Code:
    [steckdosen]
        [[Steckdose X]]
            as_plugin = active
            as_item_schalten = steckdosen.Steckdose X.SA
            .....
            [[[rules]]]
               [[[[Status A]]]]
               as_use = steckdosen.autoblind.default.status A
               [COLOR=#0000FF][B]as_set_schalten = item:steckdosen.autoblind.settings.statusA.SteckdoseX[/B][/COLOR]
               [[[[Status B]]]]
               as_use = steckdosen.autoblind.default.status B
               [COLOR=#0000FF][B]as_set_schalten = item:steckdosen.autoblind.settings.statusB.SteckdoseX[/B][/COLOR]
            [[[SA]]]
               knx_send blabla....
    
        [[Steckdose Y]]
            as_plugin = active
            as_item_schalten = steckdosen.Steckdose Y.SA
            .....
            [[[rules]]]
               [[[[Status A]]]]
               as_use = steckdosen.autoblind.default.status A
               [COLOR=#0000FF][B]as_set_schalten = item:steckdosen.autoblind.settings.statusA.SteckdoseY[/B][/COLOR]
               [[[[Status B]]]]
               as_use = steckdosen.autoblind.default.status B
               [COLOR=#0000FF][B]as_set_schalten = item:steckdosen.autoblind.settings.statusB.SteckdoseY[/B][/COLOR]
            [[[SA]]]
               knx_send blabla....
    Es geht um die rote Zeile.. ist das derzeit schon irgendwie möglich? Aktuell löse ich das durch die blau eingezeichneten Einträge.. Das ist aber halt bei vielen Items bezüglich Copy/Paste nicht wirklich so angenehm, da es immer wieder angepasst werden muss.


    Und noch eine letzte Frage.. hat nie jemand Probleme mit dem Stellen der Lamellen nach dem Anfahren einer Jalousieposition? Ich habe meinen Aktor so eingestellt, dass nach dem Anfahren einer Position die Lamellen verstellt werden. Das scheint mit generell auch sinnvoll. Aber ab und an passiert es doch, dass Autoblind zwar die Lamellen auf 100 stellen sollte, komischerweise die Lamellen aber aufgeklappt, also auf Wert 0 gestellt werden.
    Zuletzt geändert von Onkelandy; 01.01.2016, 13:32.

    Einen Kommentar schreiben:


  • offline
    antwortet
    Hi Onkelandy

    die Fehlermeldung ist leider an ganz zentraler Stelle, so das man nicht erkennen kann, wo sie herkommt. Ich habe die Fehler-Routinen mal etwas "gesprächiger" gemacht. Die Änderung ist in den Develop-Zweig gepusht. Mit dieser Änderung sollte das Plugin genauer sagen, wo das Problem herkommt.

    Das last_state_name und .._id nun als Status ausgewertet werden, liegt an einer der Änderungen, die ich gemacht habe. Früher lagen alle Items unterhalb des Objekt-Items und hatten statische Namen. Nachdem die Items über entsprechende Attribute beliebig angegeben werden konnten hatte ich zur Kompatibilität mit den alten Einstellungen diese Items bei den Zuständen herausgefiltert. Dieses Kompatibilitäts-Coding ist mir bei den Änderungen der letzten Tage in die Finger gefallen und ich habe es ersatzlos gelöscht, weil ich nicht damit gerechnet habe, das noch jemand so eine Konstruktion nutzt.

    Hier mal der aktuelle Stand des Beispiels, das ich für die Überarbeitung der Doku vorbereite, das sollte so ziemlich komplett sein:

    Defaults:
    Code:
    [abplugin]
        [[trigger]]
            [[[raffstore]]]
                type = bool
                enforce_updates = yes
                cycle = 300 = 1
                
        [[default]]    
            [[[raffstore]]]
                as_item_brightness = beispiel.wetterstation.helligkeit
                as_item_temperature = beispiel.wetterstation.temperatur
                as_mindelta_hoehe = 10
                as_mindelta_lamelle = 5
    
                [[[[Lock]]]]
                    type = foo
                    name = Manuell gesperrt
                    as_set_suspend = False
                    [[[[[enter]]]]]
                        as_value_lock = True
                [[[[Suspend]]]]
                    type = foo
                    name = Ausgesetzt
                    as_set_suspend = True
                    [[[[[enter_manuell]]]]]
                        as_value_trigger_source = eval:    autoblind_eval.get_item("manuell",1)
                    [[[[[enter_stay]]]]]
                        as_value_laststate = var:current.state_id
                        as_agemax_manuell = var:item.suspend_time
                        as_value_suspend = True
                [[[[Nacht]]]]
                    type = foo
                    name = Nacht
                    as_set_hoehe = value:100
                    as_set_lamelle = value:0
                    as_set_suspend = False
                    [[[[[enter]]]]]
                        as_min_time = 08:00
                        as_max_time = 16:00
                        as_negate_time = True
                        as_max_brightness = 90
    
                [[[[Morgens]]]]
                    type = foo
                    name = Dämmerung Morgens
                    as_set_hoehe = value:100
                    as_set_lamelle = value:25
                    as_set_suspend = False
                    [[[[[enter]]]]]
                        as_min_brightness = 90
                        as_max_brightness = 330
                        as_min_time = 00:00
                        as_max_time = 12:00
    
                [[[[Abends]]]]
                    type = foo
                    name = Dämmerung Abends
                    as_set_hoehe = value:100
                    as_set_lamelle = value:75
                    as_set_suspend = False
                    [[[[[enter]]]]]
                        as_min_brightness = 90
                        as_max_brightness = 330
                        as_min_time = 12:00
                        as_max_time = 23:59
    
                [[[[Nachfuehren_Seite_Eins]]]]
                    type = foo
                    name = Tag (nachführen)
                    as_set_hoehe = value:100
                    as_set_lamelle = eval:autoblind_eval.sun_tracking()
                    as_set_suspend = False
                    [[[[[enter]]]]]
                        as_min_brightness = 43000
                        as_min_sun_altitude = 18
                        as_min_sun_azimut = 130
                        as_max_sun_azimut = 270
                        as_min_temperature = 22
                    [[[[[leave_todark]]]]]
                        as_max_brightness = 30000
                        as_min_delay = 1200
                    [[[[[leave_sun_azimut]]]]]
                        as_min_sun_azimut = 130
                        as_max_sun_azimut = 270
                        as_negate_sun_azimut = True
                    [[[[[leave_sun_altitude]]]]]
                        as_max_sun_altitude = 17
                        
                [[[[Tag]]]]
                    type = foo
                    name = Tag (statisch)
                    as_set_hoehe = value:0
                    as_set_lamelle = value:100
                    as_set_suspend = False
                    [[[[[enter]]]]]
                        as_min_time = 06:30
                        as_max_time = 21:30
                        as_min_brightness = 220
    Item:
    Code:
    [beispiel]
        [[raffstore]]
            [[[eins]]]
                name = Raffstore Beispiel Eins
                [[[[aufab]]]]
                    type = bool
                    visu_acl = rw
                    enforce_updates = on
                [[[[step]]]]
                    type = bool
                    visu_acl = rw
                    enforce_updates = on
                [[[[hoehe]]]]
                    type = num
                    cache = on
                    visu_acl = rw
                [[[[lamelle]]]]
                    type = num
                    cache = on
                    visu_acl = rw
                [[[[komfortsperren]]]]
                    type = bool
                    cache = on
                    visu_acl = rw
                    enforce_updates = on
                [[[[automatik]]]]
                    [[[[[lock]]]]]
                        type = bool
                        visu_acl = rw
                        cache = on
                        enforce_updates = yes
                    [[[[[suspend]]]]]
                        type = bool
                        visu_acl = r
                    [[[[[state_id]]]]]
                        type = str
                        visu_acl = r
                        cache = on
                    [[[[[state_name]]]]]
                        type = str
                        visu_acl = r
                        cache = on
                    [[[[[manuell]]]]]
                        type = bool
                        name = Manuelle Bedienung
                        eval = not sh.beispiel.raffstore.eins.automatik.manuell() if sh.autoblind.not_changed_by(caller, source, ["Init:*", "KNX:y.y.y"]) else sh.beispiel.raffstore.eins.automatik.manuell()
                        eval_trigger = beispiel.raffstore.gesamt.aufab | beispiel.raffstore.gesamt.step | beispiel.raffstore.eins.aufab | beispiel.raffstore.eins.step | beispiel.raffstore.eins.hoehe | beispiel.raffstore.eins.lamelle
                    [[[[[rules]]]]]
                        type = bool
                        as_plugin = active
                        eval_trigger = abplugin.trigger.raffstore | beispiel.steckdosen | beispiel.licht.decke | beispiel.raffstore.eins.automatik.manuell | beispiel.raffstore.eins.automatik.lock | beispiel.raffstore.eins.automatik.suspend
                        as_laststate_item_id = beispiel.raffstore.eins.automatik.state_id
                        as_laststate_item_name = beispiel.raffstore.eins.automatik.state_name
                        as_item_anwesend = beispiel.steckdosen
                        as_item_hoehe = beispiel.raffstore.eins.hoehe
                        as_item_lamelle = beispiel.raffstore.eins.lamelle
                        as_item_manuell = beispiel.raffstore.eins.automatik.manuell
                        as_item_lock = beispiel.raffstore.eins.automatik.lock
                        as_item_suspend = beispiel.raffstore.eins.automatik.suspend
                        [[[[[[Lock]]]]]]
                            as_use = abplugin.default.raffstore.Lock
                        [[[[[[Suspend]]]]]]
                            as_name = eval:autoblind_eval.get_suspend_text("beispiel.raffstore.eins.automatik.suspend")
                            as_use = abplugin.default.raffstore.Suspend
                        [[[[[[Nacht]]]]]]
                            as_use = abplugin.default.raffstore.Nacht
                        [[[[[[Morgens]]]]]]
                            as_use = abplugin.default.raffstore.Morgens
                        [[[[[[Abends]]]]]]
                            as_use = abplugin.default.raffstore.Abends
                        [[[[[[Nachfuehren]]]]]]
                            as_use = abplugin.default.raffstore.Nachfuehren_Seite_Eins
                            [[[[[[[enter_anwesend]]]]]]]
                                as_min_sun_altitude = 20
                                as_min_sun_azimut = 130
                                as_max_sun_azimut = 240
                                as_min_brightness = 30000
                                as_value_anwesend = True
                            [[[[[[[leave_anwesend]]]]]]]
                                as_max_brightness = 15000
                                as_value_anwesend = True
                                as_min_delay = 1200
                            [[[[[[[leave_todark]]]]]]]
                                as_value_anwesend = False
                            [[[[[[[leave_sun_azimut]]]]]]]
                                as_min_sun_azimut = 130
                                as_max_sun_azimut = 240
                                as_negate_sun_azimit = True
                        [[[[[[Tag]]]]]]
                            as_use = abplugin.default.raffstore.Tag

    Grüße
    offline

    Einen Kommentar schreiben:


  • Onkelandy
    antwortet
    Möchte gerade das neueste Update aus Github testen.. jetzt geht's aber grad ziemlich rund. Es wird fast kein Autoblind Item mehr erkannt, nach dem Initialisieren ist aus....
    Code:
    2015-12-30 10:46:21,495 ERROR    autoblind    Item jalousien.eg.bad.automatik.autoblind not found! -- __init__.py:run:98
    Das betrifft einige "äleteren" Items, die nicht exakt so aufgebaut sind wie dein obiges Beispiel, aber vor dem letzten Update noch problemlos funktioniert haben.. Die angesprochenen Items gibt es auch effektiv. Komischerweise habe ich nach mehreren Restarts nur noch vereinzelt das Problem.. z.B. bei diesem Item:
    Code:
    2015-12-30 12:32:24,817 ERROR    autoblind    Item jalousien.suspendoff not found! -- __init__.py:run:98
    Und das ist das Item, das bisher eigtl. funktioniert hat:
    Code:
    ['jalousien']
    type = foo    
        [['automatik_lock']]
        type = bool
        visu_acl = rw
        enforce_updates = no
        knx_dpt = 1
        cache = True
        knx_send = 4/5/0
            [[['zeitschalter']]]
                type = dict
                uzsu_item = jalousien.automatik_lock
                cache = True
                visu_acl = rw
    
        [['suspendoff']]
        type = foo
        visu_acl = r
        enforce_updates = true
        cache = True
    
        as_plugin = active
        name='Nachtmodus Jalousie'
        as_lock_item =  jalousien.suspendoff.autostate_lock
        as_laststate_item_id = jalousien.suspendoff.autostate_id
        as_laststate_item_name = jalousien.suspendoff.autostate_name
        as_item_autolock = jalousien.automatik_lock
        as_item_j1 = eltern.j01.autostate_lock                
        as_item_j2 = kind.j02.autostate_lock
        as_item_j3 = buero.j03.autostate_lock
        as_item_j4 = eg.bad.autostate_lock
        as_item_j5 = osten.j5_wohnen.autostate_lock
        as_item_j6 = osten.j6_stiegenhaus.autostate_lock
        as_item_j7 = sueden.j7_stiegenhaus.autostate_lock
        as_item_j8 = sueden.j8_schiebetuere.autostate_lock
        as_item_j9 = sueden.j9_schiebefixteil.autostate_lock
        as_item_j10 = westen.j10_fluegel.autostate_lock
        as_item_j11 = westen.j11_essen.autostate_lock
        as_item_j12 = westen.j12_kueche.autostate_lock
        as_item_suspendoff = autoblind.jalousie_suspendoff
        #as_repeat_actions = False
        eval_trigger=jalousien.automatik_lock | autoblind.jalousietrigger | autoblind.jalousie_suspendoff
                [[[manuell]]]
                    type = foo
                    enforce_updates = true
                    as_set_j1 = item:eltern.j01.autostate_lock                
                    as_set_j2 = item:kind.j02.autostate_lock
                    as_set_j3 = item:buero.j03.autostate_lock
                    as_set_j4 = item:eg.bad.autostate_lock
                    as_set_j5 = item:osten.j5_wohnen.autostate_lock
                    as_set_j6 = item:osten.j6_stiegenhaus.autostate_lock
                    as_set_j7 = item:sueden.j7_stiegenhaus.autostate_lock
                    as_set_j8 = item:sueden.j8_schiebetuere.autostate_lock
                    as_set_j9 = item:sueden.j9_schiebefixteil.autostate_lock
                    as_set_j10 = item:westen.j10_fluegel.autostate_lock
                    as_set_j11 = item:westen.j11_essen.autostate_lock
                    as_set_j12 = item:westen.j12_kueche.autostate_lock
                    [[[[enter]]]]
                        type = foo
                        as_value_suspendoff = 1
                [[[night]]]
                    type = foo
                    as_use = autoblind.default.night
                    enforce_updates = true
                    #as_set_autolock = value:0
                    #as_set_suspendoff = byattr:jalousie_lock_off
                    as_set_j1 = item:eltern.j01.autostate_lock                
                    as_set_j2 = item:kind.j02.autostate_lock
                    as_set_j3 = item:buero.j03.autostate_lock
                    as_set_j4 = item:eg.bad.autostate_lock
                    as_set_j5 = item:osten.j5_wohnen.autostate_lock
                    as_set_j6 = item:osten.j6_stiegenhaus.autostate_lock
                    as_set_j7 = item:sueden.j7_stiegenhaus.autostate_lock
                    as_set_j8 = item:sueden.j8_schiebetuere.autostate_lock
                    as_set_j9 = item:sueden.j9_schiebefixteil.autostate_lock
                    as_set_j10 = item:westen.j10_fluegel.autostate_lock
                    as_set_j11 = item:westen.j11_essen.autostate_lock
                    as_set_j12 = item:westen.j12_kueche.autostate_lock
                [[[day]]]
                    type = foo
                    as_use = autoblind.default.day
                    enforce_updates = true
                [[[autostate_lock]]]
                    type = bool
                    visu_acl = rw
                    cache = on
                    knx_dpt = 1
                    knx_cache = 4/5/0
                    enforce_updates = true
                [[[autostate_id]]]
                    type = str
                    visu_acl = r
                    cache = on
                [[[autostate_name]]]
                    type = str
                    visu_acl = r
    Ich würde tendenziell auch das lock_item und suspend_item ganz aufgeben und dein obiges Beispiel mit dem Manuell ins Wiki nehmen, damit Lock und Suspend als Stati abgebildet sind. Was mir auch noch nicht klar ist: das last_state_name und id Item wurden früher wohl ausgefiltert. Aktuell werden sie als Stati heran gezogen, wenn sie sich im autoblind-Item befinden. War das Absicht? Kannst du vielleicht mal ein aktuelles komplettes Item mit allen Angaben posten?
    Zuletzt geändert von Onkelandy; 30.12.2015, 12:34.

    Einen Kommentar schreiben:


  • offline
    antwortet
    Hallo zusammen,

    eine Rohfassung der neuen deutschen Doku steht im Wiki auf GitHub

    Grüße
    offline
    smarthome.plugin.autoblind - Automatic Object Control Plugin for smarthome.py (finite state machine)

    Einen Kommentar schreiben:


  • offline
    antwortet
    Hallo zusammen,

    ich habe herausgefunden, dass es eine Möglichkeit gibt, die Funktionen "is_changed_by" bzw. "not_changed_by" zu verwenden, ohne die Methode "return_plugin" in smarthome.py zu ergänzen.

    Voraussetzung: Man hat kein Item "[autoblind]".

    In diesem Fall ist sh.autoblind die Instanz des Autoblind-Plugins. Man kann dann statt
    Code:
    sh.return_plugin("AutoBlind")
    einfach
    Code:
     sh.autoblind
    verwenden.

    ivande kann beispielsweise dann schreiben:
    Code:
    eval = not sh.Eg.Kueche.Jalousie.Tuer.Manuell_Position() if sh.autoblind.is_changed_by(caller , source, ["Visu:*"]) else sh.Eg.Kueche.Jalousie.Tuer.Manuell_Position()
    Grüße
    offline

    Einen Kommentar schreiben:


  • offline
    antwortet
    Hi @onkelandy,

    Zitat von Onkelandy Beitrag anzeigen
    Problem 1: suspend_time über ein item scheint irgendwie doch nicht zu gehen. Hab den aktuellen develop Zweig gezogen, aber habe folgendes Verhalten...
    agemax from variable: item.suspend_time müsste doch bewirken, dass der Wert, der beim Item als "as_suspend_time" hinterlegt ist, genommen wird, ja? Theoretisch müsste ich dort ja auch ein Item statt eines Wertes definieren können, ja?
    Also as_suspend_time = item:autoblind.settings.suspend.bad
    Das liegt daran, dass ich nach dem Umstellen von as_suspend_time auf den Datentyp AbValue (mit dem "item: ..." funktioniert) nicht daran gedacht habe, dass die Variable dann ja nicht nur beim Initialisieren, sondern auch vor jedem Update aktualisiert werden muss.

    Zitat von Onkelandy Beitrag anzeigen
    Problem 2: Kann es sein, dass man beim Manuell Objekt auf jeden Fall auch noch KNX:0.0.0 blockieren muss, bzw. die Adresse, über die Smarthome.py kommuniziert? Bei mir ist es nämlich so, dass wohl beim Triggern des Jalousieobjekt-Triggers offenbar auch Lamelle und Höhe geändert werden: knx: 0.0.0 set 2/0/35 to 100

    Und dann heißt es im Log: jalousien.eg.bad.automatik.manuell Item jalousien.eg.bad.automatik.manuell = True via Eval jalousien.eg.bad.hoehe None
    Das liegt vermutlich daran, dass nach einer Änderung in der update-Routine Aktionen, die vom Plugin ausgelöst wurden, nicht mehr ignoriert wurden.

    Ich habe gerade meine letzten Korrekturen auf GitHub gepusht, damit könnten deine Probleme beide behoben sein.

    Grüße
    offline

    P.S. Ich kämpfe mich gerade durch die Aktualisierung der Doku. Die deutsche Doku wird vermutlich noch dieses Jahr fertig

    Einen Kommentar schreiben:


  • offline
    antwortet
    Hallo Ivan,

    Zitat von ivande Beitrag anzeigen
    "WARNING Eg.Kueche.Jalousie.Tuer.Manuell_Position Item Eg.Kueche.Jalousie.Tuer.Manuell_Position: problem evaluating not sh.Eg.Kueche.Jalousie.Tuer.Manuell_Position() if sh.return_plugin("AutoBlind").is_changed_by(caller , source, ["Visu:*"]) else sh.Eg.Kueche.Jalousie.Tuer.Manuell_Position(): 'SmartHome' object has no attribute 'return_plugin' -- item.py:__run_eval:341
    "
    Die Methode "return_plugin" ist noch nicht standardmäßig in smarthome.py enthalten. Ich habe diesbezüglich den Pull-Request 181 eröffnet. Wenn du "return_plugin" nutzen willst, musst du die Änderungen aus dem Pull-Request noch in deine Version von smarthome.py übernehmen. Mir ist leider keine bessere Variante bekannt, um auf eine Funktion eines Plugins zuzugreifen.

    Grüße
    offline

    EDIT: gerade gesehen, dass Onkelandy das auch schon geantwortet hat. Kleine Korrektur dazu aber: Die zu ändernde Datei ist bin/smarthome.py (nicht lib/smarthome.py)
    Zuletzt geändert von offline; 30.12.2015, 04:23.

    Einen Kommentar schreiben:


  • Onkelandy
    antwortet
    Hi nochmals!
    Danke, offline für die Infos und va. das Setup. Ich habe noch ein kleines Problem mit dem Suspend Item...
    Problem 1: suspend_time über ein item scheint irgendwie doch nicht zu gehen. Hab den aktuellen develop Zweig gezogen, aber habe folgendes Verhalten...
    agemax from variable: item.suspend_time müsste doch bewirken, dass der Wert, der beim Item als "as_suspend_time" hinterlegt ist, genommen wird, ja? Theoretisch müsste ich dort ja auch ein Item statt eines Wertes definieren können, ja?
    Also as_suspend_time = item:autoblind.settings.suspend.bad

    Ich setze jetzt das Item in der CLI, der Wert wird auch so gespeichter (also ls funzt) up autoblind.settings.suspend.bad = 60
    Im Log steht aber als Max Wert immer 0 dort. Der Wert, der wohl beim Start von Smarthome.py im Item eingetragen war. Sollte der Wert nicht aktualisiert werden?
    Code:
    Age of 'manuell': min=None max=0 negate=None current=0.949329
    2015-12-30 02:18:01.866784                       to old -> not matching
    Problem 2: Kann es sein, dass man beim Manuell Objekt auf jeden Fall auch noch KNX:0.0.0 blockieren muss, bzw. die Adresse, über die Smarthome.py kommuniziert? Bei mir ist es nämlich so, dass wohl beim Triggern des Jalousieobjekt-Triggers offenbar auch Lamelle und Höhe geändert werden: knx: 0.0.0 set 2/0/35 to 100

    Und dann heißt es im Log: jalousien.eg.bad.automatik.manuell Item jalousien.eg.bad.automatik.manuell = True via Eval jalousien.eg.bad.hoehe None

    Danke für die Unterstützung.. langsam wird's bei mir

    ivande :
    Du musst noch folgende Zeilen in lib/smarthome.py ab Zeile 440 einfügen:
    Code:
         def return_plugin(self, name):
            for plugin in self._plugins:
                if plugin.__class__.__name__ == name:
                    return plugin
            return None

    Einen Kommentar schreiben:


  • ivande
    antwortet
    Hallo offline,

    ich hab versucht das Manuel Item umzusetzen.

    "WARNING Eg.Kueche.Jalousie.Tuer.Manuell_Position Item Eg.Kueche.Jalousie.Tuer.Manuell_Position: problem evaluating not sh.Eg.Kueche.Jalousie.Tuer.Manuell_Position() if sh.return_plugin("AutoBlind").is_changed_by(caller , source, ["Visu:*"]) else sh.Eg.Kueche.Jalousie.Tuer.Manuell_Position(): 'SmartHome' object has no attribute 'return_plugin' -- item.py:__run_eval:341
    "

    ​[[[[[Manuell_Position]]]]]
    type = bool
    name = Manuell Positionen angefahren
    eval = not sh.Eg.Kueche.Jalousie.Tuer.Manuell_Position() if sh.return_plugin("autoblind").is_changed_by(caller , source, ["Visu:*"]) else sh.Eg.Kueche.Jalousie.Tuer.Manuell_Position()
    eval_trigger = Eg.Kueche.Jalousie.Tuer.Position | Eg.Kueche.Jalousie.Tuer.Lamellenposition

    Gruß Ivan

    Ps. Leider fehlten bei mir heute im Forum die Button um den Text übersichtlicher zu formatieren..

    Einen Kommentar schreiben:

Lädt...
X