Forum: Projekte & Code Software zum Steuern des Türschlossantrieb "eqiva eQ-3 Bluetooth Smart Lock"


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Philipp C. (e61_phil) Benutzerseite


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

von Hendrik F. (henfri)


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

von Philipp C. (e61_phil) Benutzerseite


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.

von Hendrik F. (henfri)


Lesenswert?

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

: Bearbeitet durch User
von Dirk (digaus)


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.

von Hendrik F. (henfri)


Lesenswert?

Verstanden.

Hast du eine Idee, warum er nicht kompiliert (siehe mein pastebin)?

Gruß und danke für die tolle Entwicklung,
Hendrik

von Dirk (digaus)


Lesenswert?

Hendrik F. schrieb:
> Verstanden.
> Hast du eine Idee, warum er nicht kompiliert (siehe mein pastebin)?
> Gruß und danke für die tolle Entwicklung,
> Hendrik

Joa einmal die Build Files clearen
(In der Übersicht auf die drei Punkte klicken)

: Bearbeitet durch User
von Dirk (digaus)


Lesenswert?

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?

von Philipp C. (e61_phil) Benutzerseite


Angehängte Dateien:

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.

von Hendrik F. (henfri)


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

: Bearbeitet durch User
von Dirk (digaus)


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.

: Bearbeitet durch User
von Hendrik F. (henfri)


Lesenswert?

Hallo,

hast du auch eine Idee für mein Problem?

Gruß,
Hendrik

von Philipp C. (e61_phil) Benutzerseite


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 :)

von Dirk (digaus)


Lesenswert?

Hendrik F. schrieb:
> Hallo,
> hast du auch eine Idee für mein Problem?
> Gruß,
> Hendrik

Welchen ESP hast du? Neueste Version vom Code? Clean Build gemacht?

: Bearbeitet durch User
von Hendrik F. (henfri)


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

: Bearbeitet durch User
von Hendrik F. (henfri)


Lesenswert?

Hallo,

ich habe jetzt mal zurückgerüstet auf ein Lock und kann jetzt auch die 
Kommunikation zum Lock im Log sehen.
Allerdings fehlen mir die Steuerelemente um das Schloss zu bedienen. 
Woran kann das liegen?

Gruß,
Hendrik

von Philipp C. (e61_phil) Benutzerseite


Lesenswert?

Hendrik F. schrieb:
> Allerdings fehlen mir die Steuerelemente um das Schloss zu bedienen.
> Woran kann das liegen?

Die kommen eigentlich, wenn Du so ein Template Lock anlegst. Wie sieht 
denn dein yaml aktuell aus?

von Hendrik F. (henfri)


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

von Hendrik F. (henfri)


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

von Dirk (digaus)


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

von Hendrik F. (henfri)


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

: Bearbeitet durch User
von Artur K. (artur_k638)


Angehängte Dateien:

Lesenswert?

Hey, bei mit wird Lock 1 immer als geöffnet angezeigt. Habe alles aus 
git kopiert.
Wahrscheinlich springt er immer in else.

: Bearbeitet durch User
von Hendrik F. (henfri)


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

von Dirk (digaus)


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.

von Dirk (digaus)


Lesenswert?

Werde die yaml auch noch so anpassen, dass man alles über die Web 
Oberfläche konfigurieren kann.

von Dirk (digaus)


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.

🤔

von Hendrik F. (henfri)


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?

von Dirk (digaus)


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.

von Hendrik F. (henfri)


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

von Dirk (digaus)


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::<anonym 
ous>.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.

von Hendrik F. (henfri)


Lesenswert?

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

      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?

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

Gruß,
Hendrik

: Bearbeitet durch User
von Artur K. (artur_k638)


Lesenswert?

Hendrik F. schrieb:
>
Wird es nicht vll einfacher den Schloß mit Kontakt direkt in 
Homeassistant zu es stellen? Das habe ich zumindest so. Finde ich 
persönlich einfacher, kann man immer was ändern ohne neuzuflashen.
Grüß

: Bearbeitet durch User
von Hendrik F. (henfri)


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

von Artur K. (artur_k638)


Lesenswert?

Hast du mehrer Schlösser?

von Artur K. (artur_k638)


Lesenswert?

Iwas komisches ist passiert. In esphome ist meine esp online, wenn ich 
log drücke, verbindet er nicht. Alle Entitäten in ha sind normal 
verfügbar. Nur reagiert auf nichts

von Hendrik F. (henfri)


Lesenswert?

Ja, ich habe mehrere Schlösser.

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

    unlock_action:
      - eqiva_key_ble.connect:
          mac_address: 00:1c  # Hintertür
          user_id: 1
          user_key: x
      - eqiva_key_ble.unlock:
      - eqiva_key_ble.disconnect:

(die letzte Zeile habe ich hinzugefügt)?

Gruß,
Hendrik

von Artur K. (artur_k638)


Lesenswert?

Bei 2 Schlössern kann man service connect hinzufügen, aber da wird nicht 
mac übergeben, schon vergessen warum. Alternativ könnte man in esphome 2 
services für connect schreiben?

von Artur K. (artur_k638)


Lesenswert?

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

von Artur K. (artur_k638)


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

: Bearbeitet durch User
von Dirk (digaus)


Lesenswert?

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

von Artur K. (artur_k638)


Lesenswert?

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?

Beitrag #7553812 wurde vom Autor gelöscht.
von Artur K. (artur_k638)


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

von Dirk (digaus)


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.

von Artur K. (artur_k638)


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

von Dirk (digaus)


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

von Dirk (digaus)


Angehängte Dateien:

Lesenswert?

Hab's aktualisiert. Jetzt kann man Mac auch bei Connect via template 
string mitgeben

Hab auch Beispiel für UI Eingabe eingebaut

von Hendrik F. (henfri)


Lesenswert?

Klasse!

von Artur K. (artur_k638)


Lesenswert?

Heute Abend kam ich nach Hause und konnte Schloß nicht ansprechen, web 
Oberfläche war nicht abrufbar, obwohl es nicht als nicht verfügbar war, 
war online. Wie konnte ich die Ursache finden?

von Artur K. (artur_k638)


Lesenswert?

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.

von Dirk (digaus)


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?

von Artur K. (artur_k638)


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

von Artur K. (artur_k638)


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

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

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

von Antonello M. (antonello_m)


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
    on_connect:
      - eqiva_key_ble.connect:
          mac_address: !lambda 'return id(mac_address).state;'
          user_id: !lambda 'return id(user_id).state;'
          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

2. 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.

3. 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)

von Dirk (digaus)


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
>     on_connect:
>       - eqiva_key_ble.connect:
>           mac_address: !lambda 'return id(mac_address).state;'
>           user_id: !lambda 'return id(user_id).state;'
>           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
>
> 2. 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.
>
> 3. 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)

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

3. 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 .

von Artur K. (artur_k638)


Lesenswert?

Kann eigentliche hier ohne Probleme auch bluetooth proxy verwendet 
werden?

von Artur K. (artur_k638)


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?

: Bearbeitet durch User
von Antonello M. (antonello_m)


Angehängte Dateien:

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

von Dirk (digaus)


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

von Artur K. (artur_k638)


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

von Dirk (digaus)


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

von Antonello M. (antonello_m)


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.

von Artur K. (artur_k638)


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?

: Bearbeitet durch User
von Dirk (digaus)


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?

von Artur K. (artur_k638)


Lesenswert?

Dirk schrieb:
> Ja ich, hatte bisher nicht das Problem.
> Wie lange lief er ohne Probleme? In welchem Intervall aktualisierst du
> den Status?

Habe genau nicht beobachtet, werde ich mal machen, ich aktualisiere es 
so wir bei dir in yaml steht, jede 4 Minuten.

von Artur K. (artur_k638)


Lesenswert?

Dirk schrieb:
> WLAN onconnet/disconnect und beim starten Initial nicht aktivieren

Noch mal dazu, bei wlan habe ich on_connect gesehen. Aber Initial nicht 
aktivieren, das habe ich nicht wirklich verstanden.

von Artur K. (artur_k638)


Lesenswert?

Also um 13 Uhr neugestartet, und jetzt kam ich nach Hause und konnte 
nicht mehr aufmachen. Vllt bluetooth proxy ist das Problem, werde ich 
rausnehmen

von Philipp C. (e61_phil) Benutzerseite


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?

von Artur K. (artur_k638)


Lesenswert?

Philipp C. schrieb:
> 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.
Welche esp32 hast du?

von Artur K. (artur_k638)


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..

: Bearbeitet durch User
von Dirk (digaus)


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.

von Artur K. (artur_k638)


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

von Dirk (digaus)


Lesenswert?

Möglich.

Aber ich würde noch die Parameter bei eqiva_key_ble weglassen.

Und bei WLAN bei ondisconnect den disconnect service aufrufen .

Dann sollten ble Scan und WiFi Scan nie gleichzeitig laufen.

von Artur K. (artur_k638)


Lesenswert?

Dieses Fehler kommt immer nach Status Lock oder Unlock

Ok werde ich versuchen, danke

von Artur K. (artur_k638)


Lesenswert?

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

: Bearbeitet durch User
von Philipp C. (e61_phil) Benutzerseite


Lesenswert?

Artur K. schrieb:
> Philipp C. schrieb:
>> 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.
> Welche esp32 hast du?

Einen D1 Mini.

Das mit dem WLAN sollte ich wohl auch noch übernehmen.

von Dirk (digaus)


Lesenswert?

Nicht vergessen continues: false beim tracker einzubauen damit er beim 
Starten nicht direkt los scannt

von Artur K. (artur_k638)


Lesenswert?

Dirk schrieb:
> Nicht vergessen continues: false beim tracker einzubauen damit er beim
> Starten nicht direkt los scannt

Hat das Auswirkung auf bluetooth proxy?

von Dirk (digaus)


Lesenswert?

Artur K. schrieb:
> Dirk schrieb:
>> Nicht vergessen continues: false beim tracker einzubauen damit er beim
>> Starten nicht direkt los scannt
>
> Hat das Auswirkung auf bluetooth proxy?

Ne wird ja beim onconnect wieder auf true gesetzt

von Artur K. (artur_k638)


Lesenswert?

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.

von Dirk (digaus)


Angehängte Dateien:

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

von Artur K. (artur_k638)


Lesenswert?

Dirk schrieb:
> Und vllt mal den Uptime sensor einbauen. Dann siehst du ob er neu
> gestartet hat:

Er startet ja nicht neu, reagiert nicht, wenn man lock oder unlock 
macht, oder Status, kommt im log warten auf Verbindung

von Artur K. (artur_k638)


Lesenswert?

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

von Dirk (digaus)


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

von Dirk (digaus)


Angehängte Dateien:

Lesenswert?

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

: Bearbeitet durch User
von Artur K. (artur_k638)


Lesenswert?

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

von Dirk (digaus)


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

von Artur K. (artur_k638)


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.

von Dirk (digaus)


Lesenswert?

Poste mal deine aktuelle yaml

von Artur K. (artur_k638)


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:

von Dirk (digaus)


Lesenswert?

Was mir nur auffällt ist, dass du die ID auskommentiert hast. Evlt. 
liegt es daran? Hast du mal ohne den bluetooth proxy probiert?

Hab mal den log erweitert, dann können wir sehen warum er in "Waiting 
for connection..." reingeht

von Artur K. (artur_k638)


Lesenswert?

