mbedServer
Einführung¶
Bei Internet auf Dingen Geräten stehen folgende Ziele im Vordergrund:
- Direkt Adressierbar, Gerät zu Gerät (Master/Slave), Gerät zu Smartphone/Tablet (Wearables) oder Gerät - Cloud
- Einfache Einbindung in bestehende Netzwerke (Ethernet, WLAN, Bluetooth)
- Anpassung an limitierte Ressourcen der Geräte (min. 32KB Flash, 4KB RAM) oder Wissen der Anwender
- Skalierbar von 250 - 300 Geräte in einem Haushalt
- Antwortzeiten unter 100 Millisekunden für eine typische Interaktion (z.B. im Auto)
- Nahtlose Integration mit Smartphones und Tablets
- Minimaler Stromverbrauch für lange Batterielebensdauer (ein Jahr und länger)
Um diese Ziele zu erreichen, werden eigene Protokolle und Device Server verwendet.
Ein Device Server nutzt:
- Open-Source-Protokolle wie COAP / HTTP, MQTT, TLS / TCP, DTLS / UDP und OMALWM2M für die Datenkommunikation und Gerätemanagement.
- Stellt die Interoperabilität zwischen Geräte Protokollen wie MQTT, COAP etc. und REST (über HTTP) her.
Und beinhaltet grundlegende Techniken des „physical mashups“ (wie Sensoren und Aktoren mittels Netzwerk-Technologien ad hoc zu einem funktionsfähigen Ganzen verbunden werden).
COAP¶
Constrained Application Protocol (Coap) ist ein Software-Protokoll welches für Internet der Dinge Geräte zugeschnitten ist.
COAP ist auf den meisten Geräten, die UDP Unterstützen, lauffähig.
Ein COAP fähiges Gerät publiziert seine Sensoren und Aktoren in einem Resource Directory oder stellt selber ein solches zur Verfügung.
Mittels Resource Discovery können die vorhandenen Sensoren und Aktoren mit ihren Attributen abgefragt werden.
Resource discovery
GET /.well-known/core
Antwort
</config/groups>;rt="core.gp";ct=50, </large>;rt="block";sz=1280, </device>;title="Device management", </sensors/temp>;if="sensor";rt="ucum.Cel", </sensors/light>;if="sensor";rt=light-lux
rt=Resource Type, ct=Content Type, if=Interface Description
Weitere Informationen: ARM CoAP Tutorial
IoT @ Eclipse¶
Das IoT Eclipse Projekt ist einen Sammlung von Internet der Dinge Projekten.
Californium¶
Dienst zum Erstellen von CoAP Clients und Servern in Java.
leshan - Open Mobile Alliance (OMA) Lightweight M2M (LWM2M) Server¶
leshan Erweitert Californium um einen Lightweight M2M (LWM2M) Server. D.h. neben der CoAP Funktionalität kommen weitere hinzu, wie:
- RD - Resource Directory (Verwalten von CoAP Clients)
- Eine Web Oberfläche
- REST API
- Standard Device Management Objects
Standard Device Management Objects
- 1 - Server
- 2 - Zugriffsberechtigungen
- 3 - Gerät
- 4 - Monitoring
- 5 - Firmware
- 6 - GPS Informationen
Installation
wget https://hudson.eclipse.org/leshan/job/leshan/lastSuccessfulBuild/artifact/leshan-standalone.jar java -jar ./leshan-standalone.jar
Anwahl der Web Oberfläche mittels http://localhost/8080.
Beispiele: REST (leshan Server)
# Alle Clients abfragen (Antwort im JSON Format) curl -X GET http://localhost:8080/api/clients # Wert von LED2 abfragen (Antwort im text/plain Format) curl -X GET http://localhost:8080/api/clients/mbed-k64f-1234/10/0/2 # Wert für LED2 setzen curl -X GET -vvv http://localhost:8080/api/clients/mbed-k64f-1234/10/0/2 -H "Content-Type: text/plain" -d "10"
Import programCOAPleshan
CoAP Device Server Client mit leshan Server
Implementierung CoAP Resource:
#include "PwmOutResource.h" /** Erste verkettete Resource */ PwmOutResource * firstPwmOutResource; /** Default Konstruktor * @param pin Pin fuer PwmOut */ PwmOutResource::PwmOutResource( PinName pin, char *name, char *id ) { resource = new PwmOut( pin ); this->id = id; this->name = name; // neu verketten - letztes hinzugefuegstes Element = first. if ( firstPwmOutResource != (PwmOutResource *) 0 ) this->next = firstPwmOutResource; firstPwmOutResource = this; } /** Erstellt die Resource * @param sn_nsdl_resource_info_s CoAP struct * @return 0 wenn ohne Fehler */ int PwmOutResource::create( sn_nsdl_resource_info_s *resource_ptr ) { nsdl_create_dynamic_resource(resource_ptr, strlen(id), (uint8_t*) id, strlen(name), (uint8_t*) name, 0, &PwmOutResource::callback, (SN_GRS_GET_ALLOWED | SN_GRS_PUT_ALLOWED)); return ( 0 ); } /** Callback wenn die Resource gelesen oder geaendert werden soll * @param sn_coap_hdr_s * @param sn_nsdl_addr_s * @param sn_proto_info_s * @return 0 wenn ohne Fehler */ uint8_t PwmOutResource::callback( sn_coap_hdr_s *received_coap_ptr, sn_nsdl_addr_s *address, sn_proto_info_s * proto ) { sn_coap_hdr_s *coap_res_ptr = 0; char buf[8]; char path[8]; PwmOutResource* current; // Path wegkopieren mit \0 strncpy( path, (const char*) received_coap_ptr->uri_path_ptr, received_coap_ptr->uri_path_len ); printf("light callback %s\r\n", path ); // Resource laut path suchen for ( current = firstPwmOutResource; current != (PwmOutResource *) 0; current = current->next ) if ( strcmp( path, current->id ) == 0 ) break; // nichts gefunden - keine weitere Abhandlung if ( current == (PwmOutResource*) 0 ) return ( 1 ); // CoAP GET if(received_coap_ptr->msg_code == COAP_MSG_CODE_REQUEST_GET) { coap_res_ptr = sn_coap_build_response(received_coap_ptr, COAP_MSG_CODE_RESPONSE_CONTENT); sprintf( buf, "%d", (int) (current->resource->read() * 100) ); coap_res_ptr->payload_len = strlen( buf ); coap_res_ptr->payload_ptr = (uint8_t*) buf; sn_nsdl_send_coap_message(address, coap_res_ptr); } // CoAP PUT else if(received_coap_ptr->msg_code == COAP_MSG_CODE_REQUEST_PUT) { memcpy(buf, (char *)received_coap_ptr->payload_ptr, received_coap_ptr->payload_len); buf[received_coap_ptr->payload_len] = '\0'; current->resource->write( atof( buf ) / 100 ); coap_res_ptr = sn_coap_build_response(received_coap_ptr, COAP_MSG_CODE_RESPONSE_CHANGED); sn_nsdl_send_coap_message(address, coap_res_ptr); } sn_coap_parser_release_allocated_coap_msg_mem(coap_res_ptr); return ( 0 ); }
Übungen¶
Installiert den LWM2M Server auf Eurem Notebook.
Importiert das COAPleshan Programm, ändert die IP-Adresse des Servers auf die Eures Notebooks und lädt es auf Eurer Board.
Zusammenfassung¶
ARM stellt einen eigenen mbed Device Server zur Verfügung. Der mbed Device Server nutzt Open-Source-Protokolle wie COAP / HTTP, MQTT, TLS / TCP, DTLS / UDP und OMALWM2M für die Datenkommunikation und Gerätemanagement.
Demgegenüber gibt es die IoT Projektsammlung von Eclipse, welche mehr und mehr eine Alternative darstellt.
CoAP¶
Constrained Application Protocol (Coap) ist ein Software-Protokoll welches für Internet der Dinge Geräte zugeschnitten ist.
COAP ist auf den meisten Geräten, die UDP Unterstützen, lauffähig.
Ein COAP fähiges Gerät publiziert seine Sensoren und Aktoren in einem Resource Directory oder stellt selber ein solches zur Verfügung.
Mittels Resource Discovery können die vorhandenen Sensoren und Aktoren mit ihren Attributen abgefragt werden.