Ankündigung

Einklappen
Keine Ankündigung bisher.

shNG Logik direkt mit basic.trigger von smartVISU auslösen

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

    shNG Logik direkt mit basic.trigger von smartVISU auslösen

    Hallo,
    zum einen möchte ich hier kurz vorstellen, wie am eine Logik direkt mit dem basic.trigger der smartVISU auslösen kann, zum anderen aber auch eine Frage dazu stellen.

    Erst einmal das Tutorial:

    Beginnen wir mit der visu. Hier gibt es den basic.trigger, mit dem man direkt eine Logik auslösen kann. Dabei kann man auch einen Wert übergeben, der in der Logik verarbeitet wird.
    Code:
                        
    {{ basic.trigger('', 'tdef_sel', '', 'control_reload.svg', '1', mini) }}        
    {{ basic.trigger('', 'tdef_sel', '', 'control_centr_arrow_up.svg', '3', mini) }}
    {{ basic.trigger('', 'tdef_sel', '', 'control_cancel.svg', '2', mini) }}
    {{ basic.trigger('', 'tdef_sel', '', 'control_centr_arrow_down.svg', '4', mini) }}
    In meinen Beispiel bilde ich die Fernbedienung von Funk-Rollladen nach. Die Logik, die ausgelöst wird, heißt in dem Fall "tdef_sel" und ist so in der logic.yaml gelistet
    Für die verschiedenen Funktionen übergebe ich die Werte 1 bis 4, die dann in der Logik wieder ausgewertet werden.

    logic.yaml
    Code:
    #Funkrolladen
    tdef_sel:
        filename: tdef_sel.py
        visu_acl: 'true'
    Der Logikname im basic.trigger entsprecht dem Logiknamen aus logic.yaml. Wichtig ist "visu_acl: 'true'", damit die Visu auch die Werte schreiben kann.

    Die Logic selbst in tdef_sel.py
    Code:
    logger.info(trigger['value'])
    if trigger['value'] == 1:
        sh.Rollladen.TDEF.Sel(1)
        time.sleep(0.1)
        sh.Rollladen.TDEF.Sel(0)
        logger.info("SEL gedrückt")
    elif trigger['value'] == 2:
        sh.Rollladen.TDEF.Stop(1)
        time.sleep(0.1)
        sh.Rollladen.TDEF.Stop(0)
        logger.info("Stop gedrückt")
    elif trigger['value'] == 3:
        sh.Rollladen.TDEF.Hoch(1)
        time.sleep(0.1)
        sh.Rollladen.TDEF.Stop(0)
        logger.info("Hoch gedrückt")
    elif trigger['value'] == 4:
        sh.Rollladen.TDEF.Runter(1)
        time.sleep(0.1)
        sh.Rollladen.TDEF.Runter(0)
        logger.info("Runter gedrückt")
    else:
        logger.info("Wert in Logic nicht zugewiesen")
    Hier wird über die übergebenen Werte 1-4 die entsprechende Funktion gewählt, die "Taste gedrückt", 1s warten und die "Taster wieder loslassen".
    Geht super.

    Nun zu meinen Fragen:
    Seit shNG 1.3 und in der smartVISU2.9 (develop) hat sich scheinbar etwas geändert. Heute also mit shNG1.3 und smartVISU2.9 kann man die von der Visu übergebenen Werte mit if trigger['value'] == 1 erfassen. In der Vorgängerversionen ging das mit if trigger['value'] == '1'. Warum ist das so?

    Lädt man die Logik über das Backend neu, funktioniert das nicht mehr. Es geht erst wieder, wenn man shNG neu startet. Früher ging das. Was mache ich falsch?

    Danke für Eure Hilfe.

    #2
    Benutzt Du bei SHNG auch die develop oder die 1.3?

    Kommentar


      #3
      Die Ursache liegt wohl bei der gestrigen Umstellung der Widgets, die Werte werden da irgendwie automatisch gecastet.
      Ich habe das nun explizit zu einem String umgewandelt, müsste also wieder funktionieren.

      Kommentar


        #4
        bmx Beim Start von shNG steht "SmartHomeNG 1.3.v1.3_Hotfix_2" im log. Ich bin auf dem Master.

        Kommentar


          #5
          smai Korrektur klappt. Es funktioniert wieder so wie früher.
          DANKE.

          Aber das "Neu Laden" der Logik über das Backend funktioniert trotzdem nicht.

          Kommentar

          Lädt...
          X