Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
IoT Central-enhetsbryggan är en lösning med öppen källkod som ansluter andra IoT-moln som Sigfox, Particle Device Cloud och The Things Network till ditt IoT Central-program. Enhetsbryggan fungerar genom att vidarebefordra data från enheter som är anslutna till andra IoT-moln till ditt IoT Central-program. Enhetsbryggan vidarebefordrar endast data till IoT Central, den skickar inte kommandon eller egenskapsuppdateringar från IoT Central tillbaka till enheterna.
Med enhetsbryggan kan du kombinera kraften i IoT Central med enheter som:
- Tillgångsspårningsenheter som är anslutna till Sigfox lågströmsnätverk som täcker stora områden.
- Enheter för luftkvalitetsövervakning i partikelenhetsmolnet.
- Enheter för övervakning av markfuktighet i The Things Network.
Du kan använda IoT Central-programfunktioner som regler och analys av data, skapa arbetsflöden i Power Automate och Azure Logic-appar eller exportera data.
Enhetsbryggningslösningen etablerar flera Azure-resurser i din Azure-prenumeration som fungerar tillsammans för att transformera och vidarebefordra enhetsmeddelanden till IoT Central.
Förutsättningar
För att slutföra stegen i den här guiden behöver du:
En aktiv Azure-prenumeration. Om du inte har en Azure-prenumeration, skapa ett gratis konto innan du börjar.
Ett IoT Central-applikation som skapats från den anpassade applikationsmallen. Mer information finns i Skapa ett IoT Central-program och Hur får jag information om mitt program?.
Översikt
IoT Central-enhetsbryggan är en lösning med öppen källkod i GitHub. Den använder en anpassad Azure Resource Manager-mall för att distribuera flera resurser till din Azure-prenumeration, inklusive en funktionsapp i Azure Functions.
Funktionsappen är den centrala delen av enhetsbrygga. Den tar emot HTTP POST-begäranden från andra IoT-plattformar via en enkel webhook. Azure IoT Central Device Bridge-lagringsplatsen innehåller exempel som visar hur du ansluter Sigfox-, Partikel- och The Things Network-moln. Du kan utöka den här lösningen för att ansluta till ditt anpassade IoT-moln om din plattform kan skicka HTTP POST-begäranden till funktionsappen.
Funktionsappen omvandlar data till ett format som godkänts av IoT Central och vidarebefordrar dem med hjälp av enhetsetableringstjänsten och enhetsklient-API:erna:
Om ditt IoT Central-program känner igen enhets-ID:t i det vidarebefordrade meddelandet visas telemetrin från enheten i IoT Central. Om ditt IoT Central-program inte känner igen enhets-ID:t försöker funktionsappen registrera en ny enhet med enhets-ID:t. Den nya enheten visas som en ej tilldelad enhet på sidan Enheter i ditt IoT Central-program. På sidan Enheter kan du tilldela den nya enheten till en enhetsmall och sedan visa telemetrin.
Distribuera enhetsbryggan
För att distribuera enhetsbryggan till din prenumeration:
I ditt IoT Central-program går du till sidan Behörigheter > Enhetsanslutningsgrupper .
Anteckna ID-omfånget. Du använder detta värde när du implementerar enhetsbryggan.
På samma sida öppnar du registreringsgruppen SAS-IoT-Devices . På gruppsidan SAS-IoT-Devices kopierar du primärnyckeln. Du använder detta värde när du implementerar enhetsbryggan.
Använd knappen Distribuera till Azure för att öppna den anpassade Resource Manager-mallen som distribuerar funktionsappen till din prenumeration. Använd ID-omfånget och primärnyckeln från föregående steg:
När distributionen är klar måste du installera npm-paketen som funktionen kräver:
Öppna funktionsappen som distribuerades till din prenumeration i Azure-portalen. Gå sedan till Utvecklingsverktyg>konsolen. I -konsolen kör du följande kommandon för att installera paketen:
cd IoTCIntegration npm installDet kan ta flera minuter att köra dessa kommandon. Du kan ignorera alla varningsmeddelanden på ett säkert sätt.
När paketinstallationen är klar väljer du Starta om på sidan Översikt i funktionsappen:
Funktionen är nu redo att användas. Externa system kan använda HTTP POST-begäranden för att skicka enhetsdata via enhetsbryggan till ditt IoT Central-program. Om du vill hämta funktions-URL:en går du till Functions > IoTCIntegration > Kod + Test > Hämta funktions-URL:
Meddelanden som skickas till enhetsbryggor måste ha följande format:
"device": {
"deviceId": "my-cloud-device"
},
"measurements": {
"temp": 20.31,
"pressure": 50,
"humidity": 8.5,
"ledColor": "blue"
}
Varje nyckel i measurements objektet måste matcha namnet på en telemetrityp i enhetsmallen i IoT Central-programmet. Den här lösningen stöder inte att ange gränssnitts-ID:t i meddelandetexten. Så om två olika gränssnitt har en telemetrityp med samma namn visas mätningen i båda telemetriströmmarna i ditt IoT Central-program.
Du kan inkludera ett timestamp fält i brödtexten för att ange UTC-datum och tid för meddelandet. Det här fältet måste vara i ISO 8601-format. Till exempel 2020-06-08T20:16:54.602Z. Om du inte inkluderar en tidsstämpel används aktuellt datum och tid.
Du kan inkludera ett modelId fält i brödtexten. Använd det här fältet om du vill tilldela enheten till en enhetsmall under driftsättningen.
deviceId Måste vara alfanumeriskt, använda gemener och kan innehålla bindestreck.
Om du inte inkluderar modelId fältet, eller om IoT Central inte känner igen modell-ID:t, skapar ett meddelande med en okänd deviceId enhet en ny otilldelad enhet i IoT Central. En operatör kan migrera enheten till rätt enhetsmall manuellt. Mer information finns i Hantera enheter i ditt Azure IoT Central-program > Migrera enheter till en mall.
Anmärkning
Tills enheten har tilldelats en mall returnerar alla HTTP-anrop till funktionen en 403-felstatus.
Om du vill aktivera loggning för funktionsappen med Application Insights går du till Övervakningsloggar > i funktionsappen i Azure-portalen. Välj Aktivera Application Insights.
Tilldelade resurser
Resource Manager-mallen etablerar följande resurser i din Azure-prenumeration:
- Funktionsapp
- App Service-plan
- Lagringskonto
- Nyckelvalv (Key vault)
Nyckelvalvet lagrar SAS-gruppnyckeln för ditt IoT Central-program.
Funktionsappen körs på en förbrukningsplan. Även om det här alternativet inte erbjuder dedikerade beräkningsresurser kan enhetens brygga hantera hundratals enhetsmeddelanden per minut, vilket är lämpligt för mindre flottor av enheter eller enheter som skickar meddelanden mindre ofta. Om ditt program är beroende av att strömma ett stort antal enhetsmeddelanden ersätter du förbrukningsplanen med en dedikerad App Service-plan. Den här planen erbjuder dedikerade beräkningsresurser, vilket ger snabbare svarstider för servern. Med en Standard App Service-plan var den maximala observerade prestandan för funktionen från Azure på den här lagringsplatsen cirka 1 500 enhetsmeddelanden per minut. Mer information finns i Värdalternativ för Azure Functions.
Om du vill använda en dedikerad App Service-plan i stället för en förbrukningsplan redigerar du den anpassade mallen innan du distribuerar den. Välj Redigera mall.
Ersätt följande segment:
{
"type": "Microsoft.Web/serverfarms",
"apiVersion": "2015-04-01",
"name": "[variables('planName')]",
"location": "[resourceGroup().location]",
"properties": {
"name": "[variables('planName')]",
"computeMode": "Dynamic",
"sku": "Dynamic"
}
},
Med:
{
"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')]"
}
},
Redigera sedan mallen för att inkludera "alwaysOn": true i konfigurationen för resursen functionapp under "properties": {"SiteConfig": {...}}. AlwaysOn-konfigurationen säkerställer att funktionsappen alltid körs.
Examples
I följande exempel beskrivs hur du konfigurerar enhetsbryggan för olika IoT-moln:
Exempel 1: Ansluta partikelenheter via enhetsbryggningen
Om du vill ansluta en partikelenhet via enhetsbryggan till IoT Central går du till partikelkonsolen och skapar en ny webhook-integrering. Ange begärandeformatet till JSON. Under Avancerade inställningar använder du följande anpassade brödtextformat:
{
"device": {
"deviceId": "{{{PARTICLE_DEVICE_ID}}}"
},
"measurements": {
"{{{PARTICLE_EVENT_NAME}}}": "{{{PARTICLE_EVENT_VALUE}}}"
}
}
Klistra in funktions-URL:en från funktionsappen så visas Partikelenheter som otilldelade enheter i IoT Central. Mer information finns i blogginlägget Så här integrerar du dina Partikeldrivna projekt med Azure IoT Central .
Exempel 2: Ansluta Sigfox-enheter via enhetsbryggan
Vissa plattformar kanske inte låter dig ange formatet för enhetsmeddelanden som skickas via en webhook. För sådana system måste du konvertera meddelandets nyttolast till det förväntade kroppsformatet innan enhetsbryggan bearbetar den. Du kan göra konverteringen i samma funktion som kör enhetsbryggan.
Det här avsnittet visar hur du konverterar nyttolasten av en Sigfox-webhook-integrering till det format som förväntas av enhetsbryggan. Sigfox-molnet överför enhetsdata i hexadecimalt strängformat. För enkelhetens skull innehåller enhetsbryggan en konverteringsfunktion för det här formatet, som accepterar en delmängd av de möjliga fälttyperna i Sigfox-enhetens nyttolast: int och uint av 8, 16, 32 eller 64 bitar; float av 32 bitar eller 64 bitar; little-endian och big-endian. Om du vill bearbeta meddelanden från en Sigfox webhook-integrering gör du följande ändringar i IoTCIntegration/index.js-filen i funktionsappen.
Om du vill konvertera meddelandenyttolasten lägger du till följande kod före anropet till handleMessage på rad 21 och ersätter payloadDefinition med din Sigfox-nyttolastdefinition:
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-enheter förväntar sig en 204 svarskod. Lägg till följande kod efter anropet till handleMessage på rad 21:
context.res = {
status: 204
};
Exempel 3: Ansluta enheter från Sakernas nätverk via enhetsbryggningen
Så här ansluter du Sakernas nätverksenheter till IoT Central:
- Lägg till en ny HTTP-integrering i ditt program i The Things Network: Program > integrationer > lägg till integration > HTTP-integrering.
- Kontrollera att programmet innehåller en avkodningsfunktion som automatiskt konverterar nyttolasten för dina enhetsmeddelanden till JSON innan du skickar den till funktionen: ProgramNyttolastFunktioner-avkodare >>.
Följande exempel visar en JavaScript-dekoderfunktion som du kan använda för att avkoda vanliga numeriska typer från binära data:
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)
};
}
När du har definierat integreringen lägger du till följande kod före anropet till handleMessage på rad 21 i IoTCIntegration/index.js-filen i funktionsappen. Den här koden översätter brödtexten för HTTP-integreringen till det förväntade formatet.
req.body = {
device: {
deviceId: req.body.end_device_ids.device_id.toLowerCase()
},
measurements: req.body.uplink_message.decoded_payload
};
Anmärkning
Det tidigare kodfragmentet använder det människovänliga enhets-ID:t. Meddelandet Things Network innehåller även ett tekniskt ID som du kan komma åt med hjälp av req.body.dev_eui.toLowerCase(). Mer information finns i The Things Network – Dataformat.
Begränsningar
Enhetsbryggan vidarebefordrar endast meddelanden till IoT Central och skickar inte meddelanden tillbaka till enheter. Den här begränsningen är anledningen till att egenskaper och kommandon inte fungerar för enheter som ansluter till IoT Central via den här enhetsbryggan. Eftersom enhetstvillingåtgärder inte stöds går det inte att uppdatera enhetsegenskaper via enhetsbryggans. Om du vill använda dessa funktioner måste en enhet ansluta direkt till IoT Central med någon av SDK:erna för Azure IoT-enheter.