Nuki 4.0 pro für MQTT Anbindung / Beispiel gesucht ....

Begonnen von ritchie, 30 Dezember 2023, 19:48:11

Vorheriges Thema - Nächstes Thema

ritchie

Hallo Zusammen,

seit kurzem habe ich ein Nuki 4.0 Pro in Betrieb und will diese gerne in FHEM einbinden.
An meinen MQTT Server (externe Server, läuft auf zweiter Fhem Installation) habe ich es schon eingebunden.

Alle Beispiele hierfür finde ich nur mit "MQTT2_DEVICE". Ich denke aber, das ich das ganze als "MQTT2_CLIENT"
benötige.

Hat jemand ein Beispiel dafür, da ich mit MQTT2 nicht ganz so bewandert bin.

Viele Grüße
R.
IPU662  Ipfire & Fhem (Homematic + MAX) - Produktiv
Cubietruck (1Wire - USB) - Produktiv

ritchie

Hallo Zusammen,
erste Version läuft schon. Nur die Batterieanzeige arbeitet noch nicht richtig. Ich hatte ein Beispiel hier
im Forum für eine ältere Nuki Version gefunden. Diese habe ich auf "MQTT2_Client" umgeschrieben.
Wenn das ganze richtig läuft, poste ich natürlich den Code.

Viele Grüße
R.
IPU662  Ipfire & Fhem (Homematic + MAX) - Produktiv
Cubietruck (1Wire - USB) - Produktiv

ritchie

#2
Hallo Zusammen,

hier die erste Version:

Allgemeine Definition zu dem MQTT2 Server (wenn nicht schon vorhanden)
#
# MQTT2 Client
#
define MQTT2_FHEM_Client MQTT2_CLIENT <IP Adresse des MQTT2 Server>:1883
attr MQTT2_FHEM_Client username <Benutzername>

Türschloss Definition

#
# MTQtt2 Device Nuki Türschloss
#
define Flur_Wohnungstuerschloss MQTT2_DEVICE <DEVICEID im MQTT2>
attr Flur_Wohnungstuerschloss IODev MQTT2_FHEM_Client
attr Flur_Wohnungstuerschloss alias Türschloss:
attr Flur_Wohnungstuerschloss event-min-interval battery:3600
attr Flur_Wohnungstuerschloss event-on-change-reading .*
attr Flur_Wohnungstuerschloss group Wohnungstür
attr Flur_Wohnungstuerschloss icon nuki_lock
attr Flur_Wohnungstuerschloss readingList nuki/<DEVICEID im MQTT2>/state:.* state\
nuki/<DEVICEID im MQTT2>/lockActionEvent:.* lockActionEvent\
nuki/<DEVICEID im MQTT2>/timestamp:.* timestamp\
nuki/<DEVICEID im MQTT2>/connected:.* connected\
nuki/<DEVICEID im MQTT2>/deviceType:.* deviceType\
nuki/<DEVICEID im MQTT2>/name:.* name\
nuki/<DEVICEID im MQTT2>/firmware:.* firmware\
nuki/<DEVICEID im MQTT2>/serverConnected:.* serverConnected\
nuki/<DEVICEID im MQTT2>/mode:.* mode\
nuki/<DEVICEID im MQTT2>/doorsensorState:.* doorsensorState\
nuki/<DEVICEID im MQTT2>/batteryCritical:.* batteryCritical\
nuki/<DEVICEID im MQTT2>/batteryChargeState:.* batteryChargeState\
nuki/<DEVICEID im MQTT2>/batteryCharging:.* batteryCharging\
nuki/<DEVICEID im MQTT2>/keypadBatteryCritical:.* keypadBatteryCritical\
nuki/<DEVICEID im MQTT2>/doorsensorBatteryCritical:.* doorsensorBatteryCritical\
nuki/<DEVICEID im MQTT2>/commandResponse:.* commandResponse
attr Flur_Wohnungstuerschloss room Aussen-Flur
attr Flur_Wohnungstuerschloss setList unlock:noArg nuki/<DEVICEID im MQTT2>/lockAction 1\
 lock:noArg nuki/<DEVICEID im MQTT2>/lock true\
 unlatch:noArg nuki/<DEVICEID im MQTT2>/lockAction 3