Dirk schrieb:
> Was mir nur auffällt ist, dass du die ID auskommentiert hast. Evlt.
> liegt es daran? Hast du mal ohne den bluetooth proxy probiert?
>
> Hab mal den log erweitert, dann können wir sehen warum er in "Waiting
> for connection..." reingeht
Ohne proxy war das selbe. Wegen ID wo meinst du genau?

von Artur K. (artur_k638)


Lesenswert?

Also gerade getestet, über esp konnte nicht aufmachen. Über app geht, 
liegt dann an esp, habe aber gestern einen andere geflasht

von Artur K. (artur_k638)


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 ==========================

von Dirk (digaus)


Lesenswert?

Artur K. schrieb:
> Fehler beim ota
>

Probier mal nochmal.

Bzgl ID einmal nach id: key-ble suchen

von Artur K. (artur_k638)


Lesenswert?

Dirk schrieb:
> Artur K. schrieb:
>> Fehler beim ota
>>
>
> Probier mal nochmal.
>
> Bzgl ID einmal nach id: key-ble suchen

Klappt trotzdem nicht

von Dirk (digaus)


Lesenswert?

Artur K. schrieb:
> Dirk schrieb:
>> Artur K. schrieb:
>>> Fehler beim ota
>>
>> Probier mal nochmal.
>> Bzgl ID einmal nach id: key-ble suchen
>
> Klappt trotzdem nicht

Installieren? Bei mir schon. Mal nen Clean build Files machen?

von Artur K. (artur_k638)


Lesenswert?

Dirk schrieb:
> Installieren? Bei mir schon. Mal nen Clean build Files machen?

Jap clean gemacht, komisch, starte mal esp neu und probiere noch mal

von Dirk (digaus)


Lesenswert?

Artur K. schrieb:
> Dirk schrieb:
>> Installieren? Bei mir schon. Mal nen Clean build Files machen?
>
> Jap clean gemacht, komisch, starte mal esp neu und probiere noch mal

refresh: 0s drin stehen?

von Artur K. (artur_k638)


Lesenswert?

Dirk schrieb:
> refresh: 0s drin stehen?

Ja natürlich

von Artur K. (artur_k638)


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 =========================

von Dirk (digaus)


Lesenswert?

Komisch dass er bei mir nicht meckert.

Probier es jetzt mal

von Artur K. (artur_k638)


Lesenswert?

Leider nein, sehr komisch wieso er bei mir meckert

von Dirk (digaus)


Lesenswert?

Artur K. schrieb:
> Leider nein, sehr komisch wieso er bei mir meckert

Was meckert er denn jetzt?

Clean Build Files gemacht?

von Artur K. (artur_k638)


Lesenswert?

Dirk schrieb:
> Was meckert er denn jetzt?
> Clean Build Files gemacht?

Das selbe immer noch, und ja

von Dirk (digaus)


Lesenswert?

Artur K. schrieb:
> Dirk schrieb:
>> Was meckert er denn jetzt?
>> Clean Build Files gemacht?
>
> Das selbe immer noch, und ja

Hab's auf %d geändert. Er sollte also nicht mehr den selben Fehler haben 
.?

von Artur K. (artur_k638)


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_bl 
e.o]  Error 1
========================= [FAILED] Took 17.12 seconds 
=========================

von Dirk (digaus)


Lesenswert?

Sehr seltsam.

Bei mir funktioniert es ohne Probleme ...

von Artur K. (artur_k638)


Lesenswert?

Dirk schrieb:
> Sehr seltsam.
> Bei mir funktioniert es ohne Probleme ...

Ich versuche morgen ein neues Projekt anlegen und mit Kabel Flashen

von Artur K. (artur_k638)


Lesenswert?

Habe testweise einfach neues Projekt erstattet, Stumpf den Code aus git 
kopiert. Und kommt auch dieses error

von Dirk (digaus)


Lesenswert?

