Jak skonfigurować odczyt z bluetooth, np. szczoteczki

Opcja Modern jest do flashera webowego (sugeruję ten wybór)
https://web.esphome.io/
oczywiście musisz użyć wspieranej przeglądarki (Vivaldi, Chrome lub Egde), na komputerze z którego prawdopodobnie piszesz i oczywiście do niego wepniesz płytkę

Opcja Legacy
dla tradycyjnego flashera w postaci programu

To nie wyklucza opcji podłączenia do niego, ale musiałbyś udostępnić port USB mostka UART do VM, więc może faktycznie darujmy sobie ten sposób.

Drobna uwaga, wciskasz i trzymając wciśnięty podłączasz.

No i teraz wchodzisz tam gdzie narysowałeś → 2
ALE
musisz to zrobić z kompatybilnej przeglądarki (3 różne do wyboru podawałem parę razy wyżej)
Skutek de facto jest ten sam co byś wybrał ręczne flaszowanie.

Chyba zrobiłem !
Od początku, może Komuś się przyda:
Po utworzeniu “czystego” ESP32 otworzyłem


do kodu dodałem wpis:

ble_client:
  - mac_address: 70:28:45:63:B8:AC
    id: itag_black

sensor:
  - platform: ble_client
    type: characteristic
    ble_client_id: itag_black
    name: "iTag battery level"
    service_uuid: '180f'
    characteristic_uuid: '2a19'
    icon: 'mdi:battery'
    unit_of_measurement: '%'

  - platform: ble_client
    type: rssi
    ble_client_id: itag_black
    name: "szczoteczka_1"

Zapisałem, dałem Install, a następnie manual download


w kolejnym oknie modern format

/// chwilę trwało tworzenie ///
zapisałem plik …*.bin na pulpicie

Następnie otworzyłem stronę
https://web.esphome.io/?dashboard_install
dałem connect


i lipa
Pomimo wcześniejszego podłączenia płytki poprzez USB, nie widać jej

kolejne okno to propozycja zainstalowania sterowników

ze strony TEJ wybrałem te

…instalacja, ponownie podłączenie płytki (z równocześnie wciśniętym przyciskiem BOOT)
znowu CONNECT

widać już port,
dalej wybranie wcześniej wygenerowanego i zapisanego pliku *.bin
wgranie go,
restart i jest OK.
dodanie do dashboardu glance
obraz_2023-04-30_164530266
i o to mi chodziło,

:slight_smile: prawie koniec.
i właśnie jeszcze poprosiłbym Kogoś o zmodyfikowanie kodu, tak, żebym mógł obsługiwać dwie szczoteczki.
Pierwsza jest już skonfigurowana. Nazywa się szczoteczka_1 i ma mac 70:28:45:63:B8:AC. Chciałbym jeszcze dodać drugą o nazwie szczoteczka_2, ma ona mac 70:28:45:69:95:36

Muszę na nowo stworzyć ?


z inną nazwą i zmodyfikowanym wpisem z nowym mac ?

Już nie musisz w ten sposób, jeśli nie zmienisz kluczy, ustawień sieci w YAMLu i paru innych rzeczy możesz już używać OTA, natomiast resztę YAMLa możesz modyfikować do woli.

ble_client:
  - mac_address: 70:28:45:63:B8:AC
    id: itag_black
  - mac_address: 70:28:45:69:95:36
    id: druga_szczota

sensor:
  - platform: ble_client
    type: characteristic
    ble_client_id: itag_black
    name: "iTag battery level"
    service_uuid: '180f'
    characteristic_uuid: '2a19'
    icon: 'mdi:battery'
    unit_of_measurement: '%'
  - platform: ble_client
    type: characteristic
    ble_client_id: druga_szczota
    name: "2 szczota battery level"
    service_uuid: '180f'
    characteristic_uuid: '2a19'
    icon: 'mdi:battery'
    unit_of_measurement: '%'

  - platform: ble_client
    type: rssi
    ble_client_id: itag_black
    name: "szczoteczka_1"
  - platform: ble_client
    type: rssi
    ble_client_id: druga_szczota
    name: "szczoteczka_2"

Taki jeszcze dopisek

sterowniki oczywiście muszą pasować do sprzętu - rożne płytki prototypowe mają różne wlutowane mostki USB-UART, sterowniki w systemie musimy oczywiście mieć do takiego jak wlutowano (wydaje mi się, że Win11 rozpoznaje prawidłowo większość konstrukcji przy użyciu sterowników z Windows Update, ale głowy sobie za to nie dam uciąć, natomiast jak dotąd nie spotkałem płytki dla której w HAOS nie byłoby sterowników).

Dzięki za pomoc !

A da się dodać smartwatch Huawei (poziom baterii) ?

A skąd mam wiedzieć? Jeśli

  1. to jest w ogóle BLE (poznasz go po MAC-adresie, bo tracker BLE gdybyś sobie dodał do YAMLa → czyli do firmware, będzie go znajdywał)
  2. dotrzesz do dokumentacji i wygrzebiesz z niej charakterystyki BLE tego sprzętu
    to w zasadzie czemu nie?

