Software zum Steuern des Türschlossantrieb "eqiva eQ-3 Bluetooth Smart Lock"

Persönliche Seite #7551909
Lesenswert?

Dirk schrieb:

esp-idf?

Ja, aber ich habe nun noch mal das aktuelle yaml kopiert. Passte meins ggf. nicht mehr zum Rest? Ich hatte refresh auf 0s stehen. Pairing ging, dann wollte ich ein neues install machen mit Key und ID und damit kam er nicht mehr hoch.

Nun habe ich Key und ID wieder raus und versuche es mit dem Connect Service. Gemeldet hat er sich schon mal wieder

#7551916
Lesenswert?

Dirk schrieb:

Hab ein Beispiel hochgeladen und den Code nochmal aktualisiert.

Danke! Verwirrend ist, dass die MAC von dem einen Schloss außerhalb des Template definiert wird.

eqiva_key_ble: id: key_ble

Below are optional and can be passed via new connect service

mac_address: 00:12:34:56:42:88 user_id: 0 user_key: 12345678636F6763386A726E33746F35

Vom zweiten aber nur im Template.

Wo wird denn vom zweiten Lock User und key definiert?

Für schneller Verbindung kannst du die scan window auf 300ms setzen

Aber bedenke, gleichzeitig ausführen wird zu Problemem führen :)

Definiere "gleichzeitig" :-)

Kann man eigentlich in der yaml "Platzhalter" definieren, um die sich wiederholenden Mac-Adressen zu vermeiden? Nihct aus Faulheit, sondern weil es Fehlerträchtig ist.

Gruß, Hendrik

Persönliche Seite #7551921
Lesenswert?

Philipp C. schrieb:

Nun habe ich Key und ID wieder raus und versuche es mit dem Connect Service. Gemeldet hat er sich schon mal wieder

hmm, das ging nun auch. Wohl eher ein Fehler auf meiner Seite.

Wie ist es mit dem Key und der ID denn gedacht? Man scheint den connect Service ja nicht zu benötigen, wenn man hier alles einträgt:

eqiva_key_ble: id: key_ble

Below are optional and can be passed via new connect service

mac_address: 00:1A:xxx user_id: 4 user_key: xxxxx

Wird man die ganzen User IDs von den Pairing Versuchen eigentlich irgendwie wieder los?

Echt super, dass man dieses Schloss nun so zügig ansprechen kann.

#7551960
Lesenswert?

Hendrik F. schrieb:

Hallo, hab jetzt verstanden, wie das zweite Lock definiert wird. Aber kann das dann nicht weg?

eqiva_key_ble: id: key_ble Below are optional and can be passed via new connect service mac_address: 00:1a:... user_id: 1 user_key: xxx

Es kompiliert leider aktuell nicht: https://pastebin.com/vdeGGEtq Könntest du da einmal gucken, bitte? Gruß, Hendrik

Zwei Schlösser gehen wenn du die Parameter via connect mitgiebts. Dann solltest du es nicht in der Initialen config mitgeben.

Wenn man nur ein Schloss dauerhaft verbunden haben möchte nutzt man einfach die config. Dann braucht man die connect/disconnect Funktion nicht.

Persönliche Seite #7552112
Lesenswert?

Dirk schrieb:

Hab in die yaml noch ne Time Komponente gepackt die alle 4 Minuten den Status abruft. Hab im Log nämlich festgestellt, dass nach ~5min Inaktivität das Schloss wohl die Verbindung abbricht?

Konntet ihr das auch beobachten?

Ja, siehe Anhang. Mein ESP scheint dabei dann auch die Verbindung zum logger zu verlieren.

Zudem habe ich gerade festgestellt, dass der unlock service bei mir gar nicht funktioniert. Ich hatte bisher nur mit lock und open gespielt. Da ist alles ok. Bei unlock passiert jedoch gar nichts.

Angehängte Dateien:
#7552114
Lesenswert?

Hallo,

ich habe nie eine dauerhafte Verbindung gehabt. Aber mit dem originalen keyble kannst du das gegentesten um auszuschließen, dass es am ESP liegt. Du musst --auto_disconnect_time 0 wählen.

Ich habe jetzt erfolgreich kompiliert und meine zwei Locks im HomeAssistant. Eins habe ich auch schon zum Aufschließen bekommen. Danach war aber auf einmal das Lock (und auch die Firmware-Entität) "nicht verfügbar"

Im "Logbuch" sieht man auch equiva Controller Firmware ausgeschaltet equiva Controller nicht mehr verfügbar (immer wieder)

Der Ping sieht aber gut aus.

Ping-Statistik für 192.168.177.1: Pakete: Gesendet = 29796, Empfangen = 29707, Verloren = 89 (0% Verlust), Ca. Zeitangaben in Millisek.: Minimum = 0ms, Maximum = 3700ms, Mittelwert = 7ms

In der Seriellen Konsole sieht auch alles gut aus. Außer gelegentliche [I][wifi:286]: WiFi Connecting to 'FriedelNetz'... [W][wifi_esp32:458]: Event: Disconnected ssid='FNetz' bssid=aa:22:bb:24:DE:F1 reason='Auth Expired' [W][wifi:604]: Error while connecting to network. [W][wifi:640]: Restarting WiFi adapter... [I][wifi:286]: WiFi Connecting to 'FriedelNetz'... [W][wifi_esp32:458]: Event: Disconnected ssid='FNetz' bssid=aa:22:bb:24:DE:F1 reason='Auth Expired' [W][wifi:604]: Error while connecting to network. [W][wifi:640]: Restarting WiFi adapter...

Aber z.B. jetzt gerade sind die Elemente vom ESP in HA nicht verfügbar (grau) obwohl in der seriellen Konsole [I][wifi:286]: WiFi Connecting to 'FNetz'... [I][wifi:573]: WiFi Connected! [C][wifi:391]: Local MAC: aa:71:bb:8B:F1:D4 [C][wifi:396]: SSID: 'FriedelNetz'

steht (beachte: die MAC ist eine andere; vermutlich ein anderer AP)

Hast du eine Idee?

Gruß, Hendrik

#7552125
Lesenswert?

Philipp C. schrieb:

Dirk schrieb:

Hab in die yaml noch ne Time Komponente gepackt die alle 4 Minuten den Status abruft. Hab im Log nämlich festgestellt, dass nach ~5min Inaktivität das Schloss wohl die Verbindung abbricht? Konntet ihr das auch beobachten?

Ja, siehe Anhang. Mein ESP scheint dabei dann auch die Verbindung zum logger zu verlieren. Zudem habe ich gerade festgestellt, dass der unlock service bei mir gar nicht funktioniert. Ich hatte bisher nur mit lock und open gespielt. Da ist alles ok. Bei unlock passiert jedoch gar nichts.

Einmal neuste Version verwenden. Der hatte noch beim reconnect gecrashed.

D.h. WiFi sollte trotzdem verbunden bleiben, nur BLE verliert die Verbindung.

Das mit dem unlock habe ich auch schon festgestellt.

Dachte es liegt vllt am Schloss Weil ich es noch nicht montiert habe. Geht das unlock denn mit der nodejs Version oder der anderen ESP32 Version?

Befehl wird nämlich korrekt abgesendet so wie ich das sehe.

Persönliche Seite #7552302
Lesenswert?

Dirk schrieb:

Das mit dem unlock habe ich auch schon festgestellt.

Dachte es liegt vllt am Schloss Weil ich es noch nicht montiert habe. Geht das unlock denn mit der nodejs Version oder der anderen ESP32 Version?

Befehl wird nämlich korrekt abgesendet so wie ich das sehe.

Das scheint tatsächlich das Problem zu sein. Ich habe es mal an die Tür angebaut und da tut sich was. Nun zeigt er noch "JAMMED" an, wenn ich abschließe, aber das ist wohl ein anderes Problem und hat weniger mit der ESP Software zu tun :)

#7552354
Lesenswert?

Clean Build = vorher die Daten gelöscht? Ja (vorher ging der Build ja nicht). Version vom Code: Von heute morgen. Ich baue aber nochmal. Das ESP Modul ist dieses https://codedocu.de/Sonstiges/Hardware/Arduino/ESP32-Board--von-AZDelivery-unter-ESP32-NodeMCU-Development-Kit?3091

Ich glaube, der ESP crasht beim betätigen von "Lock":

Error reading from serial device

ets Jun 8 2016 00:22:57

rst:0x1 (POWERON_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT) configsip: 0, SPIWP:0xee clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00 mode:DIO, clock div:2 load:0x3fff0030,len:1184 load:0x40078000,len:13132 load:0x40080400,len:3036 entry 0x400805e4

[I][logger:326]: Log initialized [C][ota:473]: There have been 1 suspected unsuccessful boot attempts.

Das komische ist, dass danach im Log alles normal aussieht. Aber der ESP/das Schloss bleibt grau. Es wurde erst nach einem erneuten Kompilieren wieder nutzbar - mag Zufall sein.

Gruß, Hendrik

#7552655
Lesenswert?

Hallo,

oh, ich dachte das lock-template wäre nur bei zwei Schlössern nötig. Ich habe das jetzt wieder hinzugefügt und damit funktioniert es jetzt - einigermaßen.

Was mir nicht klar ist: Wo soll ich das Schloss im Schloss-Popup bedienen? Am vertikalen "Slider", oder auf dem Knopf darunter? Ich habe das Schloss bedienen können, aber es reagiert nicht immer. Zudem wird der Status nicht aktualisiert. Der Slider bleibt rot und der Text-Status bleibt "aufgeschlossen".

Hier meine Konfiguration:

1
esphome:
2
  name: esphome-web-8bf1d4
3
  friendly_name: equiva Controller
4
esp32:
5
  board: esp32dev
6
  framework:
7
    type: esp-idf
8

9
# Enable logging
10
logger:
11
  
12
# Enable Home Assistant API
13
api:
14
  encryption:
15
    key: "V/xx="
16
  services:
17
  - service: settings
18
    variables:
19
      turn_left: bool
20
      key_horizontal: bool
21
      lock_turns: int
22
    then:
23
      - eqiva_key_ble.settings:
24
          turn_left: !lambda 'return turn_left;'
25
          key_horizontal: !lambda 'return key_horizontal;'
26
          lock_turns: !lambda 'return lock_turns;'
27
  - service: connect
28
    variables:
29
      # mac_address: string // Unable to pass a mac_address via lambda :?
30
      user_id: int
31
      user_key: string
32
    then:
33
      - eqiva_key_ble.connect:
34
          mac_address: 32:20:50:56:42:88
35
          # mac_address: !lambda 'return mac_address;'
36
          user_id: !lambda 'return user_id;'
37
          user_key: !lambda 'return user_key;'
38
  - service: disconnect
39
    then:
40
      - eqiva_key_ble.disconnect:
41
  - service: pair
42
    variables:
43
      card_key: string
44
    then:
45
      - eqiva_key_ble.pair:
46
          card_key: !lambda 'return card_key;'
47
  - service: lock
48
    then:
49
      - eqiva_key_ble.lock:
50
  - service: unlock
51
    then:
52
      - eqiva_key_ble.unlock:
53
  - service: open
54
    then:
55
      - eqiva_key_ble.open:
56
  - service: status
57
    then:
58
      - eqiva_key_ble.status:
59
ota:
60

61
wifi:
62
  ssid: FNetz
63
  password: paass
64

65
  # Enable fallback hotspot (captive portal) in case wifi connection fails
66
  ap:
67
    ssid: "Esphome-Web-8Bf1D4"
68
    password: "paaas"
69

70
web_server:
71
  include_internal: true
72
  local: true
73
  port: 80
74

75

76
captive_portal:
77
    
78
external_components:
79
  source: github://digaus/esphome-components-eqiva
80
  # use refresh when you do not get latest version
81
  refresh: 0s
82

83
esp32_ble_tracker:
84
  # scan_parameters:
85
  #  window: 300ms
86

87
eqiva_ble:
88

89
eqiva_key_ble:
90
  id: key_ble 
91
  # Below are optional and can be passed via new connect service
92
  mac_address: 32:20:50:18:a6:96  # Hintertür
93
  user_id: 1
94
  user_key: 9872987492873492837492837492374
95
  
96
  #Schuppen:
97
  #mac_address: 32:20:50:0a:6e:7c # Schuppen
98
  #user_id: 1
99
  #user_key: 9283749283749237498729874928734  
100

101

102
text_sensor: 
103
  - platform: eqiva_key_ble
104
    mac_address: 
105
      name: "Mac Address"
106
      id: mac_address
107
    lock_status: 
108
      name: "Lock Status"
109
      id: lock_status
110
    low_battery:
111
      name: "Low Battery"
112
    lock_ble_state:
113
      name: "Lock BLE State"
114
    user_id:
115
      name: "User ID"
116
    user_key:
117
      name: "User Key"
118
    # on_raw_value:
119
            # then:   Do stuff on state change (!lambda "return x") 
120

121

122
lock:
123
  - platform: template
124
    name: "Lock 1"
125
    lambda: |-
126
      if (id(mac_address).state != "32:20:50:18:a6:96") {
127
        return {};
128
      }
129
      if (id(lock_status).state == "LOCKED") {
130
        return LOCK_STATE_LOCKED;
131
      } else if (id(lock_status).state == "UNLOCKED" || id(lock_status).state == "OPENED") {
132
        return LOCK_STATE_UNLOCKED;
133
      } else if (id(lock_status).state == "UNKNOWN") {
134
        return LOCK_STATE_JAMMED;
135
      } else {
136
        return LOCK_STATE_LOCKED;
137
      }
138
    lock_action:
139
      - eqiva_key_ble.connect:
140
          mac_address: 32:20:50:18:a6:96  # Hintertür
141
          user_id: 1
142
          user_key: 9872987492873492837492837492374
143
      - eqiva_key_ble.lock:
144
    unlock_action:
145
      - eqiva_key_ble.connect:
146
          mac_address: 32:20:50:18:a6:96  # Hintertür
147
          user_id: 1
148
          user_key: 9872987492873492837492837492374
149
      - eqiva_key_ble.unlock:
150
    open_action:
151
      - eqiva_key_ble.connect:
152
          mac_address: 32:20:50:18:a6:96  # Hintertür
153
          user_id: 1
154
          user_key: 9872987492873492837492837492374
155
      - eqiva_key_ble.open:

Gruß, Hendrik

#7552697
Lesenswert?

Hallo,

es funktioniert jetzt - genau wie oben gepostet - mit zwei Locks. Super!

Ich weiß aber nicht, warum es vorher nicht ging.

Verbleibende Fragen:

  • Wie kann ich die dauerhafte Verbindung deaktivieren - oder noch besser: Zeitgesteuert machen (es gibt bei uns "Stoßzeiten")?
  • Wie kann ich noch den Status vom zweiten Lock (Batterie etc) bekommen?
  • Kann ich für "Locked" auch einen anderen Sensor (meinen Riegel-Taster, siehe oben) nutzen?
1
    lambda: |-
2
      if (id(mac_address).state != "xxxxx:0a:6e:7c") {
3
        return {};
4
      }
5
      if (binary_sensor.schuppen_riegelkontakt == "1") {
6
        return LOCK_STATE_LOCKED;
7
      } else if (id(lock_status).state == "UNLOCKED" || id(lock_status).state == "OPENED") || (binary_sensor.schuppen_riegelkontakt == "0") {
8
        return LOCK_STATE_UNLOCKED;
9
      } else if (id(lock_status).state == "UNKNOWN") {
10
        return LOCK_STATE_JAMMED;
11
      }