Artur K. schrieb:
> Habe testweise einfach neues Projekt erstattet, Stumpf den Code
> aus git kopiert. Und kommt auch dieses error

Hab den log jetzt raus genommen. Geht's jetzt wieder?

von Artur K. (artur_k638)


Lesenswert?

Jap, jetzt geht's

von Artur K. (artur_k638)


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?

von Hendrik F. (henfri)


Angehängte Dateien:

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

von Dirk (digaus)


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.

von Hendrik F. (henfri)


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

von Dirk (digaus)


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.

von Hendrik F. (henfri)


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

: Bearbeitet durch User
von Hendrik F. (henfri)


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

von Hendrik F. (henfri)


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

von Dirk (digaus)


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.

von Hendrik F. (henfri)


Lesenswert?

Das wären geschätzt 50 Stellen, beginnend mit m001?

von Dirk (digaus)


Lesenswert?

Hendrik F. schrieb:
> Das wären geschätzt 50 Stellen, beginnend mit m001?

Ja

von Hendrik F. (henfri)


Angehängte Dateien:

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

von Dirk (digaus)


Lesenswert?

Hendrik F. schrieb:
> Hallo...

Befindet sich das Schloss im Pairing Modus?

von Hendrik F. (henfri)


Lesenswert?

Ja, leuchtet gelb. 5s gedrückt.

von Dirk (digaus)


Lesenswert?

Hendrik F. schrieb:
> 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.

von Ömer B. (mer_b)


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?

von Dirk (digaus)


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.

von Hendrik F. (henfri)


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

: Bearbeitet durch User
von Ömer B. (mer_b)


Lesenswert?

Können wir durch den Einsatz des Ethernet-Moduls dauerhafte Verbindungen 
für zwei Schlösser gleichzeitig aufrechterhalten?

von Dirk (digaus)


Lesenswert?

Ömer B. schrieb:
> Können wir durch den Einsatz des Ethernet-Moduls dauerhafte
> Verbindungen für zwei Schlösser gleichzeitig aufrechterhalten?

Wahrscheinlich kann man das auch noch via Wifi hinkriegen, aber bei mir 
läuft's super und ich hab aktuell nicht die Zeit da weiter zu machen^^

von Ömer B. (mer_b)


Lesenswert?

Es tut mir leid, aber ich versuche stundenlang herauszufinden, wie man 
zwei Schlösser konfiguriert. Kann jemand eine Beispiel-YAML-Datei für 
zwei Schlösser teilen?

von Hendrik F. (henfri)


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.

: Bearbeitet durch User
von Hendrik F. (henfri)


Angehängte Dateien:

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

von Hendrik F. (henfri)


Lesenswert?

Hallo,

hast du eine Idee für mich?
Ansonsten habe ich ja User-ID und Key aus einer manuellen Kopplung.
Gibt es eine Möglichkeit sie in der YAML einzubinden, ohne sie immer 
wieder zu wiederholen?

Gruß,
Hendrik

von Ömer B. (mer_b)


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:

von Hendrik F. (henfri)


Lesenswert?

Hab ich ein Stück weiter oben verlinkt.

von Hendrik F. (henfri)


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

von Hendrik F. (henfri)


Angehängte Dateien:

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

von Artur K. (artur_k638)


Lesenswert?

@digaus
Hi,
ich hätte eine Frage. In Eqiva App kann man machen dass das Schloss 
automatisch schlisst. Kann man diese Zeiten in Esphome auslesen, bzw 
einstellen?

von Dirk (digaus)


Lesenswert?

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.

von Artur K. (artur_k638)


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.

von Dirk (digaus)


Lesenswert?

Kannst ja auch direkt via ESP ne Automation machen ohne HA

von Artur K. (artur_k638)


Lesenswert?

Dirk schrieb:
> Kannst ja auch direkt via ESP ne Automation machen ohne HA

Ja das auch, wäre es viel Aufwand für dich es zu implementieren?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.