Typowe interfejsy API w C lub C ++ dla IoT

9

Jakie są typowe lub zwykłe interfejsy API (lub biblioteki) w C lub C ++ dla Internetu Rzeczy, w sensie posiadania dokumentacji, zestawu interfejsów programistycznych? (Podobnie jak np. POSIX jest dla systemów operacyjnych, Qt dla GUI itp.).

Ta krótka strona motywuje moje pytanie (jestem zainteresowany opracowaniem narzędzi do analizy statycznego kodu źródłowego na potrzeby Internetu Rzeczy). Szukam nie tylko standardów prawnych, ale także powszechnie używanych interfejsów API lub bibliotek - w C lub C ++, z istniejącymi plikami nagłówkowymi - w różnych domenach przemysłowych. Nie interesują mnie interfejsy API sieci Web (konwencje definiujące niektóre żądania HTTP) ani tylko protokoły sieciowe bez interfejsu API lub biblioteki je wdrażających.

(więc nie jestem zainteresowany tworzeniem aplikacji IoT, ale chcę opracować narzędzia inżynierii oprogramowania działające i analizujące kod źródłowy, aby pomóc programistom oprogramowania IoT)

Mogłyby mnie nawet zainteresować specyficzne dla branży interfejsy API lub biblioteki IoT, np. W służbie zdrowia, logistyce, transporcie, inteligentnych sieciach, inteligentnych budynkach itp .; pod warunkiem, że jest to interfejs API lub biblioteka C lub C ++.


Należę do grupy badawczej zajmującej się statyczną analizą kodu źródłowego i chcielibyśmy opracować narzędzia analizujące kod źródłowy C lub C ++, aby pomóc twórcy oprogramowania IoT.

Muszę jednak znaleźć sposób na sfinansowanie, zanim zacznę nad tym pracować.

Sugerujemy opracowanie specjalistycznego narzędzia (najlepiej open source, powyżej istniejących technologii), dla programistów i inżynierów piszących kod źródłowy (w C, C ++ i Adzie, jeśli to konieczne ...) ukierunkowanych na platformy IoT. To narzędzie zostanie zintegrowane z docelowym zestawem programistycznym. To narzędzie może pomóc twórcom oprogramowania IoT w analizie i sprawdzeniu poprawności kodu źródłowego względem reguł kodowania, niezmienników i dobrych praktyk specyficznych dla tych platform oprogramowania. Głównym celem jest poprawa jakości oprogramowania i przyspieszenie czasu wprowadzania na rynek. W razie potrzeby narzędzie może przeprowadzić optymalizację kodu źródłowego w celu zwiększenia wydajności oprogramowania i / lub zmniejszenia rozmiaru kodu.


NB Ta strona IoT Eclipse wymienia kilka standardów. Interesują mnie interfejsy API i biblioteki implementujące je (i każdy inny de facto standard specyficzny dla domeny IoT), jeśli warto opracować dla nich analizatory kodu źródłowego.

Basile Starynkevitch
źródło
@Basile Czy będzie to reklama komercyjna czy FOSS? W każdym razie, czy jest jakiś sposób na śledzenie twoich postępów. Zdaję sobie sprawę, że może to potrwać miesiące, a nawet lata, więc UTL do oglądania lub lista mailingowa byłyby bardzo mile widziane
Mawg mówi o przywróceniu Moniki
Pracuję głównie nad wolnym oprogramowaniem od kilkunastu lat, więc mam nadzieję, że będzie to FOSS. Muszę jednak dołączyć do jakiegoś konsorcjum (lub uzyskać dotację na badania i rozwój lub jakiekolwiek inne fundusze), aby zacząć nad tym pracować.
Basile Starynkevitch
1
Czy masz na myśli takie jak CMSIS? keil.com/pack/doc/CMSIS/General/html/index.html
pjc50
1
MQTT i Mosquitto są dość popularne, jeśli chodzi o IoT. Może API Libmosquitto jest dobrym celem dla twojego analizatora kodu?
Bence Kaulics
1
Czy interesuje Cię jakiś aspekt Internetu Rzeczy? Istnieje strona komunikacyjna, jak sugerował Bence Kaulics (MQTT, CoAP, 6LoWPAN itp.), Lub istnieją całe platformy IoT, takie jak Android Things lub Ubuntu IoT . Którą część chcesz rozwiązać?
Aurora0001

Odpowiedzi:

8

Basile, myślę, że brakuje nam tutaj dobrego rozróżnienia.

Kiedy mówisz o Posix jak standard IoT, myślę, że mówisz o bibliotekach, które zawierają protokół.

