De IoT Central-apparaatbrug gebruiken om andere IoT-clouds te verbinden met IoT Central
De IoT Central-apparaatbrug is een opensource-oplossing die andere IoT-clouds, zoals Sigfox, Deeltjesapparaatcloud en The Things Network, verbindt met uw IoT Central-toepassing. De apparaatbrug werkt door gegevens door te sturen van apparaten die zijn verbonden met andere IoT-clouds via uw IoT Central-toepassing. De apparaatbrug stuurt alleen gegevens door naar IoT Central, maar verzendt geen opdrachten of eigenschapsupdates van IoT Central naar de apparaten.
Met de apparaatbrug kunt u de kracht van IoT Central combineren met apparaten zoals:
- Apparaten voor het bijhouden van activa die zijn verbonden met sigfox's low-power wide area network.
- Bewakingsapparaten voor de luchtkwaliteit in de deeltjesapparaatcloud.
- Bodemvochtbewakingsapparaten op The Things Network.
U kunt IoT Central-toepassingsfuncties gebruiken, zoals regels en analyses op de gegevens, werkstromen maken in Power Automate en Azure Logic-apps of de gegevens exporteren.
De oplossing voor apparaatbrugs richt verschillende Azure-resources in uw Azure-abonnement in die samenwerken om apparaatberichten te transformeren en door te sturen naar IoT Central.
Vereisten
Als u de stappen in deze handleiding wilt voltooien, hebt u het volgende nodig:
Een actief Azure-abonnement. Als u geen Azure-abonnement hebt, maakt u een gratis account voordat u begint.
Een IoT Central-toepassing die is gemaakt op basis van de aangepaste toepassingssjabloon . Zie Een IoT Central-toepassing maken en Over uw toepassing voor meer informatie.
Overzicht
De IoT Central-apparaatbrug is een opensource-oplossing in GitHub. Er wordt een aangepaste Azure Resource Manager-sjabloon gebruikt om verschillende resources te implementeren in uw Azure-abonnement, waaronder een functie-app in Azure Functions.
De functie-app is het kernstuk van de apparaatbrug. Het ontvangt HTTP POST-aanvragen van andere IoT-platforms via een eenvoudige webhook. De Azure IoT Central Device Bridge-opslagplaats bevat voorbeelden die laten zien hoe u Sigfox, Deeltje en The Things Network-clouds verbindt. U kunt deze oplossing uitbreiden om verbinding te maken met uw aangepaste IoT-cloud als uw platform HTTP POST-aanvragen naar uw functie-app kan verzenden.
De functie-app transformeert de gegevens in een indeling die wordt geaccepteerd door IoT Central en stuurt deze door met behulp van de API's van de device provisioning service en de apparaatclient:
Als uw IoT Central-toepassing de apparaat-id in het doorgestuurde bericht herkent, wordt de telemetrie van het apparaat weergegeven in IoT Central. Als uw IoT Central-toepassing de apparaat-id niet herkent, probeert de functie-app een nieuw apparaat te registreren met de apparaat-id. Het nieuwe apparaat wordt weergegeven als een niet-toegewezen apparaat op de pagina Apparaten in uw IoT Central-toepassing. Op de pagina Apparaten kunt u het nieuwe apparaat toewijzen aan een apparaatsjabloon en vervolgens de telemetrie bekijken.
De apparaatbrug implementeren
De apparaatbrug implementeren in uw abonnement:
Navigeer in uw IoT Central-toepassing naar de pagina Verbindingsgroepen machtigingen voor apparaten>.
Noteer het Id-bereik. U gebruikt deze waarde wanneer u de apparaatbrug implementeert.
Open op dezelfde pagina de registratiegroep SAS-IoT-Devices . Kopieer op de groepspagina SAS-IoT-Devices de primaire sleutel. U gebruikt deze waarde wanneer u de apparaatbrug implementeert.
Gebruik de volgende knop Implementeren in Azure om de aangepaste Resource Manager-sjabloon te openen waarmee de functie-app in uw abonnement wordt geïmplementeerd. Gebruik het id-bereik en de primaire sleutel uit de vorige stap:
Nadat de implementatie is voltooid, moet u de npm-pakketten installeren waarvoor de functie is vereist:
Open in Azure Portal de functie-app die is geïmplementeerd in uw abonnement. Ga vervolgens naar de console Ontwikkelhulpprogramma's>. Voer in de console de volgende opdrachten uit om de pakketten te installeren:
cd IoTCIntegration npm install
Het uitvoeren van deze opdrachten kan enkele minuten duren. U kunt waarschuwingsberichten veilig negeren.
Nadat de installatie van het pakket is voltooid, selecteert u Opnieuw opstarten op de pagina Overzicht van de functie-app:
De functie is nu klaar voor gebruik. Externe systemen kunnen HTTP POST-aanvragen gebruiken om apparaatgegevens via de apparaatbrug naar uw IoT Central-toepassing te verzenden. Als u de functie-URL wilt ophalen, gaat u naar Functions > IoTCIntegration > Code + Test > Get-functie-URL:
Berichten die naar de apparaatbrug worden verzonden, moeten de volgende indeling hebben:
"device": {
"deviceId": "my-cloud-device"
},
"measurements": {
"temp": 20.31,
"pressure": 50,
"humidity": 8.5,
"ledColor": "blue"
}
Elke sleutel in het measurements
object moet overeenkomen met de naam van een telemetrietype in de apparaatsjabloon in de IoT Central-toepassing. Deze oplossing biedt geen ondersteuning voor het opgeven van de interface-id in de berichttekst. Dus als twee verschillende interfaces een telemetrietype met dezelfde naam hebben, wordt de meting weergegeven in beide telemetriestromen in uw IoT Central-toepassing.
U kunt een timestamp
veld in de hoofdtekst opnemen om de UTC-datum en -tijd van het bericht op te geven. Dit veld moet de ISO 8601-indeling hebben. Bijvoorbeeld 2020-06-08T20:16:54.602Z
. Als u geen tijdstempel opneemt, wordt de huidige datum en tijd gebruikt.
U kunt een modelId
veld opnemen in de hoofdtekst. Gebruik dit veld om het apparaat tijdens het inrichten toe te wijzen aan een apparaatsjabloon.
De deviceId
naam moet alfanumerieke, kleine letters zijn en mag afbreekstreepjes bevatten.
Als u het modelId
veld niet opneemt of als IoT Central de model-id niet herkent, maakt een bericht met een niet-herkend deviceId
apparaat een nieuw niet-toegewezen apparaat in IoT Central. Een operator kan het apparaat handmatig migreren naar de juiste apparaatsjabloon. Zie Apparaten beheren in uw Azure IoT Central-toepassing > Apparaten migreren naar een sjabloon voor meer informatie.
Notitie
Totdat het apparaat is toegewezen aan een sjabloon, retourneren alle HTTP-aanroepen naar de functie een foutstatus van 403.
Als u logboekregistratie wilt inschakelen voor de functie-app met Application Insights, gaat u naar Bewakingslogboeken > in uw functie-app in Azure Portal. Selecteer Application Insights inschakelen.
Ingerichte resources
De Resource Manager-sjabloon richt de volgende resources in uw Azure-abonnement in:
- Functie-app
- App Service-plan
- Storage account
- Sleutelkluis
In de sleutelkluis wordt de SAS-groepssleutel voor uw IoT Central-toepassing opgeslagen.
De functie-app wordt uitgevoerd op een verbruiksabonnement. Hoewel deze optie geen toegewezen rekenresources biedt, kan de apparaatbrug honderden apparaatberichten per minuut verwerken, geschikt voor kleinere apparaten of apparaten die minder vaak berichten verzenden. Als uw toepassing afhankelijk is van het streamen van een groot aantal apparaatberichten, vervangt u het verbruiksabonnement door een toegewezen App Service-plan. Dit plan biedt toegewezen rekenresources, die snellere reactietijden van de server bieden. Met behulp van een standaard App Service-plan waren de maximaal waargenomen prestaties van de functie uit Azure in deze opslagplaats ongeveer 1500 apparaatberichten per minuut. Zie De hostingopties van Azure Functions voor meer informatie.
Als u een speciaal App Service-plan wilt gebruiken in plaats van een verbruiksabonnement, bewerkt u de aangepaste sjabloon voordat u implementeert. Selecteer Sjabloon bewerken.
Vervang het volgende segment:
{
"type": "Microsoft.Web/serverfarms",
"apiVersion": "2015-04-01",
"name": "[variables('planName')]",
"location": "[resourceGroup().location]",
"properties": {
"name": "[variables('planName')]",
"computeMode": "Dynamic",
"sku": "Dynamic"
}
},
wordt uitgevoerd met
{
"type": "Microsoft.Web/serverfarms",
"sku": {
"name": "S1",
"tier": "Standard",
"size": "S1",
"family": "S",
"capacity": 1
},
"kind": "app",
"name": "[variables('planName')]",
"apiVersion": "2016-09-01",
"location": "[resourceGroup().location]",
"tags": {
"iotCentral": "device-bridge",
"iotCentralDeviceBridge": "app-service-plan"
},
"properties": {
"name": "[variables('planName')]"
}
},
Bewerk vervolgens de sjabloon om op te nemen "alwaysOn": true
in de configuratie voor de functionapp
resource onder "properties": {"SiteConfig": {...}}
De alwaysOn-configuratie zorgt ervoor dat de functie-app altijd wordt uitgevoerd.
Voorbeelden
In de volgende voorbeelden ziet u hoe u de apparaatbrug configureert voor verschillende IoT-clouds:
Voorbeeld 1: Verbinding maken de deeltjesapparaten via de apparaatbrug
Als u een deeltjeapparaat via de apparaatbrug wilt verbinden met IoT Central, gaat u naar de Deeltjesconsole en maakt u een nieuwe webhookintegratie. Stel de aanvraagindeling in op JSON. Gebruik onder Geavanceerd Instellingen de volgende aangepaste hoofdtekstindeling:
{
"device": {
"deviceId": "{{{PARTICLE_DEVICE_ID}}}"
},
"measurements": {
"{{{PARTICLE_EVENT_NAME}}}": "{{{PARTICLE_EVENT_VALUE}}}"
}
}
Plak de functie-URL uit uw functie-app en u ziet dat deeltjesapparaten worden weergegeven als niet-toegewezen apparaten in IoT Central. Voor meer informatie raadpleegt u het blogbericht Over het integreren van uw deeltjeprojecten met Azure IoT Central .
Voorbeeld 2: Verbinding maken sigfox-apparaten via de apparaatbrug
Op sommige platforms kunt u mogelijk niet de indeling opgeven van apparaatberichten die via een webhook worden verzonden. Voor dergelijke systemen moet u de nettolading van het bericht converteren naar de verwachte hoofdtekstindeling voordat de apparaatbrug deze verwerkt. U kunt de conversie uitvoeren in dezelfde functie waarop de apparaatbrug wordt uitgevoerd.
In deze sectie wordt beschreven hoe u de nettolading van een Sigfox-webhookintegratie converteert naar de body-indeling die wordt verwacht door de apparaatbrug. De Sigfox-cloud verzendt apparaatgegevens in een hexadecimale tekenreeksindeling. Voor het gemak bevat de apparaatbrug een conversiefunctie voor deze indeling, die een subset accepteert van de mogelijke veldtypen in de nettolading van een Sigfox-apparaat: int
en uint
van 8, 16, 32 of 64 bits; float
van 32 bits of 64 bits; little-endian en big-endian. Als u berichten van een Sigfox-webhookintegratie wilt verwerken, moet u de volgende wijzigingen aanbrengen in het IoTCIntegration/index.js-bestand in de functie-app.
Als u de nettolading van het bericht wilt converteren, voegt u de volgende code toe vóór de aanroep op handleMessage
regel 21, waarbij u payloadDefinition
de definitie van uw Sigfox-nettolading vervangt:
const payloadDefinition = 'gforce::uint:8 lat::uint:8 lon::uint:16'; // Replace this with your payload definition
req.body = {
device: {
deviceId: req.body.device
},
measurements: require('./converters/sigfox')(payloadDefinition, req.body.data)
};
Sigfox-apparaten verwachten een 204
antwoordcode. Voeg de volgende code toe na de aanroep in handleMessage
regel 21:
context.res = {
status: 204
};
Voorbeeld 3: apparaten Verbinding maken van The Things Network via de apparaatbrug
De Things Network-apparaten verbinden met IoT Central:
- Voeg een nieuwe HTTP-integratie toe aan uw toepassing in The Things Network: Toepassingsintegraties > voegen integratie-HTTP-integratie >toe>.
- Zorg ervoor dat uw toepassing een decoderfunctie bevat waarmee de nettolading van uw apparaatberichten automatisch wordt geconverteerd naar JSON voordat deze naar de functie wordt verzonden: Decoder van Application > Payload Functions>.
In het volgende voorbeeld ziet u een JavaScript-decoderfunctie die u kunt gebruiken om algemene numerieke typen van binaire gegevens te decoderen:
function Decoder(bytes, port) {
function bytesToFloat(bytes, decimalPlaces) {
var bits = (bytes[3] << 24) | (bytes[2] << 16) | (bytes[1] << 8) | bytes[0];
var sign = (bits >>> 31 === 0) ? 1.0 : -1.0;
var e = bits >>> 23 & 0xff;
var m = (e === 0) ? (bits & 0x7fffff) << 1 : (bits & 0x7fffff) | 0x800000;
var f = Math.round((sign * m * Math.pow(2, e - 150)) * Math.pow(10, decimalPlaces)) / Math.pow(10, decimalPlaces);
return f;
}
function bytesToInt32(bytes, signed) {
var bits = bytes[0] | (bytes[1] << 8) | (bytes[2] << 16) | (bytes[3] << 24);
var sign = 1;
if (signed && bits >>> 31 === 1) {
sign = -1;
bits = bits & 0x7FFFFFFF;
}
return bits * sign;
}
function bytesToShort(bytes, signed) {
var bits = bytes[0] | (bytes[1] << 8);
var sign = 1;
if (signed && bits >>> 15 === 1) {
sign = -1;
bits = bits & 0x7FFF;
}
return bits * sign;
}
return {
temperature: bytesToFloat(bytes.slice(0, 4), 2),
presscounter: bytesToInt32(bytes.slice(4, 8), true),
blueLux: bytesToShort(bytes.slice(8, 10), false)
};
}
Nadat u de integratie hebt gedefinieerd, voegt u de volgende code toe vóór de aanroep in handleMessage
regel 21 van het IoTCIntegration/index.js-bestand van uw functie-app. Met deze code wordt de hoofdtekst van uw HTTP-integratie omgezet in de verwachte indeling.
req.body = {
device: {
deviceId: req.body.end_device_ids.device_id.toLowerCase()
},
measurements: req.body.uplink_message.decoded_payload
};
Notitie
In het vorige fragment wordt de apparaat-id gebruikt die geschikt is voor mensen. Het bericht Things Network bevat ook een technische id die u kunt openen met behulp van req.body.dev_eui.toLowerCase()
. Zie The Things Network - Gegevensindelingen voor meer informatie.
Beperkingen
De apparaatbrug stuurt alleen berichten door naar IoT Central en stuurt geen berichten terug naar apparaten. Deze beperking is waarom eigenschappen en opdrachten niet werken voor apparaten die via deze apparaatbrug verbinding maken met IoT Central. Omdat bewerkingen van apparaatdubbels niet worden ondersteund, is het niet mogelijk om apparaateigenschappen via de apparaatbrug bij te werken. Als u deze functies wilt gebruiken, moet een apparaat rechtstreeks verbinding maken met IoT Central met behulp van een van de Azure IoT-apparaat-SDK's.
Volgende stappen
Nu u hebt geleerd hoe u de IoT Central-apparaatbrug implementeert, volgt u de voorgestelde volgende stap: