Ankündigung

Einklappen
Keine Ankündigung bisher.

Wie würdet ihr dies in sh-ng einbinden (SmartLock)?

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

    Wie würdet ihr dies in sh-ng einbinden (SmartLock)?

    Hallo,

    wie würdet ihr https://knx-user-forum.de/forum/%C3%...mqtt-steuerbar in Smarthome-ng einbinden?
    Senden geht schon per mqtt. Aber ich hätte eigentlich auch gerne den Status.
    Es gibt ja eine js-API, die man nutzen könnte -da fehlen mir aber Fähigkeiten. Ansonsten wäre mein Vorschlag wie hier beschrieben einfach die Nuki Api zu emulieren. Dann könnte man das vorhandene Smarthome-NG Nuki Plugin nutzen.

    Ich habe vor, keyble (das ist die Software die das Schloss steuert) auf einem RasPi Zero laufen zu lassen.

    Gruß,
    ​​​​​​​Hendrik

    #2
    Hallo,

    das Schloss ist jetzt per MQTT steuerbar:
    Code:
    SmartlockHintertuer/action lock
    SmartlockHintertuer/action open
    
    SmartlockHintertuer/status MOVING
    SmartlockHintertuer/status OPENED
    SmartlockHintertuer/status UNLOCKED
    Jetzt bin ich unschlüssig, ob ich action auf 1/0 mappen sollte, oder mit open/close arbeiten sollte. Ich tendiere zu ersterem. Was meint ihr?
    Wo würdet ihr das Mapping machen. Im MQTT-Plugin habe ich dazu nichts gesehen --> mit einem Eval und Hilfsitem?

    Beim Status interessieren mich eigentlich nur Locked/Unlocked. Dann könnte ich auch einfach mappen.

    Gruß,
    Hendrik

    Kommentar


      #3
      Da Du die MQTT Telegramme selbst auf Deinem Pi Zero definierst, könntest Du wenn Dich nur locked/unlocked interessiert ein Telegramm SmartlockHintertuer/lockstatus definieren, welches als Payload 0 / 1 bzw. false / true in der Payload sendet.

      Dann kannst Du das Item in snNG einfach als type: bool definieren. Das Plugin führt ein Casting durch, wenn der Typ nicht foo ist.
      Viele Grüße
      Martin

      There is no cloud. It's only someone else's computer.

      Kommentar


        #4
        Hallo,

        nein, das geht leider nicht.
        Das Kommando wird direkt an das Schloss weitergeleitet und muss "lock" oder "open" heißen:
        https://github.com/oyooyo/keyble/blo...martlock.sh#L7

        Gruß,
        Hendrik

        Kommentar


          #5
          Dann musst Du das über ein Hilfsitem in shNG lösen
          Viele Grüße
          Martin

          There is no cloud. It's only someone else's computer.

          Kommentar


            #6
            Hallo,

            das habe ich jetzt mal probiert:
            Code:
            B:
              Hintertuer:
                Schloss:
                  type: bool
                  eval: 0 if (sh..Status() =='UNLOCKED' or sh..Status() =='OPENED') else 1
                  eval_trigger: ..Status()
                  Status:
                    type: str
                    mqtt_topic_in: SmartlockHintertuer/status
                  Action:
                    type: str
                    mqtt_topic_out: SmartlockHintertuer/action
                    eval: 'open' if sh...Schloss() ==0 else 'close'
            Mit Hintertuer.Schloss() möchte ich den Status zeigen und ändern. Status und Action sind Hilfsitems.
            Das zweite eval (also das bei Action) funktioniert nicht. Es scheint einen Syntaxfehler bei Yaml zu geben. Ich sehe den aber nicht.

            Und ich habe auch gleich noch eine Frage: Ich muss ja verhindern, dass ich einen Zirkelbezug erzeuge (Status setzt 0 (offen)) und löst damit noch ein Action (öffnen) aus. Geht das?

            Gruß,
            Hendrik

            Kommentar


              #7
              Ich finde die evals nicht besonders übersichtlich. Das geht sicherlich simpler.

              Wenn Du Quotes in den evals nutzt, musst Du den gesamten eval Ausdruck in Double-Quotes setzen, sonst versucht yaml das zu interpretieren, und es wird nicht komplett als String an shNG übergeben.
              Viele Grüße
              Martin

              There is no cloud. It's only someone else's computer.

              Kommentar


                #8
                Danke!

                Kommentar


                  #9
                  Hallo,

                  ich habe gerade noch etwas weiter gedacht:
                  Ich möchte ja auf einem KNX-Taster oder der Visu den Status des Schloss dargestellt haben. Dabei ist es aber wichtig, dass ich den tatsächlichen Status bekomme und nicht einfach das, was ich zuletzt gesendet habe. Darüber hinaus brauche ich genau ein Item. Aktuell habe ich ja drei: Eins für Action, eins für status. und einmal das übergeordnete item:

                  Code:
                  B:
                    Hintertuer:
                      Schloss:
                        type: bool
                        eval: "0 if (sh..Status() =='UNLOCKED' or sh..Status() =='OPENED') else 1"
                        eval_trigger: ..Status()
                        enforce_updates:true
                        Status:
                          type: str
                          mqtt_topic_in: SmartlockHintertuer/status
                          enforce_updates:true
                        Action:
                          type: str
                          mqtt_topic_out: SmartlockHintertuer/action
                          eval: "'unlock' if sh...Schloss() ==0 else 'lock'"
                          eval_trigger: ...Schloss()
                          enforce_updates:true

                  Ich möchte ja in Zukunft mit einem B.Hintertuer.Schloss(1) den Schließvorgang auslösen. Das sollte mit dem eval klappen. Allerdings ist jetzt sofort B.Hintertuer.Schloss() ==1.
                  Ich hätte es lieber, dass B.Hintertuer.Schloss() nach dem Senden des Kommandos 0 ist und erst von einer erfolgreichen Rückmeldung vom Schloss (über B.Hintertuer.Schloss.status()) zu 1 wird.

                  Wie mache ich das am Besten?

                  Gruß,
                  Hendrik
                  Zuletzt geändert von henfri; 31.12.2018, 14:13. Grund: warum war denn hier die Formatierung wieder kaputt?

                  Kommentar


                    #10
                    Hi Hendrik,

                    Zitat von henfri Beitrag anzeigen
                    Ich möchte ja auf einem KNX-Taster oder der Visu den Status des Schloss dargestellt haben. Dabei ist es aber wichtig, dass ich den tatsächlichen Status bekomme und nicht einfach das, was ich zuletzt gesendet habe.
                    Das kannst Du mit KNX (also auf dem KNX-Taster) machen, deswegen gibt es ja verschiedene KO für "Schalten" (bei Dir hier Action) und "Status". Die Taster-LED lässt Du auf Status hören und Action verbindest Du mit dem Schaltobjekt des Tasters. Hier hast Du also keine Probleme.

                    Zitat von henfri Beitrag anzeigen
                    Darüber hinaus brauche ich genau ein Item.
                    Hier zeigt es sich, dass die SmartVisu das eigentliche Problem ist. Die Widgets dort sind nämlich nicht Statusorientiert. Deswegen brauchst Du ein Item, nur für die SV.

                    Du brauchst also nicht wirklich ein Item, sondern ein Widget, dass sowohl Action wie auch Status bekommt, dass über Action schaltet und das zusätzlich noch den Status anzeigt. Dazu hatte ich im SV-Forum schon mal diese Diskussion gesehen: https://knx-user-forum.de/forum/supp...tor-multistate und es gibt auch diesen Feature-Request: https://knx-user-forum.de/forum/supp...nd-status-mqtt. Die gehen in die Richtung, die Du möchtest. Für Deinen konkreten Fall kannst Du Dir ja ein device-Widget basteln.

                    In shNG.py funktioniert das IMHO so, wie es sollte (mit 2 Items).

                    Gruß, Waldemar

                    Kommentar


                      #11
                      Hallo -und ein frohes neues Jahr!

                      vielen Dank! Das hilft mir weiter.

                      Gruß,
                      Hendrik

                      Kommentar

                      Lädt...
                      X