Jako osoba zatrudniona od dziesięcioleci ( kaszel ) wdrażających stosy protokołów do telefonii i komunikacji satelitarnej, mogę powiedzieć (jak zapewne wiesz), że protokoły te są, w razie potrzeby, ściśle określone. Na przykład Zigbee jest zarządzany przez https://en.wikipedia.org/wiki/IEEE_802.15.4

Normy te określają komunikaty, które mają być przesyłane, i określają, że bajt 0 oznacza to, bajty od 1 do 4 oznaczają, że itd., Dzięki czemu urządzenia różnych producentów mogą się ze sobą komunikować (w każdym razie taka jest teoria; mógłbym powiedzieć trochę przerażenia historie ;-)

Jak powiedziałem, dla każdego protokołu może istnieć mnóstwo producentów. I dla każdego producenta może istnieć wiele bibliotek oprogramowania, co jest twoim problemem.

Twoje zadanie jest zbyt trudne, dopóki dostępnych jest wiele APIS, które owijają każdy protokół.

Niestety interfejs API podobny do Posix będzie istniał tylko wtedy, gdy jedna firma stanie się dominująca. Może istnieć niewielka możliwość, jeśli duży rząd rzuci na to dużo pieniędzy, ale nie widzę, żeby tak się działo. Jedyna inna szansa, że ​​jako wysiłek podobny do Linuksa przez społeczność Open Source.


Przy okazji, nie sądzę, żebyś wyjaśnił wystarczająco jasno, że nie będzie to tylko kolejny analizator kodu statycznego, że nie jest on przeznaczony do ogólnego kodu, ale do niektórych konkretnych interfejsów API. Mówisz to w pewnym sensie, ale nie wystarczająco wyraźnie, przez IMO. Kiedy dokładnie to zdefiniujesz, będziesz wiedział, jaki naprawdę jest twój projekt. Jeśli już wiesz, nie wydajesz się tego podkreślać (ale może nie czytam wystarczająco dobrze, pospiesznie między dwoma spotkaniami).

Składnia interfejsów API POSIX jest kontrolowana przez kompilator, podobnie jak składnia wszystkich interfejsów API, które badasz. Sądzę więc, że szukasz potencjalnie niebezpiecznego kodu, takiego jak użycie ujednoliconych zasobów, nie zwolnienie przydzielonych zasobów itp. - Czy to prawda?

Brzmi to jednak jak świetny projekt, a ja wybrałem to pytanie.


wprowadź opis zdjęcia tutaj

Mawg mówi, że przywróć Monikę
źródło
1
Bardziej interesuje mnie semantyka interfejsów API (nie tylko lub głównie ich składnia ). I tak, chciałbym przeanalizować kod za pomocą tego interfejsu API pod kątem wspomnianych przez Ciebie rzeczy (i wiele więcej). Jest to obecnie tylko szorstki pomysł (i dostosuję go do potrzeb), a ja wciąż staram się znaleźć sposoby (zwłaszcza wspólne projekty badawczo-rozwojowe), aby je sfinansować.
Basile Starynkevitch
BTW, przykład Qt pokazuje, że API (i biblioteka) może stać się ważne - i być może dominujące - nawet nie będąc normą prawną.
Basile Starynkevitch
5

Standardy różnych protokołów sieciowych są już dobrze zdefiniowane. Wygląda na to, że chcesz znaleźć interfejs API implementujący standardowe zachowania związane z urządzeniami IoT. Coś jak funkcja Light (), która może włączać, wyłączać lub przyciemniać światła do ułamka ich jasności; DoorSensor (), które można uzbroić lub rozbroić, lub zarejestrować się w celu powiadomienia o zdarzeniach otwierania drzwi lub zamykania drzwi; coś w tym rodzaju. Nie znam jednak żadnej biblioteki API, która nie jest specyficzna dla aplikacji.

Jeśli ktoś go ma, możesz znaleźć coś w Domoticzu . Jest to kontroler automatyki domowej typu open source napisany w C ++.

John Deters
źródło
5

Jako szybką odpowiedź nie sądzę, że dla IoT istnieje specjalny typ biblioteki, powiedziałbym, że IoT to w zasadzie „ nowe systemy wbudowane ”, po prostu zmienili nazwę i dodali połączenie z chmurą.

Odpowiadając na to, czego używam do programowania w C ++, moja strona referencyjna to http://www.cplusplus.com/

Zasadniczo do IoT potrzebujesz bibliotek komunikacyjnych , niezależnie od używanego protokołu (USB, TCP / IP, UDP, ZigBee itp.)

Ponadto, jeśli masz komunikację, potrzebujesz bezpieczeństwa / szyfrowania .

Reszta zależeć będzie od tego, jaką część sprzętu kontrolujesz lub mierzysz. Będziesz potrzebował bibliotek (API / Firmware) dla takiego sprzętu .

Z pewnością brakuje mi wielu rzeczy ... zobaczmy odpowiedzi innych

Snake Sanders
źródło
2
Więc w zasadzie potwierdzasz moją rażącą intuicję, że Internet Rzeczy to tylko nowe hasło do wbudowanych systemów komputerowych, prawdopodobnie osadzonych systemów Linux?
Basile Starynkevitch
@BasileStarynkevitch Zależy to od klasy urządzenia. Fitness trackery (w przeciwieństwie do rozszerzeń zamontowanych w zegarku) nie działają pod Linuksem. Węzły z własnym zasilaniem nie działają w systemie Linux. Węzły hub, które wykonują rozproszone sompute) prawdopodobnie uruchamiają Linuksa. Stąd moja mowa o stosie rozciągającym się od krawędzi do chmury.
Sean Houlihane
1
To dobrze. Jakie są powszechnie używane interfejsy API lub biblioteki na tych urządzeniach.
Basile Starynkevitch
1
Ponieważ ZigBee wygląda jak protokół sieciowy, jest poza zakresem. Interesujący byłby jednak powszechnie dostępny interfejs API w C lub C ++ implementujący ZigBee
Basile Starynkevitch
4

Wbudowana, bezpieczna komunikacja, obsługa administracyjna (zarządzanie urządzeniami) oraz aktualizacje OTA. Jest to duży pakiet oprogramowania, który pojawia się również jako nowy rodzaj platformy do rozwoju.

Istnieje kilku dostawców rozwiązań chmurowych, zwykle będą mieli własne interfejsy API klienta i wybrane systemy operacyjne punktów końcowych.

O ile mi wiadomo, różne protokoły bezprzewodowe tak naprawdę nie dyktują żadnego konkretnego stosu oprogramowania, więc twój wybór musi opierać się na dużym obrazie, a nie interfejsach API klienta. Jednym z czynników decydujących może być to, czy open-source jest ważny dla stosu w twojej aplikacji.

Sean Houlihane
źródło
1
Nie rozwijam aplikacji IoT, ale chcę opracować narzędzia do statycznej analizy kodu źródłowego z korzyścią dla twórców oprogramowania IoT.
Basile Starynkevitch
1
OK, więc są (zgadywanie) 4 lub 5 różnych stosów, które są odpowiednie i musisz rozważyć wszystkie z nich, jeśli chcesz śledzić, które z dwóch lub trzech dominują za kilka lat.
Sean Houlihane
1
O jakich precyzyjnych interfejsach API lub bibliotekach (w C lub C ++) myślisz? Proszę wymienić je w swojej odpowiedzi!
Basile Starynkevitch
1
jeśli znasz jakiś zespół pracujący nad takimi interfejsami API, prześlij mi moje pytanie i skieruj je do gcc-melt.org/IoT-03-interest-Starynkevitch.html
Basile Starynkevitch
3

Myślę, że twój cel jest nieco podobny do BOOST:

Zwiększ biblioteki C ++

Ich celem jest ustanowienie „istniejącej praktyki” i zapewnienie referencyjnych implementacji, dzięki czemu biblioteki Boost będą odpowiednie do ostatecznej standaryzacji.

Być może Boost mógłby być ważnym graczem w IoT: z pewnością wprowadził kilka świetnych ulepszeń do C ++.

serup
źródło
1
Komentarze nie są przeznaczone do rozszerzonej dyskusji; ta rozmowa została przeniesiona do czatu .
anonimowy2
2

IoTivity to referencyjna implementacja specyfikacji OCF . Dokumentację i kod źródłowy można znaleźć w ich repozytorium GitHub .

Z ich listy funkcji :

  • Podstawowa funkcjonalność napisana w C do wdrażania na ograniczonych urządzeniach
  • Większość funkcji dostępnych w C i C ++

Ich interfejsy API Framework umożliwiają wykrywanie, przesyłanie danych, zarządzanie danymi (gromadzenie, przechowywanie i analizę) oraz zarządzanie urządzeniami (np. Dostarczanie, diagnostyka) za pomocą różnych protokołów, takich jak Bluetooth, Wi-Fi, ZigBee i Z-Wave.

thiagogcm
źródło