Gruß, Hendrik

#7552719
Lesenswert?

Hendrik F. schrieb:

Hallo, es funktioniert jetzt - genau wie oben gepostet - mit zwei Locks. Super! Ich weiß aber nicht, warum es vorher nicht ging. Verbleibende Fragen:

Wie kann ich die dauerhafte Verbindung deaktivieren - oder noch besser: Zeitgesteuert machen (es gibt bei uns "Stoßzeiten")? Wie kann ich noch den Status vom zweiten Lock (Batterie etc) bekommen? Kann ich für "Locked" auch einen anderen Sensor (meinen Riegel-Taster, siehe oben) nutzen?

1 lambda: |-

2 if (id(mac_address).state != "xxxxx:0a:6e:7c") {

3 return {};

4 }

5 if (binary_sensor.schuppen_riegelkontakt == "1") {

6 return LOCK_STATE_LOCKED;

7 } else if (id(lock_status).state == "UNLOCKED" || id(lock_status).state == "OPENED") || (binary_sensor.schuppen_riegelkontakt == "0") {

8 return LOCK_STATE_UNLOCKED;

9 } else if (id(lock_status).state == "UNKNOWN") {

10 return LOCK_STATE_JAMMED;

11 }

Gruß, Hendrik

Status solltest du beim zweiten Lock genau so bekommen wie beim ersten.

Einfach auf im Lambda auf die Mac Adresse prüfen.

Zeitsteuerung kannst du mit der Time Komponente machen. Hab da ja schon alle 4 min einem Status Aufruf gemacht.

Damit könntet du dann auch nach einiger Zeit disconnect aufrufen bzw. Connect

#7552748
Lesenswert?

Hallo,

da hab ich mich unklar ausgedrückt. Ich hatte zwei Fragen:

  1. Kann ich für den Lock Status so, wie ich das in dem Code-Block geschrieben habe einen anderen Sensor nutzen
  2. Kann ich für das zweite Lock den Batterie-Status ermitteln?

Zur Zeit noch: Aktuell ist im Lock-Template kein Disconnect. Das müsste ich dann noch einbauen, oder?

1
    lock_action:
2
      - eqiva_key_ble.connect:
3
            mac_address: 11:12:34:56:42:88
4
            user_id: 1
5
            user_key: 1234567891234567897234696139787E
6
      - eqiva_key_ble.lock:
7
      - eqiva_key_ble.disconnect:

Was macht denn der Code intern aktuell, wenn ich Lock bei dem einen und dann bei dem anderen Lock ausführe? Weiß er, dass er ein Disconnect machen muß, bevor er das Connect macht?

Gruß,

Hendrik

#7552893
Lesenswert?

Hallo,

ich habe auch das Problem mit dem Status. Allerdings verwende ich auch meinen Riegelkontakt als Input für den Status.

1
# make external sensors available
2
sensor:
3
  - platform: homeassistant
4
    name: "Hintertuer"
5
    entity_id: binary_sensor.eg_flur_reed_hintertuer_geschlossen
6
    id: Hintertuer_status
7
  - platform: homeassistant
8
    name: "Schuppen"
9
    entity_id: binary_sensor.haustechnik_schuppen_neu_schloss_geschlossen
10
    id: Schuppen_status
11

12
lock:
13
  - platform: template
14
    name: "Hintertür"
15
    lambda: |-
16
      if (id(mac_address).state != "00:1a:22:01:62:72") {
17
        return {};
18
      }
19
      if (id(Hintertuer_status).state) {
20
        return LOCK_STATE_LOCKED;
21
      } else  {
22
        return LOCK_STATE_UNLOCKED;
23
      }
24

25
  - platform: template
26
    name: "Schuppen"
27
    lambda: |-
28
      if (id(mac_address).state != "00:1a:22:01:62:71") {
29
        return {};
30
      }
31
      if (id(Schuppen_status).state) {
32
        return LOCK_STATE_LOCKED;
33
      } else  {
34
        return LOCK_STATE_UNLOCKED;
35
      }
36

37
Das Schloss lasse ich nun nur zu bestimmten Zeiten verbunden:
38
time:
39
  - platform: sntp
40
    timezone: Europe/Berlin
41
    servers:
42
     - 0.pool.ntp.org
43
     - 1.pool.ntp.org
44
     - 2.pool.ntp.org
45
    on_time:
46
      # Every 4 minutes get Status, to ensure quick reaction
47
      - cron: '00 /4 21-23 * * *'
48
        then:
49
          - eqiva_key_ble.status:

Hier der ganze Code https://pastebin.com/AidTEfph

Siehst du da einen Fehler?

Gruß, Hendrik

#7552920
Lesenswert?

Hendrik F. schrieb:

Hallo, ich habe auch das Problem mit dem Status. Allerdings verwende ich auch meinen Riegelkontakt als Input für den Status.

Für deine Lock states kannst ja die Prüfung auf die Mac Adresse weg lassen.

Hast ja extra zwei separate Sensoren.

Bei mir wird der Lock state mit dem "neuen" Austausch-Schloss vernünftig dargestellt (schloss ist 6 Monate alt und hat noch alte Logs/user...)

Habe die yaml Mal aktualisiert.

#7553418
Lesenswert?

Ein Problem könnte es noch mit dem Session counter geben, wenn die Verbindung dauerhaft bestehen bleibt.

In der original Implementierung wird ein uint8 verwenden , das wären max 255

Also was passiert wenn man diese Grenze erreicht? Muss man das Schloss dann neu verbinden? Oder fängt er von vorne an zu zählen?

Ich teste das mal heute Abend aus.

🤔

#7553465
Lesenswert?

Hallo,

also der Status funktioniert bei mir noch nicht. Ich benutze dabei ja meinen eigenen Sensor, siehe template oben. Die if Abfrage mit der MAC-Adresse habe ich jetzt noch nicht gelöscht, aber ich denke daran soll es ja nicht liegen.

Der Status ist bei mir immer aufgeschlossen.

Jetzt würde ich erwarten, dass er bei einem Druck auf das Schloss dann auch immer abschliesst. Das macht er allerdings nicht. Das ist auch komisch, oder?

Verwendet er zum entscheiden, ob er auf oder abschliesst einfach immer den internen Status?

#7553509
Lesenswert?

Hendrik F. schrieb:

Hallo, also der Status funktioniert bei mir noch nicht. Ich benutze dabei ja meinen eigenen Sensor, siehe template oben. Die if Abfrage mit der MAC-Adresse habe ich jetzt noch nicht gelöscht, aber ich denke daran soll es ja nicht liegen. Der Status ist bei mir immer aufgeschlossen. Jetzt würde ich erwarten, dass er bei einem Druck auf das Schloss dann auch immer abschliesst. Das macht er allerdings nicht. Das ist auch komisch, oder? Verwendet er zum entscheiden, ob er auf oder abschliesst einfach immer den internen Status?

Entferne doch einfach Mal den Filter auf die Mac Adresse.

#7553522
Lesenswert?

Habe ich entfernt - gleiches Ergebnis.

Der Vergleich == 1 scheint immer False zu sein.

Der Vergleich if (id(Hintertuer_status).state == "on") kompiliert nicht. Der Vergleich if (id(Hintertuer_status).state.is_on()) kompiliert auch nicht:

1
User
2
/config/esphome/esphome-web-8bf1d4.yaml:151:36: error: request for member 'is_on' in 'Hintertuer_status->esphome::homeassistant::HomeassistantSensor::<anonymous>.esphome::sensor::Sensor::state', which is of non-class type 'float'
3
       if (id(Hintertuer_status).state.is_on()) {
4
                                    ^~~~~

Aber warum ist state ein float?

Gruß, Hendrik

#7553525
Lesenswert?

Hendrik F. schrieb:

Habe ich entfernt - gleiches Ergebnis. Der Vergleich == 1 scheint immer False zu sein. Der Vergleich if (id(Hintertuer_status).state == "on") kompiliert nicht. Der Vergleich if (id(Hintertuer_status).state.is_on()) kompiliert auch nicht:

1 User

2 /config/esphome/esphome-web-8bf1d4.yaml:151:36: error: request for member 'is_on' in 'Hintertuer_status->esphome::homeassistant::HomeassistantSensor::<anonymous>.esphome::sensor::Sensor::state', which is of non-class type 'float'

3 if (id(Hintertuer_status).state.is_on()) {

4 ^~~~~

Aber warum ist state ein float? Gruß, Hendrik

Ist dein Sensor der wohl nen float liefert.

Log die Werte doch mal.

#7553527
Lesenswert?

Wie kann ein Binary Sensor float liefern... Ich hab jetzt

1
  if (id(Schuppen_status).state)

probiert. (https://esphome.io/components/sensor/template.html)

Da steht im log:

1
[16:51:04][W][homeassistant.sensor:015]: 'binary_sensor.haustechnik_schuppen_neu_schloss_geschlossen': Can't convert 'on' to number!
2
[16:51:04][D][sensor:094]: 'Schuppen': Sending state nan  with 1 decimals of accuracy
3
[16:51:07][W][homeassistant.sensor:015]: 'binary_sensor.haustechnik_schuppen_neu_schloss_geschlossen': Can't convert 'off' to number!

Das sieht nicht nach einem float aus...

Aber warum denkt der Compiler, dass es ein float wäre? Kann ich einfach mit str() einen String erzwingen?

1
ESP_LOGD("custom", "Hintertuer_status state: %f", static_cast<float>(id(Hintertuer_status).state)); sagt mir "Hintertuer_status state: nan"

Gruß, Hendrik

#7553615
Lesenswert?

Hallo,

das Problem habe ich gelöst. Ich habe den Sensor aus HomeAssistant in esphome als

1
sensor:
2
  - platform: homeassistant
3
    name: "Hintertuer"
4
    entity_id: binary_sensor.xyz
5
    id: Hintertuer_status

Importiert. Somit ist es ein sensor. Kein binary sensor So funktioniert es

1
binary_sensor:
2
  - platform: homeassistant
3
    name: "Hintertuer"
4
    entity_id: binary_sensor.xyz
5
    id: Hintertuer_status

Und dann:

1
  - platform: template
2
    name: "Schuppen"
3
    lambda: |-
4
      if (id(Schuppen_status).state) {
5
        return LOCK_STATE_LOCKED;
6
      } else  {
7
        return LOCK_STATE_UNLOCKED;
8
      }

@Artur: Wenn ich das lock in HA definiere, kennt er dann eqiva_key_ble.connect: und co? Kannst du ein Beispiel posten?

Gruß, Hendrik

#7553626
Lesenswert?

Ja, ich habe mehrere Schlösser.

Noch eine Frage: Wenn ich immer ein Disconnect will, um Batterie zu sparen, reicht dann das:

1
unlock_action:
2
  - eqiva_key_ble.connect:
3
      mac_address: 00:1c  # Hintertür
4
      user_id: 1
5
      user_key: x
6
  - eqiva_key_ble.unlock:
7
  - eqiva_key_ble.disconnect:

(die letzte Zeile habe ich hinzugefügt)?

Gruß, Hendrik

#7553788
Lesenswert?

Hendrik F. schrieb:

@Artur: Wenn ich das lock in HA definiere, kennt er dann eqiva_key_ble.connect: und co? Kannst du ein Beispiel posten?

Zum Beispiel so. Aber dann in esphome service: esphome.eqiva_lock_connect für den zweiten Schloß service connect 2 schreiben lock: - platform: template name: Salontur unique_id: salontur value_template: "{{ is_state('binary_sensor.reed_turschloss_salon', 'off') }}" lock: service: esphome.eqiva_lock_connect service: esphome.eqiva_lock_lock service: esphome.eqiva_lock_disconnect unlock: service: esphome.eqiva_lock_connect service: esphome.eqiva_lock_unlock service: esphome.eqiva_lock_disconnect

Beitrag #7553812 wurde von einem Moderator gelöscht.
#7553830
Lesenswert?

Artur K. schrieb:

lock:

  • platform: template name: Salontur unique_id: salontur value_template: "{{ is_state('binary_sensor.reed_turschloss_salon', 'off') }}" lock: service: esphome.eqiva_lock_connect service: esphome.eqiva_lock_lock service: esphome.eqiva_lock_disconnect unlock: service: esphome.eqiva_lock_connect service: esphome.eqiva_lock_unlock service: esphome.eqiva_lock_disconnect

Sorry, service connect kann man jetzt templaten. Also muss man nicht zweiten schreiben

#7553835
Lesenswert?

Artur K. schrieb:

Dirk schrieb:

Artur K. schrieb:

@Dirk Hast du noch nicht rausgefunden wieso man mac nicht via template weitergeben kann?

Weil es über das Template nen string ist, es aber als Typ Mac erwartet wird. Müsste im Code dann selber die Konvertierung/Validierung machen

Meinst du im cpp oder h? Oder direkt in yaml?

Bin schon dabei.

Wollte ja alles über die Weboberfläche einstellbar machen.

#7553840
Lesenswert?

Dirk schrieb:

Artur K. schrieb:

Dirk schrieb:

Artur K. schrieb:

@Dirk Hast du noch nicht rausgefunden wieso man mac nicht via template weitergeben kann?

Weil es über das Template nen string ist, es aber als Typ Mac erwartet wird. Müsste im Code dann selber die Konvertierung/Validierung machen

Meinst du im cpp oder h? Oder direkt in yaml?

Bin schon dabei.

Wollte ja alles über die Weboberfläche einstellbar machen.

Das ist super. Eine frage, wenn ich disconnect mache und dann versucht er sofort zu connecten aber mit id 4, meine id ist 1, verbindet sich such und zeigt established

#7553854
Lesenswert?

Artur K. schrieb:

Dirk schrieb:

Artur K. schrieb:

Dirk schrieb:

Artur K. schrieb:

@Dirk Hast du noch nicht rausgefunden wieso man mac nicht via template weitergeben kann?

Weil es über das Template nen string ist, es aber als Typ Mac erwartet wird. Müsste im Code dann selber die Konvertierung/Validierung machen

Meinst du im cpp oder h? Oder direkt in yaml?

Bin schon dabei. Wollte ja alles über die Weboberfläche einstellbar machen.

Das ist super. Eine frage, wenn ich disconnect mache und dann versucht er sofort zu connecten aber mit id 4, meine id ist 1, verbindet sich such und zeigt established

Jo hab ich auch gefixed.

Er hat die Mac nicht gecleared. ID und User Key aber schon. Dadurch generiert er sich ne neue beim nonce austauschen

#7554717
Lesenswert?

Artur K. schrieb:

Sehe oft das im log [20:48:29][W][component:214]: Component esp32_ble took a long time for an operation (0.08 s). [20:48:29][W][component:215]: Components should block for at most 20-30ms.

Liegt entweder am write_value also senden der BT Message oder am Verschlüssen.

Aber tritt wohl häufig auf:

https://github.com/esphome/issues/issues/4717

Wüsste nicht was ich da optimieren könnte.

Bzgl. Webserver nicht erreichbar, hast du local: true dort stehen? Wenn nicht gab's vllt Internet Probleme?

#7554755
Lesenswert?

Dirk schrieb:

Bzgl. Webserver nicht erreichbar, hast du local: true dort stehen? Wenn nicht gab's vllt Internet Probleme?

Ja habs true stehen. Wegen Internet nicht das ich wussten. Konnte nur Schloß nicht ansprechen, liegt vllt am esp, werde ich mal ersetzen. Aber da lief sehr lange andere Version, wo der Schloß per mqtt angesteuert wird, ohne Probleme, sehr komisch

#7555113
Lesenswert?

Wenn ich aktuelle Version von git nehme, kommt das: Failed config

text_sensor.eqiva_key_ble: [source /config/esphome/eqiva-lock.yaml:198] platform: eqiva_key_ble mac_address: name: Mac Address

1
ID mac_address redefined! Check text->0->id.
2
id: mac_address
3
disabled_by_default: False
4
entity_category: ''

ist es nicht weil in text template id mac_address verwendet wird und auch in text_sensor id mac_address?

#7555237
Lesenswert?

Danke Dirk für die schöne Arbeit. Ich möchte auf ein paar Probleme hinweisen, die dein Projekt unbrauchbar machen (Stand heute, 9. Dezember)

  1. Die letzte Version hat zwei Probleme im Code (leicht zu lösen): A: Dieser Teil des Codes ist innerhalb der ap-Funktion eingerückt, sollte aber einfach unter wifi stehen

Use below to apply saved input parameters on boot

1
on_connect:
2
  - eqiva_key_ble.connect:
3
      mac_address: !lambda 'return id(mac_address).state;' 
4
      user_id: !lambda 'return id(user_id).state;'
5
      user_key: !lambda 'return id(user_key).state;'

B: Die Entität mac_address unter text sensor kann nicht den gleichen Namen unter text haben

  1. Die zuletzt geladene Version erlaubt es nicht, die Benutzerkennung und den Schlüssel über die Webschnittstelle einzugeben (Sie müssten entweder das Pairing erneut durchführen oder die Daten in die Firmware eingeben.

  2. Bei der Erstinstallation funktioniert der Code perfekt, aber beim ersten Neustart, wenn der API-Teil gestartet wird, zeigen das Protokoll und das Gerät an, dass alles eingeschaltet ist, aber es geht nicht an (ich vermute, dass die "keyble"-Bibliothek nicht geladen wird).

Ein letzter Vorschlag: Da der esp32 vor den 5 Minuten ein Signal sendet, um die Bluetooth-Verbindung aktiv zu halten, würde ich eine Schaltereinheit einfügen, die die Aufrechterhaltung der Verbindung aktiviert und deaktiviert. Zu guter Letzt würde ich auch einen Schalter einfügen, der es ermöglicht, den esp32 im Falle von Problemen vom Home-Assistenten aus neu zu starten.

Wenn ich Sie beim esphome-Teil unterstützen kann, stehe ich Ihnen gerne zur Verfügung (ich bin Italiener). Vielen Dank

Übersetzt mit DeepL.com (kostenlose Version)

#7555242
Lesenswert?

Antonello M. schrieb:

Danke Dirk für die schöne Arbeit. Ich möchte auf ein paar Probleme hinweisen, die dein Projekt unbrauchbar machen (Stand heute, 9. Dezember)

  1. Die letzte Version hat zwei Probleme im Code (leicht zu lösen): A: Dieser Teil des Codes ist innerhalb der ap-Funktion eingerückt, sollte aber einfach unter wifi stehen

Use below to apply saved input parameters on boot

1
on_connect:
2
  - eqiva_key_ble.connect:
3
      mac_address: !lambda 'return id(mac_address).state;'
4
      user_id: !lambda 'return id(user_id).state;'
5
      user_key: !lambda 'return id(user_key).state;'

B: Die Entität mac_address unter text sensor kann nicht den gleichen Namen unter text haben

  1. Die zuletzt geladene Version erlaubt es nicht, die Benutzerkennung und den Schlüssel über die Webschnittstelle einzugeben (Sie müssten entweder das Pairing erneut durchführen oder die Daten in die Firmware eingeben.

  2. Bei der Erstinstallation funktioniert der Code perfekt, aber beim ersten Neustart, wenn der API-Teil gestartet wird, zeigen das Protokoll und das Gerät an, dass alles eingeschaltet ist, aber es geht nicht an (ich vermute, dass die "keyble"-Bibliothek nicht geladen wird).

Ein letzter Vorschlag: Da der esp32 vor den 5 Minuten ein Signal sendet, um die Bluetooth-Verbindung aktiv zu halten, würde ich eine Schaltereinheit einfügen, die die Aufrechterhaltung der Verbindung aktiviert und deaktiviert. Zu guter Letzt würde ich auch einen Schalter einfügen, der es ermöglicht, den esp32 im Falle von Problemen vom Home-Assistenten aus neu zu starten.

Wenn ich Sie beim esphome-Teil unterstützen kann, stehe ich Ihnen gerne zur Verfügung (ich bin Italiener). Vielen Dank

Übersetzt mit DeepL.com (kostenlose Version)

  1. Ist ein Bug des web_server -> "local: false" setzen

  2. Es wird kein keyble Lib geladen. Code sollte funktionieren. Am besten einmal yaml Posten zum Prüfen

Das Intervall zum abfragen des Status ist lediglich ein Beispiel. Wie genau man es machen möchte ist hier dem Nutzer überlassen. Die yaml kann ja jeder anpassen wie er möchte .

#7555677
Lesenswert?

Moin, eine Frage, würde so was nicht funktionieren? klappt iwie nicht wie es mir vorstelle

1
lock_action:
2
      - eqiva_key_ble.connect:
3
          mac_address: 00:12:34:56:42:88
4
          user_id: 1
5
          user_key: 12345678636F6763386A726E33746F35
6
      - eqiva_key_ble.lock:
7
      - eqiva_key_ble.disconnect:

bei mir spinnt es iwie allgemein, ich würde gerne Dauer Verbindung lassen, aber ich merke dass es morgens nicht ansprechbar ist, Verbindung wird iwie verloren oder so. weiss nicht genau

oder wie kann ich es am besten machen, wenn ich die Verbindung immer trenne, aber dann wenn ich in HA den Lock schließe oder öffne, dass es dann zuerst connected und zum Schluss disconnected? Automation ist klar, aber ohne geht es iwie? zB direkt in esphome?

#7555703
Lesenswert?

Ich werde Ihnen meine Konfiguration mitteilen und die yaml-Datei anhängen:

ESP32 Modell AZ-Delivery https://docs.platformio.org/en/latest/boards/espressif32/az-delivery-devkit-v4.html

Wie ich schon sagte, funktioniert das Gerät am Ende der Firmware-Installation perfekt. Aber sobald Sie es neu starten oder ab- und wieder anstecken, funktioniert es nicht mehr. Das Gerät wird auf EspHome als verbunden angezeigt, ist aber nicht über das Webportal erreichbar und die Entitäten sind nicht über den Home Assistant erreichbar. Es kann jedoch über Wireless mit EspHome geflasht werden.

Ich füge mein yaml und unten die Protokolldatei bei.

INFO ESPHome 2023.11.6 INFO Reading configuration /config/esphome/esphome-web-aa79f0.yaml... INFO Detected timezone 'Europe/Rome' INFO Starting log output from esphome-web-aa79f0.local using esphome API INFO Successfully connected to esphome-web-aa79f0 in 0.574s INFO Successful handshake with esphome-web-aa79f0 in 0.107s [02:32:29][I][app:102]: ESPHome version 2023.11.6 compiled on Dec 8 2023, 11:10:43 [02:32:29][C][wifi:559]: WiFi: [02:32:29][C][wifi:391]: Local MAC: 08:3A:F2:AA:79:F0 [02:32:29][C][wifi:396]: SSID: 'CasaMesserangeli'[redacted] [02:32:29][C][wifi:397]: IP Address: 192.168.178.117 [02:32:29][C][wifi:399]: BSSID: 3C:37:12:05:C1:85[redacted] [02:32:29][C][wifi:400]: Hostname: 'esphome-web-aa79f0' [02:32:29][C][wifi:402]: Signal strength: -51 dB ▂▄▆█ [02:32:29][C][wifi:406]: Channel: 1 [02:32:29][C][wifi:407]: Subnet: 255.255.255.0 [02:32:29][C][wifi:408]: Gateway: 192.168.178.1 [02:32:29][C][wifi:409]: DNS1: 192.168.178.1 [02:32:29][C][wifi:410]: DNS2: 0.0.0.0 [02:32:29][C][logger:416]: Logger: [02:32:29][C][logger:417]: Level: DEBUG [02:32:29][C][logger:418]: Log Baud Rate: 115200 [02:32:29][C][logger:420]: Hardware UART: UART0 [02:32:29][C][captive_portal:088]: Captive Portal: [02:32:29][C][mdns:115]: mDNS: [02:32:29][C][mdns:116]: Hostname: esphome-web-aa79f0 [02:32:29][C][ota:097]: Over-The-Air Updates: [02:32:29][C][ota:098]: Address: esphome-web-aa79f0.local:3232 [02:32:29][W][ota:107]: Last Boot was an unhandled reset, will proceed to safe mode in 8 restarts [02:32:29][C][api:139]: API Server: [02:32:29][C][api:140]: Address: esphome-web-aa79f0.local:6053 [02:32:29][C][api:142]: Using noise encryption: YES WARNING esphome-web-aa79f0: Connection error occurred: [Errno 104] Connection reset by peer INFO Processing unexpected disconnect from ESPHome API for esphome-web-aa79f0 WARNING Disconnected from API INFO Successfully connected to esphome-web-aa79f0 in 0.454s INFO Successful handshake with esphome-web-aa79f0 in 0.113s [02:37:27][D][api:102]: Accepted 192.168.178.200 [02:37:27][W][component:214]: Component api took a long time for an operation (0.05 s). [02:37:27][W][component:215]: Components should block for at most 20-30ms. [02:37:28][D][api.connection:1089]: Home Assistant 2023.12.1 (192.168.178.200): Connected successfully [02:41:49][I][ota:117]: Boot seems successful, resetting boot loop counter. [02:41:49][D][esp32.preferences:114]: Saving 1 preferences to flash... [02:41:49][D][esp32.preferences:143]: Saving 1 preferences to flash: 0 cached, 1 written, 0 failed

Angehängte Dateien:
#7555761
Lesenswert?

Artur K. schrieb:

Moin, eine Frage, würde so was nicht funktionieren? klappt iwie nicht wie es mir vorstelle

1 lock_action:

2 - eqiva_key_ble.connect:

3 mac_address: 00:12:34:56:42:88

4 user_id: 1

5 user_key: 12345678636F6763386A726E33746F35

6 - eqiva_key_ble.lock:

7 - eqiva_key_ble.disconnect: [...] aber ohne geht es iwie? zB direkt in esphome?

Disconnect kommt zu früh. müsstest erst machen nachdem sich der Lock Status geändert hat oder einfach nach nem 30 Sekunden delay.

Evtl auch einbauen, dass er erst BT Scan macht wenn er mit dem WiFi verbunden ist und bei disconnect wieder Scan deaktivieren

#7555767
Lesenswert?

Dirk schrieb:

Evtl auch einbauen, dass er erst BT Scan macht wenn er mit dem WiFi verbunden ist und bei disconnect wieder Scan deaktivieren

Wie mache ich das mit scan genau, oder bzw link wo ich das nachlesen kann.

Habe momentan auch bluetooth proxy eingebaut. Aber Probleme nach x Stunden kamen auch ohne bluetooth proxy. Eventuell esp restarten noch 24 Stunden

#7555820
Lesenswert?

Artur K. schrieb:

Dirk schrieb:

Evtl auch einbauen, dass er erst BT Scan macht wenn er mit dem WiFi verbunden ist und bei disconnect wieder Scan deaktivieren

Wie mache ich das mit scan genau, oder bzw link wo ich das nachlesen kann. Habe momentan auch bluetooth proxy eingebaut. Aber Probleme nach x Stunden kamen auch ohne bluetooth proxy. Eventuell esp restarten noch 24 Stunden

Steht in der Beispiel yaml. WLAN onconnet/disconnect und beim starten Initial nicht aktivieren

#7556310
Lesenswert?

Problem gelöst. Alles befand sich im esp32-Speicher.

Ich flashed eine andere Firmware (tasmota Fabrik) und löschte den gesamten Blitz.

Ich habe dann neu geflasht die kompilierte Firmware mit NodeMCU PyFlasher und jetzt sogar Neustart das Gerät bootet korrekt.

Ich danke Ihnen für Ihre Geduld und Verfügbarkeit.

#7556657
Lesenswert?

Heute morgen wieder passiert, steht ESTABLISHED, Schloß hatte ich Manuel aufgemacht, auf lock unlock reagierte nicht, Status aufgerufen, auch nichts passiert, stand die ganze Zeile Status Locked. Disconnect Funktionierte, auch connect klappte. Einmal neugestartet und geht alles. Ich kann natürlich es mal Nachts Neustart lassen. Aber möchte trotzdem rausfinden warum das so passiert. Betreibt hier jemanden es auch mit Dauerverbindung?

#7556704
Lesenswert?

Artur K. schrieb:

Heute morgen wieder passiert, steht ESTABLISHED, Schloß hatte ich Manuel aufgemacht, auf lock unlock reagierte nicht, Status aufgerufen, auch nichts passiert, stand die ganze Zeile Status Locked. Disconnect Funktionierte, auch connect klappte. Einmal neugestartet und geht alles. Ich kann natürlich es mal Nachts Neustart lassen. Aber möchte trotzdem rausfinden warum das so passiert. Betreibt hier jemanden es auch mit Dauerverbindung?

Ja ich, hatte bisher nicht das Problem.

Wie lange lief er ohne Probleme? In welchem Intervall aktualisierst du den Status?

Persönliche Seite #7557013
Lesenswert?

Hallo,

ich war nun einige Tage mit anderen Dingen beschäftigt, aber es läuft bei uns nun schon eine Weile wie es soll.

Das letzte mal geflasht habe ich wohl am 7.12. danach musste ich einmal den ESP neu starten, aber seitdem war es zuverlässig.

Das 4min Interval habe ich aus dem Beispiel kopiert. Ich kann das Schloss aktuell schließen.

Viele Grüße Philipp

PS: Sollte ich die SW noch einmal aktualisieren?

#7557256
Lesenswert?

Also, gerade wieder passier, nach 5 Stunden, wenn ich lock oder unlock drücke

1
 kommt in log [eqiva_key_ble:358]  
2
Waiting for connection...

Eine Idee? Liegt vll am Schloß oder esp32?

Erst gerade aufgefallen

1
 [eqiva_key_ble:073]  
2
ESP_GATTC_WRITE_DESCR_EVT
3
21:16:35  [D]  [esp-idf:000]  
4
[0;31mE (17830464) BT_APPL: service change write ccc failed
5
21:16:45  [I]  [eqiva_key_ble:358]  
6
Waiting for connection..
#7557266
Lesenswert?

Artur K. schrieb:

Also, gerade wieder passier, nach 5 Stunden, wenn ich lock oder unlock drücke

1 kommt in log [eqiva_key_ble:358]

2 Waiting for connection...

Eine Idee? Liegt vll am Schloß oder esp32? Erst gerade aufgefallen

1 [eqiva_key_ble:073]

2 ESP_GATTC_WRITE_DESCR_EVT

3 21:16:35 [D] [esp-idf:000]

4 [0;31mE (17830464) BT_APPL: service change write ccc failed

5 21:16:45 [I] [eqiva_key_ble:358]

6 Waiting for connection..

Waiting for connection heist er ist noch nicht verbunden oder hat die nonce noch nicht ausgetauscht.

Poste mal deine yaml.

Den write ccc error bekomme ich auch immer. Das scheint normal zu sein.

#7557270
Lesenswert?

1
esphome:
2
  name: eqiva-lock
3
  friendly_name: Eqiva Lock
4

5
esp32:
6
  board: wemos_d1_mini32
7
  framework:
8
    type: esp-idf 
9

10
logger:
11

12
api:
13
  encryption:
14
    key: !secret api_encryption_key
15
  services:
16
  - service: settings
17
    variables:
18
      turn_left: bool
19
      key_horizontal: bool
20
      lock_turns: int
21
    then:
22
      - eqiva_key_ble.settings:
23
          turn_left: !lambda 'return turn_left;'
24
          key_horizontal: !lambda 'return key_horizontal;'
25
          lock_turns: !lambda 'return lock_turns;'
26

27
  - service: fastconnect
28
    then:
29
      - eqiva_key_ble.connect:
30
          mac_address: 00:1a:22:18:3c:76
31
          user_id: 1
32
          user_key: 601dde3b2904999e289f1b1079c258fe
33

34
  - service: connect
35
    variables:
36
      mac_address: string
37
      user_id: int
38
      user_key: string
39
    then:
40
      - eqiva_key_ble.connect:
41
          mac_address: !lambda 'return mac_address;'
42
          user_id: !lambda 'return user_id;'
43
          user_key: !lambda 'return user_key;'
44
  - service: disconnect
45
    then:
46
      - eqiva_key_ble.disconnect:
47
  - service: pair
48
    variables:
49
      card_key: string
50
    then:
51
      - eqiva_key_ble.pair:
52
          card_key: !lambda 'return card_key;'
53
  - service: lock
54
    then:
55
      - eqiva_key_ble.lock:
56
  - service: unlock
57
    then:
58
      - eqiva_key_ble.unlock:
59
  - service: open
60
    then:
61
      - eqiva_key_ble.open:
62
  - service: status
63
    then:
64
      - eqiva_key_ble.status:
65

66
ota:
67
  password: !secret esphome_api_password
68

69
wifi:
70
  ssid: !secret wifi_ssid_salon
71
  password: !secret wifi_password
72
  ap:
73
    ssid: "key-ble Fallback Hotspot"
74
    password: "hvkiA8QRZbD8"
75
  # Use below to apply saved input parameters on boot
76
  on_connect:
77
    - eqiva_key_ble.connect:
78
          mac_address: 00:1a:22:18:3c:76
79
          user_id: 1
80
          user_key: 601dde3b2904999e289f1b1079c258fe
81
        #mac_address: !lambda 'return id(mac_address).state;' 
82
        #user_id: !lambda 'return id(user_id).state;'
83
        #user_key: !lambda 'return id(user_key).state;'
84
      
85

86
#button, number and text input for pairing and setting mac/user_id/user-key via UI
87
button:
88
  - platform: restart
89
    name: "Eqiva Lock Restart"
90
  - platform: safe_mode
91
    name: "Eqiava Lock Restart (Safe Mode)"  
92
  - platform: template
93
    id: ble_fastconnect
94
    name: "Fast Connect"
95
    icon: "mdi:bluetooth-connect"
96
    on_press:
97
      - eqiva_key_ble.connect:
98
          mac_address: 00:1a:22:18:3c:76
99
          user_id: 1
100
          user_key: 601dde3b2904999e289f1b1079c258fe
101
  - platform: template
102
    id: ble_lock_lock
103
    name: "Lock lock"
104
    icon: "mdi:lock"
105
    on_press:
106
      - eqiva_key_ble.lock:
107
  - platform: template
108
    id: ble_lock_unlock
109
    name: "Lock unlock"
110
    icon: "mdi:lock-open"
111
    on_press:
112
      - eqiva_key_ble.unlock:
113
  - platform: template
114
    id: ble_settings
115
    name: BLE Settings _Save_
116
    icon: "mdi:content-save"
117
    disabled_by_default: true
118
    on_press:
119
      - eqiva_key_ble.connect:
120
          mac_address: !lambda 'return id(mac_address).state;' 
121
          user_id: !lambda 'return id(user_id).state;'
122
          user_key: !lambda 'return id(user_key).state;'
123
  
124
  - platform: template
125
    id: ble_disconnect
126
    name: Disconnect
127
    icon: "mdi:bluetooth-off"
128
    on_press:
129
      - eqiva_key_ble.disconnect:
130
  - platform: template
131
    id: ble_pair
132
    name: BLE Pair _Start_
133
    icon: "mdi:check-underline"
134
    disabled_by_default: true
135
    on_press:
136
      - eqiva_key_ble.pair:
137
          card_key: !lambda 'return id(card_key).state;' 
138

139
  - platform: template
140
    id: lock_settings
141
    name: Lock Settings _Apply_
142
    icon: "mdi:check-underline"
143
    on_press:
144
      - eqiva_key_ble.settings:
145
          turn_left: !lambda 'return id(direction).state == "Left";' 
146
          key_horizontal: !lambda 'return id(position).state == "Horizontal";'
147
          lock_turns: !lambda 'return atoi(id(turns).state.c_str());'
148
    disabled_by_default: true
149
  - platform: template
150
    id: ble_status
151
    name: Status
152
    icon: "mdi:bluetooth"
153
    on_press:
154
      - eqiva_key_ble.status:
155
          
156
number:
157
  - platform: template
158
    mode: box
159
    name: BLE Settings User ID
160
    id: user_id
161
    max_value: 7
162
    min_value: 0
163
    step: 1
164
    optimistic: true
165
    restore_value: true
166
    disabled_by_default: true
167

168
text:
169
  - platform: template
170
    mode: text
171
    name: BLE Settings Mac Address
172
    id: mac_addr
173
    optimistic: true
174
    restore_value: true
175
    disabled_by_default: true
176
  - platform: template
177
    mode: text
178
    name: BLE Settings User Key
179
    id: user_key
180
    optimistic: true
181
    restore_value: true
182
    disabled_by_default: true
183
  - platform: template
184
    mode: text
185
    name: BLE Pair Card Key
186
    id: card_key
187
    optimistic: true
188
    disabled_by_default: true
189

190
select:
191
  - platform: template
192
    name: Lock Settings Close Direction
193
    id: direction
194
    options:
195
     - "Left"
196
     - "Right"
197
    optimistic: true
198
    disabled_by_default: true
199
  - platform: template
200
    name: Lock Settings Key Position
201
    id: position
202
    options:
203
     - "Vertical"
204
     - "Horizontal"
205
    optimistic: true
206
    disabled_by_default: true
207
  - platform: template
208
    name: Lock Settings Turns
209
    id: turns
210
    options:
211
     - "1"
212
     - "2"
213
     - "3"
214
     - "4"
215
    optimistic: true
216
    disabled_by_default: true
217

218
captive_portal:
219

220
esp32_ble_tracker:
221
  scan_parameters:
222
    window: 300ms
223

224
#bluetooth_proxy:
225
  #active: true   
226

227
#binary_sensor:
228
  #- platform: ble_presence
229
    #ibeacon_uuid: '5058f82a-fca1-419b-827b-a18dcae463b9'
230
    #name: "Artur S23U Garage"
231

232
web_server:
233
  include_internal: true
234
  local: false
235
  port: 80
236

237
external_components:
238
  source: github://digaus/esphome-components-eqiva
239
  refresh: 0s
240

241
eqiva_ble:
242

243
eqiva_key_ble:
244
  id: key_ble
245
  mac_address: 00:1a:22:18:3c:76
246
  user_id: 1
247
  user_key: 601dde3b2904999e289f1b1079c258fe
248

249
text_sensor: 
250
  - platform: eqiva_key_ble
251
    mac_address: 
252
      name: "Mac Address"
253
      id: mac_address
254
    lock_status: 
255
      name: "Lock Status"
256
      id: lock_status
257
    low_battery:
258
      name: "Low Battery"
259
    lock_ble_state:
260
      name: "Lock BLE State"
261
    user_id:
262
      name: "User ID"
263
    user_key:
264
      name: "User Key"
265
    # on_raw_value:
266
            # then:   Do stuff on state change (!lambda "return x") 
267
time:
268
  - platform: sntp
269
    # ...
270
    on_time:
271
      # Every 5 minutes
272
      - seconds: 0
273
        minutes: /4
274
        then:
275
          - eqiva_key_ble.status:
276

277
lock:
278
  - platform: template
279
    name: "Lock"
280
    lambda: |-
281
      if (id(lock_status).state == "LOCKED") {
282
        return LOCK_STATE_LOCKED;
283
      } else if (id(lock_status).state == "UNLOCKED" || id(lock_status).state == "OPENED") {
284
        return LOCK_STATE_UNLOCKED;
285
      } else if(id(lock_status).state == "MOVING") {
286
        return {};
287
      } else if (id(lock_status).state == "UNKNOWN") {
288
        return LOCK_STATE_JAMMED;
289
      } 
290
      return LOCK_STATE_LOCKED;
291
    lock_action:
292
      #- eqiva_key_ble.connect:
293
          #mac_address: 00:1a:22:18:3c:76
294
          #user_id: 1
295
          #user_key: 601dde3b2904999e289f1b1079c258fe
296
      - eqiva_key_ble.lock:
297
      #- eqiva_key_ble.disconnect:
298
    unlock_action:
299
      #- eqiva_key_ble.connect:
300
          #mac_address: 00:1a:22:18:3c:76
301
          #user_id: 1
302
          #user_key: 601dde3b2904999e289f1b1079c258fe
303
      - eqiva_key_ble.unlock:
304
      #- eqiva_key_ble.disconnect:
305
    open_action:
306
      #- eqiva_key_ble.connect:
307
          #mac_address: 00:1a:22:18:3c:76
308
          #user_id: 1
309
          #user_key: 601dde3b2904999e289f1b1079c258fe
310
      - eqiva_key_ble.open:
311
      #- eqiva_key_ble.disconnect:

board gerade geändert, hatte esp32dev obs daran liegt? Habe esp32 d1 mini von azdelivery

#7557878
Lesenswert?

Artur K. schrieb:

Artur K. schrieb:

Bericht. Board geänderten und das mit wifi was du meintest. Heute morgen istv noch alles gut.

Bericht, Nach der Arbeit die gleiche Geschichte. Daa mit continues: false hatte ich noch nicht.

Und vllt mal den Uptime sensor einbauen. Dann siehst du ob er neu gestartet hat: https://esphome.io/components/sensor/uptime.html

Angehängte Dateien:
#7557937
Lesenswert?

Artur K. schrieb:

Dirk schrieb:

Ne wird ja beim onconnect wieder auf true gesetzt

bei onconnect von Wifi? sehe ich nicht im yaml, und habe jetzt continues: false gesetzt, bei esp32_ble_tracker richtig? und es wollte nicht mit Schloss sich verbinden, stand die ganze zeit waiting for connection

Ja bei onconnect muss du das continues: true setzen

#7557963
Lesenswert?

Artur K. schrieb:

Dirk schrieb:

Steht auch in der Beispiel yaml Wenn du das nicht drin hattest ist klar, dass es nicht funktioniert hat. Dann hat er sich beim WiFi Verlust disconnected und nicht wieder neu verbunden

oh sorry, die ganze Zeit falsch geguckt, dachte zuerst es betrifft nur ESP32 C3

Beim C3 geht's ohne auf jeden Fall nicht, bei den anderen Boards wahrscheinlich auch sinnvoll

#7558481
Lesenswert?

Uptime 5 Stunden, esp läuft wie gewohnt weiter, nur öffnen schließen tut nicht. Waiting for connection obwohl established. Wenn ich zuhause bin versuche ich direkt mit app mich verbinden und öffnen. Sonst muss ich wohl auf dauer Verbindung verzichten. Hane schon mir 2 Buttons erstellt die korrekt connecten öffnen/schließen und disconnecten.

#7558572
Lesenswert?

Dirk schrieb:

Poste mal deine aktuelle yaml

1
 esphome:
2
  name: eqiva-bridge
3
  friendly_name: Eqiva Bridge
4

5
esp32:
6
  board: wemos_d1_mini32
7
  framework:
8
    type: esp-idf
9

10
logger:
11

12
api:
13
  encryption:
14
    key: !secret api_encryption_key
15
  services:
16
  - service: settings
17
    variables:
18
      turn_left: bool
19
      key_horizontal: bool
20
      lock_turns: int
21
    then:
22
      - eqiva_key_ble.settings:
23
          turn_left: !lambda 'return turn_left;'
24
          key_horizontal: !lambda 'return key_horizontal;'
25
          lock_turns: !lambda 'return lock_turns;'
26

27
  - service: fastconnect
28
    then:
29
      - eqiva_key_ble.connect:
30
          mac_address: 00:1a:22:18:3c:76
31
          user_id: 1
32
          user_key: 601dde3b2904999e289f1b1079c258fe
33

34
  - service: connect
35
    variables:
36
      mac_address: string
37
      user_id: int
38
      user_key: string
39
    then:
40
      - eqiva_key_ble.connect:
41
          mac_address: !lambda 'return mac_address;'
42
          user_id: !lambda 'return user_id;'
43
          user_key: !lambda 'return user_key;'
44
  - service: disconnect
45
    then:
46
      - eqiva_key_ble.disconnect:
47
  - service: pair
48
    variables:
49
      card_key: string
50
    then:
51
      - eqiva_key_ble.pair:
52
          card_key: !lambda 'return card_key;'
53
  - service: lock
54
    then:
55
      - eqiva_key_ble.lock:
56
  - service: unlock
57
    then:
58
      - eqiva_key_ble.unlock:
59
  - service: open
60
    then:
61
      - eqiva_key_ble.open:
62
  - service: status
63
    then:
64
      - eqiva_key_ble.status:
65

66
ota:
67
  password: !secret esphome_api_password
68

69
wifi:
70
  ssid: !secret wifi_ssid_salon
71
  password: !secret wifi_password
72
  ap:
73
    ssid: "key-ble Fallback Hotspot"
74
    password: "hvkiA8QRZbD8"
75
  # Use below to apply saved input parameters on boot
76
  on_connect:
77
    - eqiva_key_ble.connect:
78
        mac_address: 00:1a:22:18:3c:76
79
        user_id: 1
80
        user_key: 601dde3b2904999e289f1b1079c258fe
81
        #mac_address: !lambda 'return id(mac_address).state;' 
82
        #user_id: !lambda 'return id(user_id).state;'
83
        #user_key: !lambda 'return id(user_key).state;'
84
    - esp32_ble_tracker.start_scan:
85
        continuous: true
86
  on_disconnect:
87
     - esp32_ble_tracker.stop_scan:
88
      
89

90
#button, number and text input for pairing and setting mac/user_id/user-key via UI
91
button:
92
  - platform: restart
93
    name: "Eqiva Lock Restart"
94
  - platform: safe_mode
95
    name: "Eqiava Lock Restart (Safe Mode)"  
96
  - platform: template
97
    id: ble_fastconnect
98
    name: "Fast Connect"
99
    icon: "mdi:bluetooth-connect"
100
    on_press:
101
      - eqiva_key_ble.connect:
102
          mac_address: 00:1a:22:18:3c:76
103
          user_id: 1
104
          user_key: 601dde3b2904999e289f1b1079c258fe
105
  - platform: template
106
    id: ble_lock_lock
107
    name: "Lock lock"
108
    icon: "mdi:lock"
109
    on_press:
110
      - eqiva_key_ble.lock:
111
  - platform: template
112
    id: ble_lock_unlock
113
    name: "Lock unlock"
114
    icon: "mdi:lock-open"
115
    on_press:
116
      - eqiva_key_ble.unlock:
117
  - platform: template
118
    id: lock_disconnect
119
    name: "lock"
120
    icon: "mdi:lock"
121
    on_press:
122
      - eqiva_key_ble.connect:
123
          mac_address: 00:1a:22:18:3c:76
124
          user_id: 1
125
          user_key: 601dde3b2904999e289f1b1079c258fe
126
      - wait_until:
127
          condition:
128
            text_sensor.state:
129
              id: lock_ble_state
130
              state: 'ESTABLISHED'
131
      - eqiva_key_ble.lock:
132
      - wait_until:
133
          condition:
134
            text_sensor.state:
135
              id: lock_status
136
              state: 'LOCKED'
137
      - eqiva_key_ble.disconnect:
138
  - platform: template
139
    id: unlock_disconnect
140
    name: "unlock"
141
    icon: "mdi:lock-open"
142
    on_press:
143
      - eqiva_key_ble.connect:
144
          mac_address: 00:1a:22:18:3c:76
145
          user_id: 1
146
          user_key: 601dde3b2904999e289f1b1079c258fe
147
      - wait_until:
148
          condition:
149
            text_sensor.state:
150
              id: lock_ble_state
151
              state: 'ESTABLISHED'
152
      - eqiva_key_ble.unlock:
153
      - wait_until:
154
          condition:
155
            text_sensor.state:
156
              id: lock_status
157
              state: 'UNLOCKED'
158
      - eqiva_key_ble.disconnect:
159
  - platform: template
160
    id: ble_settings
161
    name: BLE Settings _Save_
162
    icon: "mdi:content-save"
163
    disabled_by_default: true
164
    on_press:
165
      - eqiva_key_ble.connect:
166
          mac_address: !lambda 'return id(mac_address).state;' 
167
          user_id: !lambda 'return id(user_id).state;'
168
          user_key: !lambda 'return id(user_key).state;'
169
  
170
  - platform: template
171
    id: ble_disconnect
172
    name: Disconnect
173
    icon: "mdi:bluetooth-off"
174
    on_press:
175
      - eqiva_key_ble.disconnect:
176
  - platform: template
177
    id: ble_pair
178
    name: BLE Pair _Start_
179
    icon: "mdi:check-underline"
180
    disabled_by_default: true
181
    on_press:
182
      - eqiva_key_ble.pair:
183
          card_key: !lambda 'return id(card_key).state;' 
184

185
  - platform: template
186
    id: lock_settings
187
    name: Lock Settings _Apply_
188
    icon: "mdi:check-underline"
189
    on_press:
190
      - eqiva_key_ble.settings:
191
          turn_left: !lambda 'return id(direction).state == "Left";' 
192
          key_horizontal: !lambda 'return id(position).state == "Horizontal";'
193
          lock_turns: !lambda 'return atoi(id(turns).state.c_str());'
194
    disabled_by_default: true
195
  - platform: template
196
    id: ble_status
197
    name: Status
198
    icon: "mdi:bluetooth"
199
    on_press:
200
      - eqiva_key_ble.status:
201
          
202
number:
203
  - platform: template
204
    mode: box
205
    name: BLE Settings User ID
206
    id: user_id
207
    max_value: 7
208
    min_value: 0
209
    step: 1
210
    optimistic: true
211
    restore_value: true
212
    disabled_by_default: true
213

214
text:
215
  - platform: template
216
    mode: text
217
    name: BLE Settings Mac Address
218
    id: mac_addr
219
    optimistic: true
220
    restore_value: true
221
    disabled_by_default: true
222
  - platform: template
223
    mode: text
224
    name: BLE Settings User Key
225
    id: user_key
226
    optimistic: true
227
    restore_value: true
228
    disabled_by_default: true
229
  - platform: template
230
    mode: text
231
    name: BLE Pair Card Key
232
    id: card_key
233
    optimistic: true
234
    disabled_by_default: true
235

236
select:
237
  - platform: template
238
    name: Lock Settings Close Direction
239
    id: direction
240
    options:
241
     - "Left"
242
     - "Right"
243
    optimistic: true
244
    disabled_by_default: true
245
  - platform: template
246
    name: Lock Settings Key Position
247
    id: position
248
    options:
249
     - "Vertical"
250
     - "Horizontal"
251
    optimistic: true
252
    disabled_by_default: true
253
  - platform: template
254
    name: Lock Settings Turns
255
    id: turns
256
    options:
257
     - "1"
258
     - "2"
259
     - "3"
260
     - "4"
261
    optimistic: true
262
    disabled_by_default: true
263

264
sensor:
265
  - platform: uptime
266
    name: Uptime Sensor
267

268
captive_portal:
269

270
esp32_ble_tracker:
271
  scan_parameters:
272
    continuous: false
273
    window: 300ms
274

275
bluetooth_proxy:
276
  active: true   
277

278
binary_sensor:
279
  - platform: ble_presence
280
    ibeacon_uuid: '5058f82a-fca1-419b-827b-a18dcae463b9'
281
    name: "Artur S23U Garage"
282

283
web_server:
284
  include_internal: true
285
  local: false
286
  port: 80
287

288
external_components:
289
  source: github://digaus/esphome-components-eqiva
290
  refresh: 0s
291

292
eqiva_ble:
293

294
eqiva_key_ble:
295
  #id: key_ble
296
  #mac_address: 00:1a:22:18:3c:76
297
  #user_id: 1
298
  #user_key: 601dde3b2904999e289f1b1079c258fe
299

300
text_sensor: 
301
  - platform: eqiva_key_ble
302
    mac_address: 
303
      name: "Mac Address"
304
      id: mac_address
305
    lock_status: 
306
      name: "Lock Status"
307
      id: lock_status
308
    low_battery:
309
      name: "Low Battery"
310
    lock_ble_state:
311
      name: "Lock BLE State"
312
      id: lock_ble_state
313
    user_id:
314
      name: "User ID"
315
    user_key:
316
      name: "User Key"
317
    # on_raw_value:
318
            # then:   Do stuff on state change (!lambda "return x") 
319
time:
320
  - platform: sntp
321
    # ...
322
    on_time:
323
      # Every 5 minutes
324
      - seconds: 0
325
        minutes: /4
326
        then:
327
          - eqiva_key_ble.status:
328

329
lock:
330
  - platform: template
331
    name: "Lock"
332
    lambda: |-
333
      if (id(lock_status).state == "LOCKED") {
334
        return LOCK_STATE_LOCKED;
335
      } else if (id(lock_status).state == "UNLOCKED" || id(lock_status).state == "OPENED") {
336
        return LOCK_STATE_UNLOCKED;
337
      } else if(id(lock_status).state == "MOVING") {
338
        return {};
339
      } else if (id(lock_status).state == "UNKNOWN") {
340
        return LOCK_STATE_JAMMED;
341
      } 
342
      return LOCK_STATE_LOCKED;
343
    lock_action:
344
      #- eqiva_key_ble.connect:
345
          #mac_address: 00:1a:22:18:3c:76
346
          #user_id: 1
347
          #user_key: 601dde3b2904999e289f1b1079c258fe
348
      #- wait_until:
349
          #condition:
350
            #text_sensor.state:
351
              #id: lock_ble_state
352
              #state: 'ESTABLISHED'
353
      - eqiva_key_ble.lock:
354
      #- wait_until:
355
          #condition:
356
            #text_sensor.state:
357
              #id: lock_status
358
              #state: 'LOCKED'
359
      #- eqiva_key_ble.disconnect:
360
    unlock_action:
361
      #- eqiva_key_ble.connect:
362
          #mac_address: 00:1a:22:18:3c:76
363
          #user_id: 1
364
          #user_key: 601dde3b2904999e289f1b1079c258fe
365
      #- wait_until:
366
          #condition:
367
            #text_sensor.state:
368
              #id: lock_ble_state
369
              #state: 'ESTABLISHED'
370
      - eqiva_key_ble.unlock:
371
      #- wait_until:
372
          #condition:
373
            #text_sensor.state:
374
              #id: lock_status
375
              #state: 'UNLOCKED'
376
      #- eqiva_key_ble.disconnect:
#7558862
Lesenswert?

Fehler beim ota

1
src/esphome/components/eqiva_key_ble/eqiva_key_ble.cpp:358:21: error: format '%s' expects a matching 'char*' argument [-Werror=format=]
2
       ESP_LOGI(TAG, "Waiting for connection... (sendingNonce: %s) (remoteSessionNonce: %s) (remoteSessionNonce: %s) (clientStateEstablished: %s)", sendingNonce ? 'true' : 'false', clientState.remote_session_nonce.length() > 0 ? 'true' : 'false', this->state() == espbt::ClientState::ESTABLISHED ? 'true' : 'false');
3
                     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4
src/esphome/core/log.h:72:36: note: in definition of macro 'ESPHOME_LOG_FORMAT'
5
 #define ESPHOME_LOG_FORMAT(format) format
6
                                    ^~~~~~
7
src/esphome/core/log.h:151:28: note: in expansion of macro 'esph_log_i'
8
 #define ESP_LOGI(tag, ...) esph_log_i(tag, __VA_ARGS__)
9
                            ^~~~~~~~~~
10
src/esphome/components/eqiva_key_ble/eqiva_key_ble.cpp:358:7: note: in expansion of macro 'ESP_LOGI'
11
       ESP_LOGI(TAG, "Waiting for connection... (sendingNonce: %s) (remoteSessionNonce: %s) (remoteSessionNonce: %s) (clientStateEstablished: %s)", sendingNonce ? 'true' : 'false', clientState.remote_session_nonce.length() > 0 ? 'true' : 'false', this->state() == espbt::ClientState::ESTABLISHED ? 'true' : 'false');
12
       ^~~~~~~~
13
Compiling .pioenvs/eqiva-bridge/src/esphome/components/json/json_util.o
14
cc1plus: some warnings being treated as errors
15
*** [.pioenvs/eqiva-bridge/src/esphome/components/eqiva_key_ble/eqiva_key_ble.o] Error 1
16
========================== [FAILED] Took 4.87 seconds ==========================
#7558934
Lesenswert?

1
In file included from src/esphome/components/eqiva_key_ble/eqiva_key_ble.cpp:2:
2
src/esphome/components/eqiva_key_ble/eqiva_key_ble.cpp: In member function 'bool esphome::eqiva_key_ble::EqivaKeyBle::sendMessage(eQ3Message::Message*, bool)':
3
src/esphome/components/eqiva_key_ble/eqiva_key_ble.cpp:358:21: error: format '%s' expects a matching 'char*' argument [-Werror=format=]
4
       ESP_LOGI(TAG, "Waiting for connection... (sendingNonce: %s) (remoteSessionNonce: %s) (remoteSessionNonce: %s) (clientStateEstablished: %s)", sendingNonce ? "true" : "false", clientState.remote_session_nonce.length() > 0 ? "true" : "false", this->state() == espbt::ClientState::ESTABLISHED ? "true" : "false");
5
                     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
6
src/esphome/core/log.h:72:36: note: in definition of macro 'ESPHOME_LOG_FORMAT'
7
 #define ESPHOME_LOG_FORMAT(format) format
8
                                    ^~~~~~
9
src/esphome/core/log.h:151:28: note: in expansion of macro 'esph_log_i'
10
 #define ESP_LOGI(tag, ...) esph_log_i(tag, __VA_ARGS__)
11
                            ^~~~~~~~~~
12
src/esphome/components/eqiva_key_ble/eqiva_key_ble.cpp:358:7: note: in expansion of macro 'ESP_LOGI'
13
       ESP_LOGI(TAG, "Waiting for connection... (sendingNonce: %s) (remoteSessionNonce: %s) (remoteSessionNonce: %s) (clientStateEstablished: %s)", sendingNonce ? "true" : "false", clientState.remote_session_nonce.length() > 0 ? "true" : "false", this->state() == espbt::ClientState::ESTABLISHED ? "true" : "false");
14
       ^~~~~~~~
15
Compiling .pioenvs/eqiva-bridge/src/esphome/components/esp32_ble/ble_uuid.o
16
cc1plus: some warnings being treated as errors
17
Compiling .pioenvs/eqiva-bridge/src/esphome/components/esp32_ble_client/ble_characteristic.o
18
*** [.pioenvs/eqiva-bridge/src/esphome/components/eqiva_key_ble/eqiva_key_ble.o] Error 1
19
========================= [FAILED] Took 21.68 seconds =========================
#7559004
Lesenswert?

In file included from src/esphome/components/eqiva_key_ble/eqiva_key_ble.cpp:2: src/esphome/components/eqiva_key_ble/eqiva_key_ble.cpp: In member function 'bool esphome::eqiva_key_ble::EqivaKeyBle::sendMessage(eQ3Message::Message*, bool)': src/esphome/components/eqiva_key_ble/eqiva_key_ble.cpp:358:21: error: format '%d' expects a matching 'int' argument [-Werror=format=] ESP_LOGI(TAG, "Waiting for connection... (sendingNonce: %d) (remoteSessionNonce: %d) (remoteSessionNonce: %d) (clientStateEstablished: %d)", sendingNonce, clientState.remote_session_nonce.length() > 0, this->state() == espbt::ClientState::ESTABLISHED); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src/esphome/core/log.h:72:36: note: in definition of macro 'ESPHOME_LOG_FORMAT' #define ESPHOME_LOG_FORMAT(format) format ^~~~~~ src/esphome/core/log.h:151:28: note: in expansion of macro 'esph_log_i' #define ESP_LOGI(tag, ...) esph_log_i(tag, VA_ARGS) ^~~~~~~~~~ src/esphome/components/eqiva_key_ble/eqiva_key_ble.cpp:358:7: note: in expansion of macro 'ESP_LOGI' ESP_LOGI(TAG, "Waiting for connection... (sendingNonce: %d) (remoteSessionNonce: %d) (remoteSessionNonce: %d) (clientStateEstablished: %d)", sendingNonce, clientState.remote_session_nonce.length() > 0, this->state() == espbt::ClientState::ESTABLISHED); ^~~~~~~~ Compiling .pioenvs/eqiva-bridge/src/esphome/components/esp32_ble/ble_uuid.o cc1plus: some warnings being treated as errors *** [.pioenvs/eqiva-bridge/src/esphome/components/eqiva_key_ble/eqiva_key_ble.o] Error 1 ========================= [FAILED] Took 17.12 seconds =========================

#7562036
Lesenswert?

Versuche ist es so zu programmieren, dass es immer disconnected ist und nur bei Bedarf, connected. Bei Start habe ich es so

1
wifi:
2
  ssid: !secret wifi_ssid_salon
3
  password: !secret wifi_password
4
  on_connect:
5
    - eqiva_key_ble.connect:
6
        mac_address: 00:1a:22:18:3c:76
7
        user_id: 1
8
        user_key: 601dde3b2904999e289f1b1079c258fe
9
    - esp32_ble_tracker.start_scan:
10
        continuous: true
11
    - delay: 30s
12
    - eqiva_key_ble.disconnect:
13
  on_disconnect:
14
     - esp32_ble_tracker.stop_scan:

Wollte statt delay wait intil einbauen, aber nicht geschaft, wollte auch Status Unknown prüfen bei lock_status. Nur wenn Schloss nicht verbunden ist, scannt wr immer nach dem Schoss, ist das kein Problem? Oder soll ich da was machen?

#7564587
Lesenswert?

Hallo,

eine kurze Rückmeldung zur esphome Version: Das ganze läuft jetzt seit einigen Tagen stabil. Ich habe keine Probleme mit Abstürzen oder Verbindungsproblemen.

Allerdings rief mich mein Sohn gestern an und kam mit der App nicht ins Haus. Vermutlich hatte esphome gerade eine Verbindung.

Was muss ich machen, damit nicht permanent eine Verbindung besteht? Ich vermute, unten ist das .disconnect zu aktivieren.

1
    lock_action:
2
      - eqiva_key_ble.connect:
3
          mac_address: 00:x # Schuppen
4
          user_id: 1
5
          user_key: x
6
      - eqiva_key_ble.lock:
7
      #- eqiva_key_ble.disconnect:

Aber das alleine kann es ja nicht sein, denn es wurde lange vorher nicht gelockt.

Darüber hinaus habe ich

1
time:
2
  - platform: sntp
3
    timezone: Europe/Berlin
4
    servers:
5
     - 0.pool.ntp.org
6
     - 1.pool.ntp.org
7
     - 2.pool.ntp.org
8
    on_time:
9
      # Every 4 minutes get Status, to ensure quick reaction
10
      - cron: '00 /4 21-23 * * *'
11
        then:
12
          - eqiva_key_ble.status:

Ich vermute, dass dies die Verbindung aufrecht hält und ich auch hier ein .disconnect hinzufügen muss. Richtig?

Noch eine Frage Jetzt habe ich den Controller in einer Automatisierung genutzt. Funktioniert auch wunderbar. Was mich allerdings gewundert hat: Es werden mehrere Services angeboten, siehe Anhang. Warum gibt es da Lock 1 und Lock 2?

Gruß, Hendrik

Angehängte Dateien:
#7564597
Lesenswert?

Bzgl. der Locks war das lediglich ein Beispiel wie man zwei Schlösser ansteuern könnte.

An dem time Part müsstest du nichts ändern.

Das disconnect darfst du erst nach 15s Verzögerung machen. (siehe ein Post vor dir) dann sollte es klappen.

Allerdings musst du beachten, dass dann über den ESP die Ansteuerung ca. 12 Sekunden dauern kann.

Alternativ könntest du ja den benötigten Personen auch via HA App einen Zugriff gewähren und könntest so den ESP dauerhaft verbunden lassen.

Eine andere Möglichkeit wäre mit dem ESP auch einen BLE Controller zu erstellen und sich damit zu verbinden. Quasi dann als Bridge. So könnte man auch ein Schloss simulieren.

Aber das wäre nochmal ordentlich Aufwand.

#7564610
Lesenswert?

Hallo,

Bzgl. der Locks war das lediglich ein Beispiel wie man zwei Schlösser

ansteuern könnte.

Das heißt, das ist hart-kodiert und nicht irgendwie durch meine Yaml erzeugt? Ist aber (noch?) nicht vollständig implementiert?

Das disconnect darfst du erst nach 15s Verzögerung machen. (siehe ein

Post vor dir) dann sollte es klappen.

Allerdings musst du beachten, dass dann über den ESP die Ansteuerung ca.

12 Sekunden dauern kann.

D.h. wenn ich beide Locks bedienen will, muss ich den Delay wie lange machen? 15s ist natürlich recht unschön. Bei uns ist der Usecase, dass wir einen "Alles-Aus" taster haben. Da will man natürlich nicht 15s warten, ob die Tür zu ging (vielleicht steht sie ja auf).

Siehst du eine Möglichkeit, das noch zu verbessern?

An dem time Part müsstest du nichts ändern.

Dazu zwei Fragen:

  1. ich brauche den Status eigentlich nicht. Kann das dann nicht raus?
  2. war es nicht so, dass die Verbindung ca 4 minuten aufgebaut bleibt?

Gruß, Hendrik

#7564614
Lesenswert?

Hendrik F. schrieb:

Hallo,

Bzgl. der Locks war das lediglich ein Beispiel wie man zwei Schlösser

ansteuern könnte.

Das heißt, das ist hart-kodiert und nicht irgendwie durch meine Yaml erzeugt? Ist aber (noch?) nicht vollständig implementiert?

Das disconnect darfst du erst nach 15s Verzögerung machen. (siehe ein

Post vor dir) dann sollte es klappen.

Allerdings musst du beachten, dass dann über den ESP die Ansteuerung ca.

12 Sekunden dauern kann.

D.h. wenn ich beide Locks bedienen will, muss ich den Delay wie lange machen? 15s ist natürlich recht unschön. Bei uns ist der Usecase, dass wir einen "Alles-Aus" taster haben. Da will man natürlich nicht 15s warten, ob die Tür zu ging (vielleicht steht sie ja auf).

Siehst du eine Möglichkeit, das noch zu verbessern?

An dem time Part müsstest du nichts ändern.

Dazu zwei Fragen:

  1. ich brauche den Status eigentlich nicht. Kann das dann nicht raus?
  2. war es nicht so, dass die Verbindung ca 4 minuten aufgebaut bleibt?

Gruß, Hendrik

  1. Das zweite Lock sollte nur von deiner yaml kommen. Am besten mal auf github die readme anschauen

  2. Von "nicht verbunden" bis "verbunden und Befehl abgesendet" dauert es ca. 12 Sekunden. Schneller schafft der ESP das anscheinend nicht. Deshalb der Disconnect nach 15 Sekunden, da sonst der Befehl nicht durchgeht.

  3. Status kann raus wenn du ihn nicht brauchst.

#7564624
Lesenswert?

Verstehe. In meiner Logik muss ich aber dann etwas mehr als 15s verwenden, oder? Ich habe in der Yaml jetzt ein Disconnect nach 15s und in der Logik einen Abstand zwischen den Beiden Lock Befehlen von 20s.

Das Ganze ist ok für eine Logik. Aber was passiert, wenn meine Mitbewohnerin ungeduldig ist und die einzelnen Lock-Knöpfe in der App zu schnell hintereinander drückt?

Das zweite Lock sollte nur von deiner yaml kommen. Am besten mal auf

github die readme anschauen

Ich meine das "Sperre Lock 2". Das kommt nicht aus der YAML. In der YAML heißen sie Hintertür und Schuppen.

Gruß, Hendrik

#7565386
Lesenswert?

Hallo,

der Wlan-Empfang ist recht schlecht und ich würde mal einen ESP mit externer Antenne probieren. Hier gibt es mehrere: https://de.aliexpress.com/item/4000090521976.html ESP32-32U CP2102 ESP32-32U CH9102X

https://de.aliexpress.com/item/1005005727605631.html ESP-WROOM-32S CH340

Die zweite Bezeichnung ist ja nur der USB-Adapber. Ich denke, das ist nicht besonders relevant.

Aber 32U oder 32S?

Was ist zu empfehlen?

Gruß, Hendrik

#7576577
Lesenswert?

Hallo,

ich habe jetzt zwei neue ESPs (mit externen Antennen) - einer pro Lock. Jetzt würde ich gerne das Pairing aus dem ESP heraus ausprobieren.

Was ist denn der "Pair Card Key"? a) das was unter dem QR Code steht b) der dekodierte QR Code

Ich habe jetzt leider im Key-Feld zu viel stehen (es war sehr klein, ich habe da den Key (a) reinkopiert, nachdem (a) drin steht. Außerdem habe ich einen User_id eingegeben, obwohl der vom Lock vergeben werden soll. Wie kann ich diese Werte zurücksetzen?

Gruß, Hendrik

#7576588
Lesenswert?

Hendrik F. schrieb:

Hallo, ich habe jetzt zwei neue ESPs (mit externen Antennen) - einer pro Lock. Jetzt würde ich gerne das Pairing aus dem ESP heraus ausprobieren. Was ist denn der "Pair Card Key"? a) das was unter dem QR Code steht b) der dekodierte QR Code Ich habe jetzt leider im Key-Feld zu viel stehen (es war sehr klein, ich habe da den Key (a) reinkopiert, nachdem (a) drin steht. Außerdem habe ich einen User_id eingegeben, obwohl der vom Lock vergeben werden soll. Wie kann ich diese Werte zurücksetzen? Gruß, Hendrik

Card Key ist der QR-Code. Abscannen und einfügen. Danach auf Pair drücken (nachdem das Schloss verbunden ist und sich im pair Modus befindet)

Dabei sollte egal sein ob schon was in user_id drin steht.

#7576611
Lesenswert?

Hallo,

danke für deine Antworten. Das klappt leider nicht:

1
15:05:52  [I]  [eqiva_ble:015]  
2
Found Eqiva device (MAC: 00:1A:xx:xx:A6:96) (UUID): 0x1A00  (Name): KEY-BLE
3
15:05:53  [I]  [eqiva_ble:015]  
4
Found Eqiva device (MAC: 00:1A:xx:xx:A6:96) (UUID): 0x1A00  (Name): KEY-BLE
5
15:05:55  [I]  [eqiva_ble:015]  
6
Found Eqiva device (MAC: 00:1A:xx:xx:A6:96) (UUID): 0x1A00  (Name): KEY-BLE
7
15:05:57  [I]  [eqiva_ble:015]  
8
Found Eqiva device (MAC: 00:1A:xx:xx:A6:96) (UUID): 0x1A00  (Name): KEY-BLE
9
15:05:59  [D]  [button:010]  
10
'BLE Pair _Start_' Pressed.
11
15:05:59  [I]  [eqiva_key_ble:272]  
12
CardKey: 43axxxf04
13
15:05:59  [I]  [eqiva_key_ble:273]  
14
Please press and hold open button for 5 seconds to enter pairing mode
15
15:05:59  [I]  [eqiva_key_ble:274]  
16
Trying to pair...
17
15:05:59  [I]  [eqiva_key_ble:358]  
18
Waiting for connection...
19
15:05:59  [I]  [eqiva_key_ble:360]  
20
Reason: exchanging nonce
21
15:05:59  [I]  [eqiva_key_ble:363]  
22
Reason: no remote session
23
15:05:59  [I]  [eqiva_key_ble:366]  
24
Reason: lock not connected
25
15:06:00  [I]  [eqiva_ble:015]  
26
Found Eqiva device (MAC: 00:1A:xx:xx:A6:96) (UUID): 0x1A00  (Name): KEY-BLE
27
15:06:02  [I]  [eqiva_ble:015]  
28
Found Eqiva device (MAC: 00:1A:xx:xx:A6:96) (UUID): 0x1A00  (Name): KEY-BLE
29
15:06:03  [I]  [eqiva_ble:015]  
30
Found Eqiva device (MAC: 00:1A:xx:xx:A6:96) (UUID): 0x1A00  (Name): KEY-BLE
31
15:06:04  [I]  [eqiva_ble:015]  
32
Found Eqiva device (MAC: 00:1A:xx:xx:A6:96) (UUID): 0x1A00  (Name): KEY-BLE
33
15:06:07  [I]  [eqiva_ble:015]  
34
Found Eqiva device (MAC: 00:1A:xx:xx:A6:96) (UUID): 0x1A00  (Name): KEY-BLE
35
15:06:12  [I]  [eqiva_ble:015]  
36
Found Eqiva device (MAC: 00:1A:xx:xx:A6:96) (UUID): 0x1A00  (Name): KEY-BLE
37
15:06:15  [I]  [eqiva_ble:015]  
38
Found Eqiva device (MAC: 00:1A

Anbei auch ein Screenshot der Einstellungen.

Siehst du (m)einen Fehler?

Gruß, Hendrik

Angehängte Dateien:
#7576660
Lesenswert?

Hallo. zunächst einmal vielen Dank für die tolle Arbeit. Darf ich freundlicherweise eine Frage stellen? Um ESP32 mit Ethernet in Ihrem Projekt zu verwenden, reicht es aus, die WLAN-Konfiguration aus der Yaml-Datei zu entfernen und die erforderliche Ethernet-Konfiguration hinzuzufügen? Und wenn wir den WiFi-Bereich entfernen, wo sollten wir die Ereignisse „esp32_ble_tracker.start_scan“ und „esp32_ble_tracker.stop_scan“ hinzufügen?

#7576664
Lesenswert?

Ömer B. schrieb:

Hallo. zunächst einmal vielen Dank für die tolle Arbeit. Darf ich freundlicherweise eine Frage stellen? Um ESP32 mit Ethernet in Ihrem Projekt zu verwenden, reicht es aus, die WLAN-Konfiguration aus der Yaml-Datei zu entfernen und die erforderliche Ethernet-Konfiguration hinzuzufügen? Und wenn wir den WiFi-Bereich entfernen, wo sollten wir die Ereignisse „esp32_ble_tracker.start_scan“ und „esp32_ble_tracker.stop_scan“ hinzufügen?

Korrekt, kannst dann einfach beim esp32_ble_tracker das continuous: false rausnehmen.

Dann startet er automatisch.

#7576690
Lesenswert?

Hallo,

Ja, leuchtet gelb. 5s gedrückt.

Probier es mal öfter. Manchmal hat's bei mir auch nicht geklappt.

Ansonsten Mal 255 bei User ID eintragen.

1
17:13:08  [D]  [number:054]  
2
'BLE Settings User ID' - Setting number value
3
17:13:08  [W]  [number:109]  
4
'BLE Settings User ID' - Value 255.000000 must not be greater than maximum 7.000000

Das wird abgelehnt. Ich probiere es einfach noch ein paar mal. (Edit: Hat geklappt. Vielleicht nimmst du diesen "Trick" in die Readme auf). Kann ich sonst in HomeAssistant, oder dem UI von EspHome auf dem Controller die UserID und den UserKey eingeben?

Habe ich ja noch aus der keyble instanz.

Gruß, Hendrik

#7576927
Lesenswert?

Such mal in meinen Beiträgen weiter oben. Ansonsten suche ich es morgen für dich raus.

Aber im Prinzip hier https://github.com/digaus/esphome-components-eqiva/blob/f4d2a60f7a19bb7046d3d6498e1ab43e8050336a/example.yaml Ab Zeile 142 halt alles noch ein zweites Mal mit den Daten des zweiten Lock.

Aber du musst dann der Familie erklären nach der Bedienung des ersten Lock 15s zu warten, bevor das Zweite bedient wird.

#7578025
Lesenswert?

Hallo,

das Pairing hatte ja eigentlich funktioniert, aber das Schloss reagiert nicht (mehr? ich kann mich nicht erinnern, ob ich es probiert hatte). Im UI sehe ich, dass kein Key mehr eingetragen ist.

Im Log sehe ich: 17:55:35 [E] [eqiva_key_ble:239]
User Error: (Key: , ID: 6)

Siehe auch Bild im Anhang.

Woran kann das liegen?

Gruß, Hendrik

Angehängte Dateien:
#7582381
Lesenswert?

Kann mir jemand den Code für das Hinzufügen von zwei Schlössern nennen? Soweit ich das nach example.yaml verstehe, muss ich die folgenden Zeilen für die zweite Schlössern hinzufügen?

Wie wird das zweite Schloss gesteuert? Es gibt keine MAC-Adresse oder etwas anderes, das die Verbindung zwischen dem Code und dem Schloss herstellen kann.

1
lock:
2
  - platform: template
3
    name: "Lock 1"
4
    lambda: |-
5
      if (id(lock_status).state == "LOCKED") {
6
        return LOCK_STATE_LOCKED;
7
      } else if (id(lock_status).state == "UNLOCKED" || id(lock_status).state == "OPENED") {
8
        return LOCK_STATE_UNLOCKED;
9
      } else if(id(lock_status).state == "MOVING") {
10
        return {};
11
      } else if (id(lock_status).state == "UNKNOWN") {
12
        return LOCK_STATE_JAMMED;
13
      } 
14
      return LOCK_STATE_LOCKED;
15
    lock_action:
16
      - eqiva_key_ble.lock:
17
    unlock_action:
18
      - eqiva_key_ble.unlock:
19
    open_action:    
20
      - eqiva_key_ble.open:
21
  - platform: template
22
    name: "Lock 2"
23
    lambda: |-
24
      if (id(lock_status).state == "LOCKED") {
25
        return LOCK_STATE_LOCKED;
26
      } else if (id(lock_status).state == "UNLOCKED" || id(lock_status).state == "OPENED") {
27
        return LOCK_STATE_UNLOCKED;
28
      } else if(id(lock_status).state == "MOVING") {
29
        return {};
30
      } else if (id(lock_status).state == "UNKNOWN") {
31
        return LOCK_STATE_JAMMED;
32
      } 
33
      return LOCK_STATE_LOCKED;
34
    lock_action:
35
      - eqiva_key_ble.lock:
36
    unlock_action:
37
      - eqiva_key_ble.unlock:
38
    open_action:    
39
      - eqiva_key_ble.open:
#7586942
Lesenswert?

Hallo,

ich habe jetzt zwei Controller für meine zwei Locks. Ich verwende die Yaml von Github weitgehend unverändert - ich verwende lediglich einen eigenen Sensor um den Status des Locks zu ermitteln

Bei dem einen Lock funktioniert das wunderbar. Beim zweiten Lock funktioniert der Status, aber das Kommandieren nicht. Könntest du einmal auf die Logs schauen? https://pastebin.com/GcNLgjbx

Gruß, Hendrik

#7598647
Lesenswert?

Hallo,

ich habe nun rausgefunden, dass das eine Schloss dann wieder reagiert, wenn ich einmal "open" statt lock oder unlock mache.

Ich habe ja die Besonderheit, dass ich für den Status einen externen Sensor in der Schloss-Falle nutze.

Kann das damit zusammenhängen? Ich meine: Gibt es eine Überprüfung, dass kein "Unlock" gesendet wird, wenn der interne Status schon "Unlocked" ist?

Anbei ein Vergleich der beiden Schlösser im Log

Gruß, Hendrik

Angehängte Dateien:
#7611112
Lesenswert?

Dirk schrieb:

Bestimmt,

gibt auch noch ein Protokoll. Allerdings habe ich das nicht ausprobiert/implementiert da ich lieber eine besser Lösung mit einem Shelly Türkontakt und Automation löse.

Könnte ich auch, nur mein Gedanke war, dass wenn es lokal in dem Schloss passiert ist besser, weil wenn HA zB aus irgendeinen Grund nicht läuft, Schloss wird trotzdem schliessen.

#7623421
Lesenswert?

Hallo zusammen, ich habe gerade versucht https://github.com/tc-maxx/esp32-keyble zum laufen zu bringen. Leider gibt es Probleme beim aufbauen der BLE Verbindung. Der ESP32 Startet wegen einer Exception neu. Hat zufällig jemand Erfahrung damit? Serielle Ausgabe:

1
# WiFi disabled
2
*** get state ***
3
# Nonce exchange
4
# Searching ...
5
# Found device: 00:1a:22:0a:6c:9b
6
# RSSI: -61
7
# Connecting in tick
8
# Connecting...
9
# Connected in tick
10
Guru Meditation Error: Core  0 panic'ed (Unhandled debug exception). 
11
Debug exception reason: Stack canary watchpoint triggered (BTU_TASK) 
12
Core  0 register dump:
13
PC      : 0x40097a47  PS      : 0x00060836  A0      : 0x8009748b  A1      : 0x3ffe46e0  
14
A2      : 0x3ffbf348  A3      : 0xb33fffff  A4      : 0x0000abab  A5      : 0x0000cdcd  
15
A6      : 0x00060823  A7      : 0x00060823  A8      : 0xb33fffff  A9      : 0xffffffff  
16
A10     : 0x3ffd6ecc  A11     : 0x3ffd1c78  A12     : 0x00000001  A13     : 0x00000000  
17
A14     : 0x003fffff  A15     : 0x3ffe482c  SAR     : 0x0000001a  EXCCAUSE: 0x00000001  
18
EXCVADDR: 0x00000000  LBEG    : 0x40091458  LEND    : 0x4009146e  LCOUNT  : 0x00000000  
19

20

21
Backtrace: 0x40097a44:0x3ffe46e0 0x40097488:0x3ffe4720 0x40095d57:0x3ffe4740 0x4014a2d1:0x3ffe4780 0x40149afe:0x3ffe47a0 0x4013e21d:0x3ffe47c0 0x4013d12b:0x3ffe47e0 0x40162635:0x3ffe4810 0x40162783:0x3ffe4830 0x401628c6:0x3ffe4850 0x401350a5:0x3ffe4890 0x401344da:0x3ffe4b20 0x4014e566:0x3ffe4b40 0x4014e6ac:0x3ffe4b80 0x4014eaba:0x3ffe4ba0 0x4014eb42:0x3ffe4e30 0x4014ecca:0x3ffe4e50 0x40139e41:0x3ffe4e70 0x401350e2:0x3ffe5110 0x40135595:0x3ffe53a0 0x40135f4d:0x3ffe5400 0x401372b0:0x3ffe5440 0x401372e6:0x3ffe5460 0x4014217d:0x3ffe5480 0x40133108:0x3ffe5610 0x4014a3d4:0x3ffe5630
22

23
ELF file SHA256: 0000000000000000
24

25
Rebooting...
#7623474
Lesenswert?

Hendrik F. schrieb:

Hallo,

ich habe nun rausgefunden, dass das eine Schloss dann wieder reagiert, wenn ich einmal "open" statt lock oder unlock mache.

Gruß, Hendrik

Hendrik, das hat bei mir auch so angefangen und war dann ein hardwaredefekt. siehe Beitrag "Re: Software zum Steuern des Türschlossantrieb "eqiva eQ-3 Bluetooth Smart Lock""

nicht dass du wegen dem gleichen problem gleich lange wie ich herummurkst ...

#7623481
Lesenswert?

Danke für deine Antwort. Das kann gut sein, das würde auch erklären warum mein Schloss seit einiger Zeit nur noch aufsperrt (egal welche Taste man drückt) Es fängt auf jeden Fall an zu spinnen. Wenn man die Batterien wechselt funktioniert es wieder einige Zeit.

Ich habe noch zwei Schlösser ohne Key von eBay hier herumliegen, dann muss ich wohl an die Taster anlöten und extern steuern... Ich nehme an den Key kann man nicht auslesen?

#7641448
Lesenswert?

Moin zusammen, wollte heute was in dem Code ändern, hatte aber auch esphome aktualisiert, und seit dem Verbindet es nicht mehr. Kann nicht herausfinden woran es liegt, Code habe ich jetzt zurück geändert, trotzdem funktioniert nicht, weiß aber nicht mehr welche Version von Esphome es vorher war.

#7641495
Lesenswert?

Artur K. schrieb:

Moin zusammen, wollte heute was in dem Code ändern, hatte aber auch esphome aktualisiert, und seit dem Verbindet es nicht mehr. Kann nicht herausfinden woran es liegt, Code habe ich jetzt zurück geändert, trotzdem funktioniert nicht, weiß aber nicht mehr welche Version von Esphome es vorher war.

Aktuell kann man diesen workaround nutzen: https://github.com/digaus/esphome-components-eqiva/issues/11#issuecomment-1965232328

Muss noch Anpassungen machen für die neue esphome Version sobald ich Zeit finde.

Beitrag #7641505 wurde von einem Moderator gelöscht.
Beitrag #7641521 wurde von einem Moderator gelöscht.
Beitrag #7641524 wurde von einem Moderator gelöscht.
#7641528
Lesenswert?

Artur K. schrieb:

Wäre es möglich Status locking unlocking hinzufugen? hat das jemand gemacht?

Denke ist möglich indem du den aktuellen Status des Locks vergleichst und sofern der Status von Eqiva BLE Lock "MOVING" ist und der aktuelle Status z.b. "LOCKED" dann würde er ja gerade aufschließen.

Kann sein, dass diese stati in Homekit nicht funktionieren weshalb ich sie nicht als Beispiel abgebildet hatte. Oder dir gab's noch nicht immer^^

#7682886
Lesenswert?

Hallo, ich bin Anfänger in Sachen Home Assistant, bin aber trotzdem technikaffin. Ich habe mir den ganzen Thread durchgelesen und bin mir trotzdem in einigen Sachen noch sehr unsicher. Könnte sich jemand eventuell bei mir melden per PM und mir ein paar Dinge kurz erklären, am besten die Anbindung des hier besprochenen eqiva Türschlossantriebes und die Anbindung an Home Assistant. Das würde mich sehr freuen.

Vielen Dank im Voraus Christian

#7701447
Lesenswert?

Hallo,

meine Tochter war gestern leider ausgesperrt: Ich hab ja zwei ESPs (ESP-Home Version) mit zwei Schlössern. Beide waren in HomeAssistant "nicht verfügbar". Aber auch mit der Eqiva App ging es nicht - es scheint also, als wäre der esp noch mit dem Lock verbunden gewesen. Ich habe später die ESPs kurz vom Strom getrennt und wieder verbunden; Dann ging es wieder.

Mögliche Fehlerquellen sind: -WLAN -"Schluckauf des ESP"

Kann man es irgendwie erreichen, dass der ESP sich vom Lock trennt, wenn kein Kontakt zum HomeAssistant besteht, damit es dann wenigstens mit der App geht?

Gruß, Hendrik

#7776470
Lesenswert?

Hallo zusammen,

ich grabe mal diesen Thread aus. Lasst mich wissen, ob es einen besseren Ort gibt.

Ich habe ein Key-BLE und ein Homeassistant und würde den Türschlossantrieb gerne verwenden. Wie ist denn da die beste Möglichkeit?

Bisher habe ich keyble-mqtt ausprobiert, aber das läuft bei mir nicht zuverlässig. Es gibt zwei Probleme:

  • die Verbindung wird nicht zuverlässig gehalten.
  • Ein OPEN-Request wird teilweise viel später (Minuten!) ausgeführt. Zum Beispiel auch nach einem Neustart von keyble-mqtt. Das passiert immer nach einem Abriss der Verbindung. Das ist so natürlich schlecht, weil dann die Tür aufginge, wenn ich schon lange wieder weg bin...

Ich habe keyble-mqtt angepasst, so dass die auto-disconnect-time auf 0 gesetzt werden sollte, das brachte aber keine Verbesserung.

Ich habe zusätzlich einen Timer eingebaut, der jede Sekunde checkt, ob eine Verbindung da ist, und falls nicht sie ensure_connected() aufruft. Das scheint jetzt so halb zu funktionieren.

Wie betreibt ihr das Teil?

Ich stolpere über zwei Fehler. Erstens: /usr/local/lib/node_modules/keyble-mqtt/node_modules/keyble/keyble.js:437
throw (new Error('Received message contains invalid authentication value'));
^
Error: Received message contains invalid authentication value
at Key_Ble.on_message_fragment_received (/usr/local/lib/node_modules/keyble-mqtt/node_modules/keyble/keyble.js:437:13)
at Characteristic.on_data_received (/usr/local/lib/node_modules/keyble-mqtt/node_modules/keyble/keyble.js:553:9)
at Characteristic.emit (node:events:517:28)
at Noble.onRead (/usr/local/lib/node_modules/keyble-mqtt/node_modules/@abandonware/noble/lib/noble.js:442:20)
at NobleBindings.emit (node:events:517:28)
at NobleBindings.onNotification (/usr/local/lib/node_modules/keyble-mqtt/node_modules/@abandonware/noble/lib/hci-socket/bindings.js:621:8) at Gatt.emit (node:events:517:28)
at Gatt.onAclStreamData (/usr/local/lib/node_modules/keyble-mqtt/node_modules/@abandonware/noble/lib/hci-socket/gatt.js:123:16) at AclStream.emit (node:events:529:35)
at AclStream.push (/usr/local/lib/node_modules/keyble-mqtt/node_modules/@abandonware/noble/lib/hci-socket/acl-stream.js:33:10)

Node.js v18.19.1

Zweitens:

keyble:communication Sending message of type CONNECTION_REQUEST, data bytes <00 11 22 33 44 fa ke fa ke>, data {"user_id":0,"local_session_nonce":[123,123,fake,fake,fake]} +4d /usr/local/lib/node_modules/keyble-mqtt/node_modules/keyble/keyble.js:498
this.send_characteristic.write(Buffer.from(message_fragment.uint8array)); ^

TypeError: Cannot read properties of null (reading 'write')
at Key_Ble.send_message_fragment (/usr/local/lib/node_modules/keyble-mqtt/node_modules/keyble/keyble.js:498:28)
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
at async Key_Ble.send_message_fragments (/usr/local/lib/node_modules/keyble-mqtt/node_modules/keyble/keyble.js:506:4)
at async Key_Ble.send_message (/usr/local/lib/node_modules/keyble-mqtt/node_modules/keyble/keyble.js:530:3)
at async Key_Ble.ensure_nonces_exchanged (/usr/local/lib/node_modules/keyble-mqtt/node_modules/keyble/keyble.js:575:3)
at async Key_Ble.send_message (/usr/local/lib/node_modules/keyble-mqtt/node_modules/keyble/keyble.js:513:4)
at async Key_Ble.send_command (/usr/local/lib/node_modules/keyble-mqtt/node_modules/keyble/keyble.js:405:3)
at async Key_Ble.open (/usr/local/lib/node_modules/keyble-mqtt/node_modules/keyble/keyble.js:399:3)
at async MqttClient.<anonymous> (/usr/local/lib/node_modules/keyble-mqtt/keyble-mqtt.js:166:7)

Node.js v18.19.1

In diesen Fällen "hängt" das Schloss und der OPEN-Request wird auch wieder stark verzögert ausgeführt.

#7776511
Lesenswert?

Hallo,

ich habe zunächst keyble (ohne -mqtt aber nem anderen Tool für die Verbindung zu mqtt) genutzt. Das lief zuverlässig, aber oft mit nem ganz schönen delay, da es (das war meine Entscheidung) die Verbindung nicht hielt, sondern nur für Aktionen aufgebaut hat.

Ich habe dann die ESP32 Standalone Version ausprobiert, aber die mochte mein schlechtes WLAN nicht und ist abgestürzt.

Dann bin ich auf die ESP-home Komponente von Dirk umgestiegen. Zunächst auch mit direktem Disconnect nach Aktionen, jetzt aber mit permanenter Verbindung. Das ist echt super, da stabil und sehr, sehr "responsiv".

So ein ESP32 kostet ja auch keine 4€. Aber ja, du brauchst einen pro Schloss.

Gruß, Hendrik

#7776525
Lesenswert?

Man kann auch einen Shelly Mini nehmen und den irgendwo in der Nähe hinter die Steckdose setzen.

Dann hat man direkt ne Stromversorgung und er ist schön versteckt. So habe ich es im Schuppen gemacht.

Alternativ gibt's natürlich auch ESP32 im USB Stick Format.

#8047321
Lesenswert?

Hi die runde,

Ich habe auf Basis des nodejs codes einen python-port erstellt. Läuft bei mir aktuell seit zwei tagen zuverlässig. In einem docker-container auf einer rpi zero 2. 🥳

Aktuell verbindet es ein Schloss und hat keine Option zum Halten der Verbindung, wohl aber einen Timer um periodisch abzufragen.

Da ich noch viel am herumbasteln damit bin (also alles andere als fertig) die frage: hat jemand interesse und was soll es alles können?

Außer einem reporting per http des status habe ich noch nichts eingebaut, ich denke mqtt ist notwendig? Welche topics, sind leicht in homeassistant oder ähnlichem zu integrieren?

#8047326
Lesenswert?

Hallo,

ich selbst habe keinen Bedarf -ich nutze den ESPHome-Port. Aber wenn du das so machen willst, würde ich mich mit MQTT Autodiscovery befassen.

Folgende Entitäten habe ich: text.esphome_eqiva_lock_hintertuer_ble_settings_mac_address text.esphome_eqiva_lock_hintertuer_ble_settings_user_key text.esphome_eqiva_lock_hintertuer_ble_pair_card_key button.esphome_eqiva_lock_hintertuer_ble_settings_save button.esphome_eqiva_lock_hintertuer_ble_settings_disconnect button.esphome_eqiva_lock_hintertuer_ble_pair_start button.esphome_eqiva_lock_hintertuer_lock_settings_apply number.esphome_eqiva_lock_hintertuer_ble_settings_user_id select.esphome_eqiva_lock_hintertuer_lock_settings_close_direction select.esphome_eqiva_lock_hintertuer_lock_settings_key_position select.esphome_eqiva_lock_hintertuer_lock_settings_turns sensor.esphome_eqiva_lock_hintertuer_lock_ble_state sensor.esphome_eqiva_lock_hintertuer_low_battery sensor.esphome_eqiva_lock_hintertuer_lock_status sensor.esphome_eqiva_lock_hintertuer_user_key sensor.esphome_eqiva_lock_hintertuer_user_id sensor.esphome_eqiva_lock_hintertuer_mac_address

Nicht alle braucht man unbedingt.

#8056415
Lesenswert?

Ich habe inzwischen die GUI überarbeitet, fehlende Features von der APP nachgezogen und nun ist es ein kompletter ersatz für die App geworden, von der registrierung (per QR-scan) bis zum komplett funktionierenden Usermanagement.

Ich habe MQTT eingebaut (das ist ungetestet), das "Stay Connected" funktioniert auch mit mehreren Schlössern parallel. Der Verbindungsaufbau ist inzwischen auch ein vielfaches schneller und zuverlässig geworden, sodass das eigentlich nicht mehr notwendig ist.

Vielleicht mache ich mir die Mühe und probiere es auf ESP32 zu portieren, aktuell bin ich mit dem Docker-container mit Bluetooth auf einem RPI1zero allerdings sehr zufrieden.

Angehängte Dateien:
#8056425
Lesenswert?

Wow, das klingt super. Ich nutze ja den ESPHome-Port und dabei die permanente Verbindung. Da ist toll, dass alles sehr schnell geht, aber es nervt etwas, dass die Batterie nicht so lange hält (1-3 Monate).

Was hast du gemacht, um die Verbindung zu beschleunigen und wie lange dauert es bei dir aktuell von "Not connected" bis "Schloss reagiert"?

Gruß, Hendrik

: Bearbeitet durch User
#8056430
Lesenswert?

von "not connected" bis "fertig" dauert es bei mir zwischen 5 und 7 Sekunden, und da ist die eine Umdrehung beim sperren schon inkludiert (im Log unten zwischen :16 und :20 die Zeit braucht der Motor zum drehen).

am meisten hat beim connect ausgemacht, dass man nicht wartet. das schloss scheint hier nicht nach dem BT-standard zu arbeiten, und liefert nach dem connect keine Meldung dass man mit weiteren Befehlen loslegen könnte. Damit läuft das in ein timeout, es machen die BT-libraries aber erst nach 10sec Timeout (oder höher) weiter. Das ausschlaggebende war dann der lib mitzugeben dass man keinen Response erwartet, explizit beim connect.

1
12:51:14 [INFO] keyble: HTTP POST /api/lock/Garagentuere/command/unlock 200
2
12:51:14 [DEBUG] keyble: Cleared BlueZ state for 00:1a:22:18:ce:94
3
12:51:14 [DEBUG] keyble: Connection attempt 1 for 00:1a:22:18:ce:94
4
12:51:16 [INFO] keyble: BLE connected (RECV=0x0421 SEND=0x0411)
5
12:51:16 [INFO] keyble: Notifications enabled
6
12:51:16 [DEBUG] keyble: Sending CONNECTION_REQUEST (user_id=1, nonce=640e10e8c7bdc4fd)
7
12:51:16 [DEBUG] keyble: TX fragment: 80 02 01 64 0e 10 e8 c7 bd c4 fd 00 00 00 00 00
8
12:51:16 [DEBUG] keyble: TX write completed
9
12:51:16 [DEBUG] keyble: Waiting for CONNECTION_INFO...
10
12:51:16 [DEBUG] keyble: RX fragment: first=True last=True remaining=0
11
12:51:16 [DEBUG] keyble: RX message CONNECTION_INFO  raw_len=14
12
12:51:16 [INFO] keyble: Connection info: user_id=1
13
12:51:16 [INFO] keyble: Nonces exchanged (remote_nonce=fe0c102219eac4ac)
14
12:51:16 [DEBUG] keyble: TX fragment: 80 87 37 06 6a a0 6b 66 05 33 00 01 9c 25 0f 24
15
12:51:16 [DEBUG] keyble: TX write completed
16
12:51:16 [DEBUG] keyble: RX fragment: first=True last=True remaining=0
17
12:51:16 [DEBUG] keyble: RX message STATUS_INFO  raw_len=14
18
12:51:16 [DEBUG] keyble: Status payload: 71 01 29 00 10 17 00 00
19
12:51:16 [INFO] keyble: Status: MOVING
20
12:51:16 [INFO] keyble: Lock is MOVING, waiting for final state...
21
12:51:20 [DEBUG] keyble: RX fragment: first=True last=True remaining=0
22
12:51:20 [DEBUG] keyble: RX message STATUS_CHANGED  raw_len=14
23
12:51:20 [INFO] keyble: Lock signals status changed, requesting current status...
24
12:51:20 [DEBUG] keyble: TX fragment: 80 82 b5 17 09 cb eb f0 78 3b 00 02 d3 a3 55 05
25
12:51:20 [DEBUG] keyble: TX write completed
26
12:51:20 [DEBUG] keyble: RX fragment: first=True last=True remaining=0
27
12:51:20 [DEBUG] keyble: RX message STATUS_INFO  raw_len=14
28
12:51:20 [DEBUG] keyble: Status payload: 71 01 2a 00 10 17 00 00
29
12:51:20 [INFO] keyble: Status: UNLOCKED
30
12:51:20 [DEBUG] keyble: TX fragment: 80 06 00 00 00 00 00 00 00 00 00 00 00 00 00 00
31
12:51:20 [DEBUG] keyble: TX write completed
32
12:51:20 [INFO] keyble: Disconnected
#8057637
Lesenswert?

Hallo zusammen, kurz zu mir: Ich bin schon einige Jahre Rentner und meine Freizeitbeschäftigung sind Schaltungen fürs Haus und Messen mit den Arduino und IO-Broker.. An meiner alten Haustür hatte ca. 5 Jahreich einen Servo als Stellmoor mit einen schicken, gedruckten Gehäuse. Von außen mit Schip und innen mit Taster gesteuert. Jetzt habe ich eine neue Haustür bekommen. Da ich Eq-3 und Vorgänger schon viele Jahre ohne Probleme benutze, habe ich das EQ-3 Eqiva Türschloss verbaut, funktioniert super mit der AP. Den Arduino BLE wollte ich weiter benutzen um auch mit dem Chipleser das EQ-3 zu bewegen, ohne Erfolg. Es gibt im Internet unzählige Infos, um mit MQTT und Bluetooth BLE das EQ-3 zu benutzen. Leider finde ich in den vielen Veröffentlichungen nicht die Zeilen für den BLE, um Daten zum Schloss zu senden. Mac-Adresse, User-ID und Code (M001…) habe ich. Wenn ich hier richtig bin, kann mir jemand helfen? Beste Grüße aus Mühlhausen

#8057638
Lesenswert?

Hi Hendrik,

Der Code existiert seit gestern in einem privaten github repository. Wenn du willst kann ich schauen ob ich dir das freigeben kann für deinen github user. Ich will den Code erst veröffentlichen wenn ich mir sicher sein kann, dass nicht sofort am ersten Tag 20 Leute probleme damit haben.

Das connect verbessern: das ist leider library abhängig. ZB python bleak unterstützt den "auf keine Antwort warten" modus nicht. Deshalb hatte meine erste implementation das selbe Problem wie Viele andere: beim connect musste man auf das konfigurierten timeout warten. Je nach Schloss und verbindungsqualität braucht man aber auch mal 10 bis 15 Sekunden.

Das bei mir jetzt verwendete Bluez kann das, und deshalb gelingt's schnell

Wie und ob das ganze auf esp32 geht kann ich aktuell weder Hilfe noch sinnvollen Diskussionsbeitrag leisten.

#8057648
Lesenswert?

Kann ich frühestens Montag machen.

Du kannst inzwischen deinen rpi zero 1 mit dem aktuellsten raspbian installieren, musst dann aber docker mit den bullseye release in die sources.list geben, da das aktuelle Trixie auf armv6 von docker nicht mehr unterstützt wird. Mit den bullseye sources hast du dann die letzte unterstützte armv6 Version auf einem aktuell gewarteten OS.

: Bearbeitet durch User
#8057671
Lesenswert?

Danke für die schnellen Antworten, ich glaube ich bin hier richtig. Da ich die Handy-AP benutze, will ich nicht über IOB noch einen Taster auf mein Handy haben. Den Chipleser und eventuell mal einen Fingerprint will ich nicht mit W-Lan betreiben. Ein Mini-Kästchen mit dem Arduino ist noch von der alten Benutzung über der Tür montiert. Es soll nur die Tür aufgeschlossen und im zweiten Schritt geöffnet werden, da ich keinen Summer mehr habe. Mit dem Chip mit Band am Hals war es schön mit vollen Taschen in der Hand die Tür zu öffnen. Wenn etwas in Vorbereitung ist, habe ich natürlich Geduld. Nur hatte ich im Januar einen mehrfachen Sprunggelenk-Bruch. Mein Handicap zwingt mich ständig zur Pause und dann kommen viele keine Projekte in den Kopf. Jedenfalls besser als TV.

#8057686
Lesenswert?

@cyber83: Könntest du vorab den Code posten, der die Verbesserung gebracht hat? Ich möchte prüfen, wie das auf dem ESP32 geht.

@kaffee: so out of the box gibt es dafür keine Lösung. Wenn das Standalone gehen soll, würde ich glaube ich ESPHome nutzen. Da kannst du per YAML konfiguration einerseits das Lock konfigurieren, andererseits MQTT (für IOBroker) und Kartenleser, Codelock und ähnliches. Da müsstest du dich aber einlesen, oder auf KI vertrauen.

: Bearbeitet durch User
#8057704
Lesenswert?

Hendrik F. schrieb:

Könntest du vorab den Code posten, der die Verbesserung gebracht hat? Ich möchte prüfen, wie das auf dem ESP32 geht.

Das wird dir nichts bringen, da der Code spezifisch mit bluez funktioniert. Andere bluetooth-api (was bei esp erzwungenermaßen der Fall ist) und du musst den Code portieren, schauen was die api mit dem Code macht, nachimplementieren was die esp32 library anders macht, etc.

Deshalb auch docker. Ich will das ding später (wenn fertig) mit docker pull von einem fertig generierten image aus starten. Da muss man sich dann nicht um die installierte python 3.17 am host kümmern, die library ging vielleicht nur auf 3.16 (und unterstützt spezifisch das antwortlose weitersenden da nicht mehr), also Code anpassen wenn der rpi in 5 jahren dann kreiert und wieder "von vorne" anfangen. Nein danke.

Ein mal docker pull, container starten, Applikation rennt. Unabhängig vom host. Und auch in 10 jahren noch, wenn die handyapp nicht mehr funktioniert...

#8057882
Lesenswert?

So, vermelde Erfolg auf dem ESP:

1
--- Eqiva Lock Standalone ---
2
[Time] Systemzeit auf Kompilierungszeit gesetzt: 2026-06-04 23:21:35
3
Befehle: c=verbinden, d=trennen, l=sperren, u=entsperren, o=öffnen, s=status
4

5
[Eingabe] Befehl erhalten: t
6
[Test] Starte automatisierten Testlauf (Connect -> Befehl -> Disconnect)...
7
[Log] Verbindung zu 00:1a:22:18:a6:96 wird aufgebaut...
8
[Log] Status: Verbunden. (Dauer: 593 ms)
9
[Test] BLE-Verbindung physisch hergestellt nach 1566 ms (Handshake läuft...)
10
[Log] Sicherheits-Handshake: Nonce erhalten (User ID: 1). Fordere Status an... (Dauer ab Connect: 1611 ms)
11
[Log] Sende Befehl: STATUS ANFORDERN...
12
[Log] Befehl [STATUS ANFORDERN] -> Status erhalten: ENTRIEGELT (Zeit ab Befehlsstart: 60 ms)
13
>>> ZUSTAND: ENTRIEGELT (Batterie: OK)
14
[Test] Initialer Zustand: ENTRIEGELT. Sende Befehl: SPERREN...
15
[Log] Sende Befehl: SPERREN...
16
[Log] Befehl [SPERREN] -> Status erhalten: IN BEWEGUNG (Zeit ab Befehlsstart: 78 ms)
17
>>> ZUSTAND: IN BEWEGUNG (Batterie: OK)
18
[Test] Latenz bis Motorstart (Verbinden + Handshake + Befehl): 1762 ms
19
[Log] Schloss meldet Statusänderung (STATUS_CHANGED). Fordere aktuellen Status an...
20
[Log] Sende Befehl: STATUS ANFORDERN...
21
[Log] Befehl [STATUS ANFORDERN] -> Status erhalten: VERRIEGELT (Zeit ab Befehlsstart: 46 ms)
22
>>> ZUSTAND: VERRIEGELT (Batterie: OK)
23
[Test] Zielzustand VERRIEGELT erreicht! Gesamtzeit (inkl. Drehung): 5223 ms
24
[Log] Status: Verbindung getrennt. (Grund: 534)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren