CC2652P jako koordynator zigbee

Cześć @Grzegorz_Sterniczuk Hej @Stravi

Na początek niestety zła wiadomość :frowning:

Nie możemy udostępnić źródeł kernela, to wymaga podpisania NDA z Amlogic i uzyskania u nich dostępu. Wg nas jest to chyba co najmniej naciąganie GPL… ale taka jest niestety rzeczywistość. Tak robią wszyscy producenci SoC (Allwiner i inni też). Albo nie dostarczają w ogóle jądra (Linux / Android) lub źródła u-boot, albo dostarczając drzewa z gotowymi plikami binarnymi i bez pasującego kodu źródłowego. Albo stary kod bez łatek i kompletnego toolchain, zbudowanie jądra będzie trwało miesiącami a w konsekwencji i tak nie zadziała prawidłowo.
Czyli producenci SoC, niby udostępniają źródła (żeby nie być pozwanym o naruszenie GPL) ale w rzeczywistości migają się jak mogą i nie ułatwiają życia tym co chcieli by to zrobić.
My w DEV1/BT/2 używamy skompilowane jądro które mamy od Amlogic i które jest stabilnie, nie mamy w planie dodawać do niego żadnych sterowników.

A teraz dwie dobre wiadomości :slight_smile:

  1. W przypadku PRO przed zamówieniem płyt, wynegocjowaliśmy od producenta dostęp do SDK i toolchain z możliwością legalnego udostępnienia dla naszych klientów. Nie jest proste znalezienie producenta który w rozsądnej cenie sprzeda płytę w ilości nie miliony sztuk i udostępni źródła które da się skompilować. Nam się to udało - ten etap mamy za sobą :+1:
    W przypadku PRO będą udostępnione źródła i będzie można dodawać do jądra sterowniki… ale to nie jest dobra droga - patrz punkt 2.

  2. Implementacja sterownika w przestrzeni użytkownika
    Android normalnie nie pozwala na bezpośredni dostęp do urządzeń USB. Kompilacja jądra żeby dodać obsługę komunikacji szeregowej nie jest prosta. Nie da się skompilować wszystkich jąder Android-a :wink: - jeżeli to zrobimy na naszej bramce to i tak będziemy ograniczeni do tylko tego modelu i będziemy musieli to robić z każdym innym jądrem (w przypadku zmiany modelu itd…).
    Dlatego postanowiliśmy nie iść tą drogą, a zrobić coś co zadziała na każdym urządzeniu z Android - dodajemy komunikację ze sprzętem w przestrzeni użytkownika (w naszej aplikacji).
    Pracujemy nad tym żeby zbudować w aplikacji AIS dom, który połączy port szeregowy USB z TCP socket w systemie Android.
    To będzie nasze rekomendowane rozwiązanie w tym temacie.

AisUartBridgeX

Mamy już prototyp, opiszę jak to działa:

  1. tworzymy serwer TCP w aplikacji - otwieramy input i output stream na jakimś porcie np. 1234
  2. łączymy urządzenie USB za pomocą kabla OTG
  3. wykrywamy urządzenie dodane po USB, ustawiamy parametry transmisji i czytamy z niego dane które napływają z urządzenia, i publikujemy je na serwerze TCP. Dane które przychodzą z TCP piszemy do USB.
  4. w aplikacji łączymy się z portem TCP. Np. zigbee2mqtt łączymy się nie do port: /dev/tty... ale do port: 'tcp://localhost:1234'

Proof of concept

komunikacja szeregowa z adapterem zigbee2mqtt z telefonu, bez root-a bez kompilowania jądra :wink:

DEBUG=zigbee-herdsman* npm start

@Grzegorz_Sterniczuk czy ty sam robisz te adaptery?

Jeżeli jesteś programistą to chętnie dołączymy Cię do projektu. Jeżeli nie masz naszej bramki to możemy się wymienić adapter za bramkę i doprowadzić to do działania razem.
Napisz proszę na info@ai-speaker.com wiadomość z kontaktem do siebie i opisem tego co robisz.
Szukamy stabilnej i mocniejszej alternatywy dla naszego CC2531, może razem to dodamy.

PS
W zbudowaniu tej funkcjonalności pomaga nam kolega, programista z Meksyku :mexico: :+1:
Pisząc to opieramy się na jego kodach i doświadczeniach z projektu który powstał do komunikacji pomiędzy Android a Arduino. Jak będziemy mieli więcej czasu to opiszemy całą historię kiedyś i przedstawimy naszego Amigo na forum.

Oczywiście jak wyjdziemy z fazy prototypu to włączymy tą funkcjonalność do projektu - wg nas to jest najlepsze droga (a nie dodawanie sterowników do jądra). Zalet jest wiele i docelowo, dzięki temu podejściu będzie można adapter podłączyć do tabletu itd… nie koniecznie do bramki która może nie znajdować się w centralnym miejscu w domu, może mieć włączone wifi, blutooth co nie pomaga zigbee.

5 polubień