attr Flur_Wohnungstuerschloss stateFormat { sprintf("Schloss : %s Batterie : %s", getDoorState(ReadingsVal("Flur_Wohnungstuerschloss","state",0)), ReadingsVal("Flur_Wohnungstuerschloss","batteryChargeState",0)) }
attr Flur_Wohnungstuerschloss userReadings battery {my $wert = ReadingsVal($name,"batteryCritical",0);; ($wert eq "false" ) ? 'ok' : 'low'}, BatteryChargeState { ReadingsVal($name,"batteryChargeState",0) }
#attr Flur_Wohnungstuerschloss webCmd lock:unlock

Wer die Tür über die Weboberfläche öffnen will, muss diese Zeile aktiviert
attr Flur_Wohnungstuerschloss webCmd lock:unlock


My Utilitiy Routine für den Status-Text (teilweise aus Nuki Modul entnommen)

#
# get back the given text for a boolean bit, like On/Off
#
sub getDoorState($)
{
  my $stateVar = shift;
  my $ret = "unbekannt";

    $stateVar=trim($stateVar);
    if( $stateVar eq '0')
        {
        $ret = "Unkalibiert";
        }

    if( $stateVar eq '1')
        {
        $ret = "Abgeschlossen";
        }

    if( $stateVar eq '2')
        {
        $ret = "am Aufschliessen";
        }


    if( $stateVar eq '3')
        {
        $ret = "Aufgeschlossen";
        }

    if( $stateVar eq '4')
        {
        $ret = "Am Abschliessen";
        }


    if( $stateVar eq '5')
        {
        $ret = "Entriegelt";
        }


    if( $stateVar eq '6')
        {
        $ret = "Entriegelt (lock an go)";
        }

    if( $stateVar eq '7')
        {
        $ret = "am Aufschliessen";
        }


    if( $stateVar eq '253')
        {
        $ret = "Nuki bootet !";
        }

    if( $stateVar eq '254')
        {
        $ret = "Motor blockiert !";
        }


  return $ret;   
}
IPU662  Ipfire & Fhem (Homematic + MAX) - Produktiv
Cubietruck (1Wire - USB) - Produktiv

madmax1404

Das ist super. Kann jemand daraus ein MQTT2 Template basteln?

ReneR1986

Funktioniert super.
Hat jemand zufällig das homebridgeMapping dafür, damit man das auch über Alexa steuern kann.
Das bekommen ich irgendwie noch nicht hin.

Hier mal mein list:

Internals:
   CFGFN     
   FUUID      6635056a-f33f-db0c-71ca-b59565300d1b5911
   IODev      myBroker
   LASTInputDev myBroker
   MSGCNT     758
   NAME       Nuki_Haustuer_Rene
   NR         403
   STATE      Schloss : Abgeschlossen Batterie : 85
   TYPE       MQTT2_DEVICE
   eventCount 406
   myBroker_CONN myBroker_192.168.1.173_61189
   myBroker_MSGCNT 758
   myBroker_TIME 2024-05-04 11:49:36
   READINGS:
     2024-05-04 11:49:36   BatteryChargeState 85
     2024-05-03 17:40:26   IODev           myBroker
     2024-05-04 11:49:36   battery         ok
     2024-05-04 09:41:53   batteryChargeState 85
     2024-05-04 09:41:53   batteryCharging false
     2024-05-04 09:41:53   batteryCritical false
     2024-05-04 11:49:36   batteryPercent  85
     2024-05-04 11:42:22   commandResponse 0
     2024-05-04 09:41:52   connected       true
     2024-05-04 09:41:52   deviceType      4
     2024-05-04 09:41:53   doorsensorBatteryCritical false
     2024-05-04 09:41:53   firmware        4.2.8
     2024-05-04 09:41:53   keypadBatteryCritical false
     2024-05-04 11:42:16   lockActionEvent 2,172,0,0,0
     2024-05-04 09:41:53   mode            2
     2024-05-04 09:41:53   name            René Haustür
     2024-05-04 11:49:36   serverConnected true
     2024-05-04 11:42:22   state           1
     2024-05-04 11:49:36   timestamp       2024-05-04T09:49:35Z
