Dieses Projekt ist eine Brücke zwischen dem orangefarbenen Lora®* -Netzwerk und dem OMA NGSIV1 -Protokoll, das vom Orion Context Broker verwendet wird, sowie von anderen Komponenten des FIware -Ökosystems.
Dieser IoT -Agent ist eine Bibliothek, die beispielsweise in einer Springboot -Anwendung verwendet werden kann.
Dieser Agent erlaubt:
Diese Bibliothek verwendet Live Objects®-Plattform (https://liveobjects
Die NGSI V1-Implementierung erfolgt in der orange-OpenSource/FIware-NGSI-API-Bibliothek.
Hier ist die globale Architektur des IoT -Agenten, die Live Objects® -Plattform verwenden, um LORA®* -Geräte -Nutzlasten zu verwalten:
Architektur
Erstellen Sie ein Maven -Projekt mit Spring -Boot -Abhängigkeiten und unserer Bibliothek:
< dependency >
< groupId >com.orange.fiware</ groupId >
< artifactId >openlpwa-iotagent</ artifactId >
< version >X.Y.Z</ version >
</ dependency > wobei XYZ die Version der Bibliothek ist (prüfen Sie Git -Tags).
Sie können einige Anwendungseinstellungen ändern, die entweder hinzufügen:
src/main/resources/application.properties in Ihrer Anwendung.Dies ist eine Liste der Anwendungseigenschaften:
| Name | Beschreibung | Standardwert |
|---|---|---|
| contextbroker.localurl | öffentliche URL zu dieser Instanz | http: // localhost: 8081 |
| contextbroker.remoteurl | URL zum Remote -Broker (Orion) | http: // localhost: 8082 |
| contextbroker.remotefiWareservice | Remote Broker Service Name | |
| contextbroker.remotefiWareservicePath | Remote -Broker -Servicepfad | |
| contextbroker.remoteAuthtoken | OAuth -Token für gesicherten Remote -Broker | |
| contextbroker.remoteAuthtokenuri | URI zum Abrufen des Authentifizierungs -Tokens verwendet | |
| contextbroker.remoteclientid | Remote -Kontext -Broker -Client -ID | |
| contextbroker.remoteclientecret | Remote -Kontext -Broker -Client -Geheimnis | |
| contextbroker.remoteuserLogin | Remote -Kontext -Broker -Benutzeranmeldung | |
| contextbroker.remoteuserPassword | Remote -Kontext -Broker -Benutzerkennwort | |
| OpenLPWAPROVIDER.Resturl | Live -Objekte® ** API -URL | https://lpwa.liveobjects.orange-business.com |
| OpenLPWAPROVIDER.APIKEY | Live -Objekte® ** API -Schlüssel | |
| OpenLPWAPROVIDER.MQTTURI | Live -Objekte® ** Mqtt Broker URI | tcp: //liveObjects.orange-business.com: 1883 |
| OpenLPWAPROVIDER.MQTTCLIENTID | Live Objects® ** MQTT Broker Client -Kennung | FIWARE-IITAGENT-KLIBE |
Um ein LORA®* -Gerät mit dem Agenten zu verwenden, befolgen Sie die folgenden Schritte:
Bevor Sie mit der Verwendung des Agenten beginnen, müssen Sie das Gerät im LPWA Live Objects®-Portal (https://lpwa.liveObjects.orange-business.com) registrieren. Wenn Ihr Gerät korrekt registriert und aktiv ist, sollten Sie bevorstehende Nutzlasten auf der Website sehen.
Daten, die von Live -Objekten gesammelt wurden, können in Nachrichtenwarteschlangen (FIFO) weitergeleitet werden. Die Schaffung einer Routing -Regel erfolgt in drei Schritten:
Sie können Ihr FIFO erstellen und Ihre Routing-Regeln für Live Objects®-Portal (https://lpwa.liveobjects.orange-business.com) definieren.
Live Objects® -Plattform verwaltet LORA®* Hexadezimal -Nutzlasten. Es ist nicht möglich, die Nutzlast auf der Plattform zu dekodieren. Sie müssen diesen Vorgang durchführen, wenn Sie den Agenten verwenden.
Um diesen Job zu erledigen, müssen Sie OpenLpwaNgsiConverter -Schnittstelle mit den beiden folgenden Methoden implementieren:
public class MyOpenLpwaNgsiConverter implements OpenLpwaNgsiConverter {
@ Override
public List < ContextAttribute > decodeData ( String deviceID , String data ) {
// Decode the hexadecimal payload to build a list of NGSI context attributes
} Die Methode decodeData ist für jede von einem Gerät gesendete Uplink -Nutzlast aufgerufen. Sie müssen diese Methode implementieren, um eine gesendete hexadezimale Nutzlast zu dekodieren und eine Liste von NGSI -Kontextattributen zu erstellen, um die mit dem Gerät zugeordnete NGSI -Entität zu aktualisieren (siehe Start The Agent).
@ Override
public String encodeDataForCommand ( String deviceID , String commandName , ContextAttribute attribute ) {
String data = attribute . getValue (). toString ();
// Build an hexadecimal payload to send a command
} Die Methode encodeDataForCommand ist für jede Downlink -Nutzlast aufgerufen, um an ein Gerät zu senden (siehe Befehl senden an ein Gerät). Sie müssen diese Methode implementieren, um den Befehl in einem NGSI -Kontextattribut abzurufen und die entsprechende hexadezimale Nutzlast zu codieren, um sie an ein Gerät zu senden.
Ohne ein Token oder Anmeldeinformationen sendet der Agent Nachrichten, ohne zu versuchen, sich an den Remote -Kontext -Broker zu authentifizieren.
Wenn ein Token ausgefüllt ist, wird der Agent dieses Token verwenden, um sich mit dem Remote -Kontextbroker zu authentifizieren, bevor er eine Nachricht sendet. Wenn das Token ungültig ist, versucht der Agent, die angegebenen Anmeldeinformationen zu verwenden, um eine neue zu generieren.
Wenn die Anmeldeinformationen ausgefüllt sind, verwendet der Agent sie, um ein Token aus dem gegebenen URI zu generieren. Solange dieses Token gültig ist, wird der Agent es weiterhin verwenden. Wenn das Token nicht mehr gültig ist, versucht der Agent, es durch eine neue zu ersetzen, basierend auf den angegebenen Anmeldeinformationen.
Die Bibliothek bietet eine Agent , um den Agenten zu verwalten. Sie sollten einfach die start aufrufen, um 3 Parameter zu übergeben:
AgentSuccessCallback der aufgerufen wird, wenn der Agent korrekt gestartet wird.AgentFailureCallback der aufgerufen wird, wenn der Agent nicht korrekt gestartet wird.Hier ist ein Beispiel, um den Agenten zu starten:
@ SpringBootApplication
@ ComponentScan ( "com.orange" )
public class Application implements ApplicationListener < ApplicationReadyEvent > {
private static Logger logger = LoggerFactory . getLogger ( Application . class );
@ Autowired
private Agent agent ;
public static void main ( String [] args ) {
new SpringApplicationBuilder ()
. sources ( Application . class )
. bannerMode ( Banner . Mode . LOG )
. run ( args );
}
@ Override
public void onApplicationEvent ( ApplicationReadyEvent applicationReadyEvent ) {
agent . start ( new MyOpenLpwaNgsiConverter (),
() -> {
logger . debug ( "IoT agent started" );
},
ex -> {
logger . error ( "IoT agent not started" , ex );
}
);
}
}Unter der Haube stellt der Agent eine Verbindung zum Live Objects® MQTT Broker her, um die Uplink -Payloads während dieses Schritts abzurufen.
Dieses Projekt befindet sich unter der Apache -Lizenzversion 2.0.