Można podejść do reverse engineeringu też od innej strony - możesz pokopać po ogólnej dokumentacji i samemu odnaleźć co nieco (wymaga sporo czasu i cierpliwości, więc najpierw lektura, potem poszukiwania)
https://www.google.com/search?q=BLE+charakteristic
pierwsze trafienie

Prawdopodobnie można też coś wykopać z oficjalnej aplikacji, ale przypuszczam, że zegarek nie będzie rozgłaszał niczego bez uwierzytelnionego połączenia.

1 polubienie

No to temat wyczerpany.
Raz jeszcze dziękuję za pomoc.


edit (5 miesięcy później):
Chciałbym dodać kolejną (trzecią) szczoteczkę. Nie chcę namieszać.
Czy mógłby mi Ktoś pomóc i zechciałby nanieść korektę w kodzie:

esphome:
  name: szczoteczki
  friendly_name: SZCZOTECZKI

esp32:
  board: esp32dev
  framework:
    type: arduino

# Enable logging
logger:

# Enable Home Assistant API
api:
  encryption:
    key: "a9bE99NAdteQutSGkWP+..............................."

ota:
  password: "0386ec1ac................................"

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Szczoteczki Fallback Hotspot"
    password: "SXJbsjcq9bJH"

esp32_ble_tracker:

ble_client:
  - mac_address: 70:28:45:63:B8:AC
    id: itag_black
  - mac_address: 70:28:45:69:95:36
    id: druga_szczota

sensor:
  - platform: ble_client
    type: characteristic
    ble_client_id: itag_black
    name: "szczoteczka Radek - poziom baterii"
    service_uuid: '180f'
    characteristic_uuid: '2a19'
    icon: 'mdi:battery'
    unit_of_measurement: '%'
  - platform: ble_client
    type: characteristic
    ble_client_id: druga_szczota
    name: "szczoteczka Aneta - poziom baterii"
    service_uuid: '180f'
    characteristic_uuid: '2a19'
    icon: 'mdi:battery'
    unit_of_measurement: '%'

  - platform: ble_client
    type: rssi
    ble_client_id: itag_black
    name: "szczoteczka Radek"
  - platform: ble_client
    type: rssi
    ble_client_id: druga_szczota
    name: "szczoteczka Aneta"    

captive_portal:

a szczoteczki mają MACe:
Radek OCLEAN X PRO
70:28:45:69:95:36

Aneta OCLEAN X
70:28:45:63:B8:AC

Nikola OCLEAN Z1
70:28:45:64:7C:39

Siostry, ale tu macie burdel w tym archeo…

  1. Jako rozwiązanie oznaczony post (obecnie skasowany przez autora), który nic nie wnosi do wątku (zamiast posta zawierającego rozwiązanie, bo jak rozumiem jest tu taki od dawna w zupełnie innym miejscu).
    edit: widzę, że już oznaczenie usunięte, zanim skończyłem pisać, ale i tak brak oznaczenia rozwiązania (najnowszy “problem” nie jest już problemem - należy postąpić analogicznie, więc jego przyszłe rozwiązanie nie powinno być oznaczane jako rozwiązanie…)
    edit2: pozwoliłem sobie zaznaczyć własnego posta który jest odpowiedzią na pytanie zadane w tytule, mimo, że pozornie nie pasuje do treści pierwszego posta; oczywiście przy tym worze problemów, które wystąpiły po drodze wątek wymaga przeczytania całości (gdyby ktoś chciał powielić rozwiązanie i jest początkujący)

  2. YAML jak był skopiowany copy+paste z przykładu (z jakimś itag) i tak pozostał, zero działań OPa, co zniechęca do jakiejkowiek pomocy


Jaką korektę? ten YAML działa? to chyba nic do niego nie dodałeś samodzielnie…

Mimo wszystko przygotuję YAMLa w wolnym czasie z komentarzami, aby miało to jakąś niezerową funkcję edukacyjną…


wersja robocza mimo wszystko to jak dla mnie już ostateczna, poprawki nanieś sam (albo zamieńcie się szczoteczkami :stuck_out_tongue: ), wodotryski zaciemniają obraz więc substitutions sobie daruję (ale jeśli zaczynasz być fanem ESPHome, to się mogą przydać przy budowaniu większej ilości DIY)
Nie zmieniłem frameworka, by się dało to przeflaszować przez OTA, ale przy intensywnym wykorzystywaniu BT (to co tu jest nie jest intensywne) zalecany jest ESP-IDF (ale przy zmianach frameworka pierwszy flash tylko po kabelku), YAML oczywiście bez gwarancji - nie jestem botem :stuck_out_tongue:

esphome:
  name: szczoteczki
  friendly_name: SZCZOTECZKI

esp32:
  board: esp32dev
  framework:
    type: arduino

# Enable logging
logger:

# Enable Home Assistant API
api:
  encryption:
    # korzystaj z SECRETS nie jest to obowiązkowe, ale ułatwia życie
    key: !secret my_esphome_api_key

ota:
  # korzystaj z SECRETS
  password: !secret my_esphome_ota_password

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Szczoteczki Fallback Hotspot"
    # korzystaj z SECRETS
    password: !secret my_esphome_ap_fallback_password

# linijkę poniżej przeniosłem do góry z samego końca oryginalnego kodu
# by była zachowana jakakolwiek logika w tym YAMLu
# po prostu jakiś "obcy" kod wkleiłeś między linie pochodzące z kreatora urządzenia (zamiast na końcu)
captive_portal:

esp32_ble_tracker:

ble_client:
  - mac_address: 70:28:45:63:B8:AC
    id: pierwsza_szczota
  - mac_address: 70:28:45:69:95:36
    id: druga_szczota
  - mac_address: 70:28:45:64:7C:39
    id: trzecia_szczota

sensor:
  - platform: ble_client
    type: characteristic
    ble_client_id: pierwsza_szczota
    name: "szczoteczka Radek - poziom baterii"
    service_uuid: '180f'
    characteristic_uuid: '2a19'
    icon: 'mdi:battery'
    unit_of_measurement: '%'
  - platform: ble_client
    type: characteristic
    ble_client_id: druga_szczota
    name: "szczoteczka Aneta - poziom baterii"
    service_uuid: '180f'
    characteristic_uuid: '2a19'
    icon: 'mdi:battery'
    unit_of_measurement: '%'
  - platform: ble_client
    type: characteristic
    ble_client_id: trzecia_szczota
    name: "szczoteczka Nikola - poziom baterii"
    service_uuid: '180f'
    characteristic_uuid: '2a19'
    icon: 'mdi:battery'
    unit_of_measurement: '%'

  - platform: ble_client
    type: rssi
    ble_client_id: pierwsza_szczota
    name: "szczoteczka Radek"
  - platform: ble_client
    type: rssi
    ble_client_id: druga_szczota
    name: "szczoteczka Aneta"    
  - platform: ble_client
    type: rssi
    ble_client_id: trzecia_szczota
    name: "szczoteczka Nikola"    

a w secrets.yaml (czyli w pliku edytowanym z menu SECRETS dashboardu ESPHome) umieścisz sobie wpisy (oczywiście zedytowane pod siebie a nie takie wykropkowane) oprócz tych co już istnieją oczywiście

my_esphome_api_key: "a9bE99NAdteQutSGkWP+..............................."
my_esphome_ota_password: "0386ec1ac................................"
my_esphome_ap_fallback_password: "SXJbsjcq9bJH"

roboczo

a szczoteczki mają MACe:  

Aneta OCLEAN X
70:28:45:63:B8:AC

Radek  OCLEAN X PRO
70:28:45:69:95:36

Nikola  OCLEAN Z1
70:28:45:64:7C:39

mój komentarz to namieszałeś, bo się imiona nie zgadzają w YAMLu z macami, ale chyba sobie to poprawisz sam…

2 polubienia

Faktycznie. Post wcześniej otagowałem jako rpzwiązany.
Ale, jak to w życiu bywa, o czymś sobie przypomniałem (trzecia szczoteczka) i dlatego żeby nie pisać nowego wątku lub aby nie odpowiadać samemu sobie (bo ostatni wpis był mój), usunąłem odpowiedź.
Sorry jak to Kogoś rozdrażniło, lub jak złamałem zasady. Nie miałem świadomości, że robię coś złego.
Tak, czy inaczej dziękuję za pomoc.
a Tobie @szopen szczególnie, bo zawsze pomimo całego anturarażu treści, zawsze niesiesz pomoc !

OFF TOPIC

Marker do zaznaczania rozwiązania służy do oznaczenia postu w którym się znajduje rozwiązanie, a nie do oznaczenia posta, w którym napisałeś coś w guście “dzięki, udało się” - to tak w kwestii zasad jego używania (więc po analizie wątku oznaczyłem nim własnego posta gdzieś wyżej, bo moim skromnym zdaniem jest to najodpowiedniejsze miejsce).
Więc od początku (od momentu rozwiązania problemu) był oznaczony nie ten post, który być powinien.


Co do kasowania posta, to w zupełności wystarczyłaby jego edycja - wtedy wątek i tak zostanie podbity (jeśli to ostatni post w wątku).

Można też pozostawić stare treści, za nimi dodać pustą linię i trzy myślniki i znowu pustą to będziesz miał ładne odkreślenie, zwyczajowo używa się też słowo-klucz: “edit” lub “edycja” przy takich dopiskach.


A w kwestii mojej frustracji tym wątkiem dodam, że gdy widać brak zaangażowania pytającego w rozwiązywanie własnego problemu, to dla nas próbujących pomagać jest to mocno demotywujące, mimo wszystko staramy się nadal pomagać, ale trudno nie skomentować zastanej sytuacji… sorry.


PS
Pozwoliłem sobie podedytować tamte posty (tzn. m.in. odkasowałem tego usuniętego posta), aby pokazać jak mogło to wyglądać.