Attributes:
   IODev      myBroker
   alexaName  Türschloss Haustür
   alias      Türschloss:
   event-min-interval battery:3600
   event-on-change-reading .*
   genericDeviceType lock
   group      René Haustür
   homebridgeMapping homebridgeMapping LockCurrentState=state,values=locked:1;unlocked:3;lock:1;unlock:3
LockTargetState=state,values=locked:1;unlocked:3,cmds=4:lock;2:unlock,cmd=
   icon       nuki_lock
   readingList nuki/placeholder/state:.* state
nuki/placeholder/lockActionEvent:.* lockActionEvent
nuki/placeholder/timestamp:.* timestamp
nuki/placeholder/connected:.* connected
nuki/placeholder/deviceType:.* deviceType
nuki/placeholder/name:.* name
nuki/placeholder/firmware:.* firmware
nuki/placeholder/serverConnected:.* serverConnected
nuki/placeholder/mode:.* mode
nuki/placeholder/doorsensorState:.* doorsensorState
nuki/placeholder/batteryCritical:.* batteryCritical
nuki/placeholder/batteryChargeState:.* batteryChargeState
nuki/placeholder/batteryCharging:.* batteryCharging
nuki/placeholder/keypadBatteryCritical:.* keypadBatteryCritical
nuki/placeholder/doorsensorBatteryCritical:.* doorsensorBatteryCritical
nuki/placeholder/commandResponse:.* commandResponse
   room       Überwachung und Temp
   setList    unlock:noArg nuki/placeholder/lockAction 1
 lock:noArg nuki/placeholder/lock true
 unlatch:noArg nuki/placeholder/lockAction 3
   stateFormat { sprintf("Schloss : %s Batterie : %s", getDoorState(ReadingsVal("Nuki_Haustuer_Rene","state",0)), ReadingsVal("Nuki_Haustuer_Rene","batteryChargeState",0)) }
   userReadings battery {my $wert = ReadingsVal($name,"batteryCritical",0); ($wert eq "false" ) ? 'ok' : 'low'}, BatteryChargeState { ReadingsVal($name,"batteryChargeState",0) },
batteryPercent {ReadingsVal("Nuki_Haustuer_Rene","BatteryChargeState",0)}
   webCmd     lock:unlock

ReneR1986

Ich habe es in diesem Beitrag gefunden

https://forum.fhem.de/index.php?topic=48558.2025

Zitat von: DeeSPe am 08 Februar 2017, 17:56:42
Zitat von: Morpheus_1977 am 08 Februar 2017, 17:48:54Hier die list der Nuki-Bridge und des Nuki-Devices
LockCurrentState=lockState,values=/^lock/:SECURED;/^unlock:UNSECUREDLockTargetState=state,values=/^lock/:SECURED;/^unlock:UNSECURED,cmds=SECURED:lock;UNSECURED:unlock

Da fehlt auf alle Fälle schon mal ein Leerzeichen vor TargetState.
Die /^ sind auch unnötig!
LockCurrentState=lockState,values=lock:SECURED;unlock:UNSECURED LockTargetState=LockCurrentState,cmds=SECURED:lock;UNSECURED:unlock

Gruß
Dan

Das funktioniert.
Wäre nur noch einmal interessant wie man unlatch umsetzen könnte.