Allgemeine APIs in C oder C ++ für das IoT


9

Was sind die gängigen oder üblichen APIs (oder Bibliotheken) in C oder C ++ für das IoT im Sinne einer Dokumentation, einer Reihe von Programmierschnittstellen? (Wie z. B. POSIX für Betriebssysteme, Qt für GUI usw.).

Diese kurze Seite motiviert meine Frage (ich bin daran interessiert, statische Quellcode-Analysetools für IoT zu entwickeln). Ich suche nicht nur nach rechtlichen Standards, sondern auch nach häufig verwendeten APIs oder Bibliotheken in C oder C ++ mit vorhandenen Header- Dateien für sie in verschiedenen industriellen Bereichen. Ich interessiere mich nicht für Web-APIs (Konventionen, die einige HTTP-Anforderungen definieren) oder nur für Netzwerkprotokolle, ohne dass eine API oder Bibliothek diese implementiert.

(Ich bin also nicht daran interessiert, selbst IoT-Anwendungen zu entwickeln, aber ich möchte Software-Engineering-Tools entwickeln, die den Quellcode bearbeiten und analysieren, um Entwicklern von IoT-Software zu helfen.)

Ich könnte mich sogar für branchenspezifische IoT-APIs oder -Bibliotheken interessieren, z. B. für Gesundheitswesen, Logistik, Transport, intelligente Netze, intelligente Gebäude usw.; solange es sich um eine C- oder C ++ - API oder -Bibliothek handelt.


Ich bin in einer Forschungsgruppe, die an der Analyse statischer Quellcodes arbeitet, und wir möchten Tools entwickeln, die C- oder C ++ - Quellcode analysieren, um dem IoT-Softwareentwickler zu helfen.

Ich muss jedoch einen Weg finden, um finanziert zu werden, bevor ich daran arbeite.

Wir empfehlen, ein spezielles Tool (vorzugsweise Open Source über den vorhandenen Technologien) für Entwickler und Ingenieure zu entwickeln, das Quellcode (in C, C ++ und Ada, falls erforderlich ...) für IoT-Plattformen schreibt. Dieses Tool wird in das gezielte Software Development Kit integriert. Dieses Tool kann IoT-Softwareentwicklern helfen, indem es die Gültigkeit des Quellcodes anhand von Codierungsregeln, Invarianten und bewährten Methoden für diese Software-Frameworks analysiert und überprüft. Das Hauptziel besteht darin, die Softwarequalität zu verbessern und die Markteinführungszeit zu verkürzen. Falls relevant, kann das Tool bestimmte Quellcode-Optimierungen durchführen, um die Softwareleistung zu verbessern und / oder die Codegröße zu verringern.


NB. Diese IoT Eclipse- Webseite listet mehrere Standards auf. Ich interessiere mich für APIs und Bibliotheken, die sie implementieren (und jeden anderen de facto domänenspezifischen IoT-Standard), wenn sich die Entwicklung von Quellcode-Analysatoren für sie lohnt.


@ Basile Wird dies kommerziell oder FOSS sein? Gibt es auf jeden Fall eine Möglichkeit, Ihren Fortschritt zu verfolgen? Mir ist klar, dass dies Monate oder sogar Jahre dauern kann, daher wäre es sehr willkommen, eine UTL oder eine Mailingliste anzusehen
Mawg sagt, Monica

Ich arbeite seit einem Dutzend Jahren hauptsächlich an freier Software, also hoffe ich, dass es FOSS ist. Ich muss mich jedoch einem Konsortium anschließen (oder einen F & E-Zuschuss oder eine andere Finanzierung erhalten), um daran zu arbeiten.
Basile Starynkevitch


1
MQTT und Mosquitto sind sehr beliebt, wenn es um IoT geht. Vielleicht ist die Libmosquitto- API ein gutes Ziel für Ihren Code-Analysator?
Bence Kaulics

1
Gibt es einen Aspekt des IoT, an dem Sie besonders interessiert sind? Es gibt die Kommunikationsseite, wie von Bence Kaulics vorgeschlagen (MQTT, CoAP, 6LoWPAN usw.), oder es gibt ganze IoT-Plattformen wie Android Things oder Ubuntu IoT . Welchen Teil möchten Sie angehen?
Aurora0001

Antworten:


8

Basile, ich denke, dass uns hier eine feine Unterscheidung fehlt.

Wenn Sie von einem Posix-ähnlichen Standard für IoT sprechen, sprechen Sie meiner Meinung nach von Bibliotheken, die ein Protokoll umschließen.

Als einer, der seit ( Husten- ) Jahrzehnten beschäftigt ist, um Protokollstapel für Telefonie und Satellitenkommunikation zu implementieren, kann ich (wie Sie wahrscheinlich wissen) sagen, dass diese Protokolle notgedrungen bereits streng definiert sind. Zum Beispiel wird Zigbee von https://en.wikipedia.org/wiki/IEEE_802.15.4 geregelt

Diese Standards legen die zu übertragenden Nachrichten fest und definieren, dass Byte 0 dies bedeutet, Bytes 1 bis 4 dies usw. bedeuten, so dass Geräte unterschiedlicher Hersteller miteinander kommunizieren können (das ist jedenfalls die Theorie; ich könnte Ihnen etwas Entsetzen sagen Geschichten ;-)

Wie gesagt, für jedes Protokoll kann es eine Vielzahl von Herstellern geben. Und für jeden Hersteller kann es mehrere Softwarebibliotheken geben, was Ihr Problem ist.

Ihre Aufgabe ist zu schwierig, solange mehrere APIS verfügbar sind, die jedes Protokoll umschließen.

Leider wird es nur dann eine Posix-ähnliche API geben, wenn ein Unternehmen dominant wird. Es mag eine dünne Möglichkeit geben, wenn eine große Regierung viel Geld darauf wirft, aber ich kann das nicht sehen. Die einzige andere Chance habe ich als Linux-ähnliche Anstrengung von der Open Source Community.


Übrigens denke ich nicht, dass Sie klar genug machen, dass Sie nicht nur ein weiterer statischer Code-Analysator sind, sondern nicht für allgemeinen Code, sondern für bestimmte spezifische APIs. Sie sagen das, irgendwie, aber nicht explizit genug, IMO. Wenn Sie das genau definieren, wissen Sie, was Ihr Projekt wirklich ist. Wenn Sie es bereits wissen, scheinen Sie es nicht zu betonen (aber vielleicht lese ich nicht gut genug, zwischen zwei Besprechungen gehetzt).

Die Syntax von POSIX-APIs wird vom Compiler überwacht, ebenso wie die Syntax aller von Ihnen untersuchten APIs. Ich vermute also, dass Sie nach potenziell gefährlichem Code suchen, z. B. nach der Verwendung einheitlicher Ressourcen, nicht nach der Freigabe zugewiesener Ressourcen usw. - ist das richtig?

Es klingt jedoch nach einem großartigen Projekt, und ich habe diese Frage in der Hauptrolle gespielt.


Geben Sie hier die Bildbeschreibung ein


1
Ich interessiere mich mehr für die Semantik der APIs (nicht nur oder hauptsächlich für ihre Syntax ). Und ja, ich möchte Code mithilfe dieser API auf die von Ihnen erwähnten Dinge (und vieles mehr) analysieren. Dies ist derzeit nur eine grobe Idee (und ich werde sie an die Bedürfnisse anpassen), und ich versuche immer noch, Wege zu finden (insbesondere gemeinsame F & E-Projekte), um sie zu finanzieren.
Basile Starynkevitch

Übrigens zeigt das Qt-Beispiel, dass eine API (und eine Bibliothek) wichtig - und möglicherweise dominant - werden kann, auch ohne ein gesetzlicher Standard zu sein.
Basile Starynkevitch

5

Die Standards für verschiedene Netzwerkprotokolle sind bereits gut definiert. Es hört sich so an, als würden Sie hoffen, eine API zu finden, die Standardverhalten von IoT-Geräten implementiert. So etwas wie eine Light () - Funktion, mit der Lichter ein- und ausgeschaltet oder auf einen Bruchteil ihrer Helligkeit gedimmt werden können. DoorSensor (), der aktiviert oder deaktiviert werden kann oder sich für einen Alarm bei Ereignissen beim Öffnen oder Schließen von Türen registrieren kann; diese Art von Ding. Mir ist jedoch keine API-Bibliothek bekannt, die nicht anwendungsspezifisch ist.

Wenn jemand einen hat, finden Sie vielleicht etwas in Domoticz . Es ist ein Open Source-Controller für die Hausautomation, der in C ++ geschrieben wurde.


5

Als schnelle Antwort glaube ich nicht, dass es für IoT einen speziellen Bibliothekstyp gibt. Ich würde sagen, dass IoT im Grunde genommen die " neuen eingebetteten Systeme " sind. Sie haben lediglich den Namen geändert und die Verbindung zur Cloud hinzugefügt.

Als Antwort auf das, was ich für die C ++ - Programmierung verwende, lautet meine Referenzseite http://www.cplusplus.com/

Grundsätzlich benötigen Sie für IoT Kommunikationsbibliotheken , unabhängig davon, welches Protokoll Sie verwenden (USB, TCP / IP, UDP, ZigBee usw. usw.).

Wenn Sie über Kommunikation verfügen, benötigen Sie außerdem Sicherheit / Verschlüsselung .

Der Rest hängt davon ab, welchen Teil der Hardware Sie steuern oder messen. Sie benötigen die Bibliotheken (API / Firmware) für diese Hardware .

Sicherlich fehlen mir hier viele Dinge ... sehen wir uns die Antworten anderer an


2
Sie bestätigen also im Grunde meine grobe Intuition, dass IoT nur das neue Schlagwort für Embedded Computing ist, wahrscheinlich für Embedded Linux-Systeme?
Basile Starynkevitch

@BasileStarynkevitch Das hängt von der Geräteklasse ab. Fitness-Tracker (im Gegensatz zu am Telefon montierten Telefonerweiterungen) führen kein Linux aus. Selbstversorgende Knoten führen kein Linux aus. Hub-Knoten, die verteilte Berechnungen ausführen, führen wahrscheinlich Linux aus. Daher meine Rede von einem Stapel, der sich vom Rand bis zur Wolke erstreckt.
Sean Houlihane

1
Das ist ok. Was sind die am häufigsten verwendeten APIs oder Bibliotheken auf diesen Geräten?
Basile Starynkevitch

1
Da ZigBee wie ein Netzwerkprotokoll aussieht, liegt es außerhalb des Gültigkeitsbereichs. Eine allgemein verfügbare API in C oder C ++, die ZigBee implementiert, wäre jedoch interessant
Basile Starynkevitch

4

Eingebettet plus sichere Kommunikation plus Bereitstellung (Geräteverwaltung) plus OTA-Updates. Dies ist ein großes Softwarepaket, das sich auch als eine neue Art von Plattform für die Entwicklung herausstellt.

Es gibt mehrere Anbieter, die Cloud-Lösungen anbieten. In der Regel verfügen sie über eigene Client-APIs und ausgewählte Endpoint-Betriebssysteme.

Soweit ich das beurteilen kann, bestimmen die verschiedenen drahtlosen Protokolle keinen bestimmten Software-Stack. Daher muss Ihre Wahl vom Gesamtbild und nicht von den Client-APIs abhängen. Ein entscheidender Faktor kann sein, ob Open Source für den Stack in Ihrer Anwendung wichtig ist.


1
Ich entwickle keine IoT-Anwendungen, aber ich möchte statische Quellcode-Analysetools zum Nutzen der IoT-Softwareentwickler entwickeln.
Basile Starynkevitch

1
OK, es gibt also (erraten) 4 oder 5 verschiedene Stapel, die relevant sind, und Sie müssen alle berücksichtigen, wenn Sie verfolgen möchten, welche zwei oder drei in ein paar Jahren dominant werden.
Sean Houlihane

1
An welche genauen APIs oder Bibliotheken (in C oder C ++) denken Sie? Bitte nennen Sie sie in Ihrer Antwort!
Basile Starynkevitch

1
Wenn Sie zufällig ein Team kennen, das an solchen APIs arbeitet, leiten Sie ihnen bitte meine Frage weiter und zeigen Sie sie auf gcc-melt.org/IoT-03-interest-Starynkevitch.html
Basile Starynkevitch

3

Ich denke, Ihr Ziel ist BOOST etwas ähnlich:

Boosten Sie C ++ - Bibliotheken

Sie zielen darauf ab, "bestehende Praktiken" zu etablieren und Referenzimplementierungen bereitzustellen, damit Boost-Bibliotheken für eine eventuelle Standardisierung geeignet sind.

Vielleicht könnte Boost ein wichtiger Akteur im IoT sein: Es hat sicherlich einige große Verbesserungen an C ++ vorgenommen.


1
Kommentare sind nicht für eine ausführliche Diskussion gedacht. Dieses Gespräch wurde in den Chat verschoben .
anonym2

2

IoTivity ist die Referenzimplementierung der OCF-Spezifikation . Dokumentation und Quellcode finden Sie im GitHub-Repository .

Aus ihrer Liste der Funktionen :

  • In C geschriebene Kernfunktionalität für die Bereitstellung auf eingeschränkten Geräten
  • Die meisten Funktionen sind in C und C ++ verfügbar

Ihre Framework-APIs ermöglichen die Erkennung, Datenübertragung, Datenverwaltung (Erfassung, Speicherung und Analyse) und Geräteverwaltung (z. B. Bereitstellung, Diagnose) über verschiedene Protokolle wie Bluetooth, Wi-Fi, ZigBee und Z-Wave.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.