Udostępnij za pomocą


Użyj mostka urządzeń IoT Central, aby połączyć inne chmury IoT z IoT Central

Mostek urządzeń usługi IoT Central to rozwiązanie typu open source, które łączy inne chmury IoT, takie jak Sigfox, Chmura urządzeń cząstkowych i Sieć rzeczy do aplikacji usługi IoT Central. Most urządzeń działa przez przekazywanie danych z urządzeń połączonych z innymi chmurami IoT do aplikacji usługi IoT Central. Mostek urządzenia przekazuje dane tylko do usługi IoT Central, nie wysyła poleceń ani aktualizacji właściwości z usługi IoT Central z powrotem do urządzeń.

Mostek urządzenia umożliwia połączenie możliwości usługi IoT Central z urządzeniami takimi jak:

  • Urządzenia do śledzenia zasobów połączone z rozległą siecią o niskim zużyciu energii Sigfox.
  • Urządzenia do monitorowania jakości powietrza w chmurze urządzeń cząstkowych.
  • Urządzenia do monitorowania wilgoci gleby w the Things Network.

Możesz użyć funkcji aplikacji usługi IoT Central, takich jak reguły i analiza danych, tworzyć przepływy pracy w usługach Power Automate i Azure Logic Apps lub eksportować dane.

Rozwiązanie integracyjne dla urządzeń aprowizuje kilka zasobów platformy Azure w ramach subskrypcji Azure, które współpracują ze sobą, aby przetwarzać i przekazywać komunikaty z urządzeń do platformy IoT Central.

Wymagania wstępne

Aby wykonać kroki opisane w tym przewodniku z instrukcjami, potrzebne są następujące elementy:

Przegląd

Brama urządzeń usługi IoT Central to rozwiązanie open source na GitHub. Używa on niestandardowego szablonu usługi Azure Resource Manager do wdrażania kilku zasobów w ramach subskrypcji platformy Azure, w tym aplikacji funkcji w usłudze Azure Functions.

Aplikacja funkcji jest podstawowym elementem mostka urządzenia. Odbiera żądania HTTP POST z innych platform IoT za pośrednictwem prostego webhooka. Repozytorium mostu urządzeń usługi Azure IoT Central zawiera przykłady pokazujące, jak połączyć chmury Sigfox, Particle i The Things Network. To rozwiązanie można rozszerzyć, aby połączyć się z niestandardową chmurą IoT, jeśli platforma może wysyłać żądania HTTP POST do funkcji aplikacji.

Aplikacja funkcji przekształca dane w format akceptowany przez IoT Central i przekazuje je za pomocą usługi aprowizacji urządzeń oraz interfejsów API klienta urządzeń.

Zrzut ekranu przedstawiający definicję usługi Azure Functions z kodem.

Jeśli aplikacja usługi IoT Central rozpoznaje identyfikator urządzenia w przesłanym dalej komunikacie, dane telemetryczne z urządzenia są wyświetlane w usłudze IoT Central. Jeśli aplikacja usługi IoT Central nie rozpoznaje identyfikatora urządzenia, aplikacja funkcji próbuje zarejestrować nowe urządzenie przy użyciu identyfikatora urządzenia. Nowe urządzenie jest wyświetlane jako nieprzypisane urządzenie na stronie Urządzenia w aplikacji usługi IoT Central. Na stronie Urządzenia możesz przypisać nowe urządzenie do szablonu urządzenia, a następnie wyświetlić dane telemetryczne.

Wdrażanie mostka urządzenia

Aby wdrożyć bramę urządzeń w ramach Twojej subskrypcji:

  1. W aplikacji usługi IoT Central przejdź do strony Uprawnienia > Grupy połączeń urządzeń .

    1. Zanotuj zakres identyfikatorów. Ta wartość jest używana podczas wdrażania mostka urządzenia.

    2. Na tej samej stronie otwórz grupę rejestracji SAS-IoT-Devices . Na stronie grupy SAS-IoT-Devices skopiuj klucz podstawowy. Ta wartość jest używana podczas wdrażania mostka urządzenia.

  2. Użyj następującego przycisku Wdróż na platformie Azure, aby otworzyć niestandardowy szablon usługi Resource Manager, który wdraża aplikację funkcji do Twojej subskrypcji. Użyj zakresu identyfikatora i klucza podstawowego z poprzedniego kroku:

    Przycisk Wdróż na platformie Azure

Po zakończeniu wdrażania należy zainstalować pakiety npm wymagane przez funkcję:

  1. W witrynie Azure Portal otwórz aplikację funkcji, która została wdrożona w ramach subskrypcji. Następnie przejdź dokonsoli> programistycznych. W konsoli uruchom następujące polecenia, aby zainstalować pakiety:

    cd IoTCIntegration
    npm install
    

    Uruchomienie tych poleceń może potrwać kilka minut. Możesz bezpiecznie zignorować wszelkie komunikaty ostrzegawcze.

  2. Po zakończeniu instalacji pakietu wybierz pozycję Uruchom ponownie na stronie Przegląd aplikacji funkcji:

    Zrzut ekranu przedstawiający opcję ponownego uruchamiania w usłudze Azure Functions.

  3. Funkcja jest teraz gotowa do użycia. Systemy zewnętrzne mogą używać żądań HTTP POST do wysyłania danych urządzenia za pośrednictwem mostka urządzenia do aplikacji usługi IoT Central. Aby uzyskać adres URL funkcji, przejdź do Funkcje > IoTCIntegration > Kod + Test > Pobierz adres URL funkcji:

    Zrzut ekranu przedstawiający adres URL funkcji get w usłudze Azure Functions.

Jednostki komunikatów wysyłane do mostka urządzenia muszą mieć następujący format:

"device": {
  "deviceId": "my-cloud-device"
},
"measurements": {
  "temp": 20.31,
  "pressure": 50,
  "humidity": 8.5,
  "ledColor": "blue"
}

Każdy klucz w measurements obiekcie musi być zgodny z nazwą typu telemetrii w szablonie urządzenia w aplikacji usługi IoT Central. To rozwiązanie nie obsługuje określania identyfikatora interfejsu w treści komunikatu. Jeśli więc dwa różne interfejsy mają typ telemetrii o tej samej nazwie, pomiar pojawia się w obu strumieniach telemetrii w aplikacji usługi IoT Central.

Możesz dołączyć timestamp pole w treści, aby określić datę i godzinę UTC wiadomości. To pole musi mieć format ISO 8601. Na przykład 2020-06-08T20:16:54.602Z. Jeśli nie dołączysz znacznika czasu, zostanie użyta bieżąca data i godzina.

Możesz dołączyć pole modelId do treści. To pole służy do przypisywania urządzenia do szablonu urządzenia podczas aprowizacji.

deviceId musi być alfanumeryczny, zapisany małymi literami i może zawierać łączniki.

Jeśli nie dołączysz pola modelId, lub jeśli usługa IoT Central nie rozpozna identyfikatora modelu, wówczas nierozpoznany komunikat deviceId tworzy nowe nieprzypisane urządzenie w usłudze IoT Central. Operator może ręcznie przeprowadzić migrację urządzenia do odpowiedniego szablonu urządzenia. Aby dowiedzieć się więcej, zobacz Zarządzanie urządzeniami w aplikacji > usługi Azure IoT Central Migrowanie urządzeń do szablonu.

Uwaga / Notatka

Do momentu przypisania urządzenia do szablonu wszystkie wywołania HTTP funkcji zwracają stan błędu 403.

Aby włączyć rejestrowanie dla aplikacji funkcji z wykorzystaniem Application Insights, przejdź do obszaru Monitorowanie > dzienników w portalu Azure. Wybierz pozycję Włącz usługę Application Insights.

Aprowizowane zasoby

Szablon usługi Resource Manager tworzy następujące zasoby w ramach subskrypcji usługi Azure:

  • Aplikacja funkcji
  • Plan Usługi aplikacji
  • Konto magazynu
  • Repozytorium kluczy

Magazyn kluczy przechowuje klucz grupy SAS dla Twojej aplikacji IoT Central.

Aplikacja funkcji jest uruchamiana w planie zużycia. Chociaż ta opcja nie oferuje dedykowanych zasobów obliczeniowych, umożliwia mostkowi urządzeń obsługę setek komunikatów urządzeniowych na minutę, co jest odpowiednie dla mniejszych flot urządzeń lub dla urządzeń, które rzadziej przesyłają dane. Jeśli Twoja aplikacja zależy od przesyłania strumieniowego dużej liczby komunikatów z urządzeń, zastąp plan zużycia dedykowanym App Service Planem. Ten plan oferuje dedykowane zasoby obliczeniowe, które zapewniają szybsze czasy odpowiedzi serwera. W przypadku standardowego planu usługi App Service maksymalna zaobserwowana wydajność funkcji z platformy Azure w tym repozytorium wynosiła około 1500 komunikatów urządzenia na minutę. Aby dowiedzieć się więcej, zobacz Opcje hostingu usługi Azure Functions.

Aby użyć dedykowanego planu usługi App Service zamiast planu zużycia, przed wdrożeniem przeprowadź edycję szablonu niestandardowego. Wybierz pozycję Edytuj szablon.

Zrzut ekranu przedstawiający opcję edytowania szablonu dla szablonu usługi Azure Resource Manager.

Zastąp następujący segment:

{
  "type": "Microsoft.Web/serverfarms",
  "apiVersion": "2015-04-01",
  "name": "[variables('planName')]",
  "location": "[resourceGroup().location]",
  "properties": {
    "name": "[variables('planName')]",
    "computeMode": "Dynamic",
    "sku": "Dynamic"
  }
},

Z:

{
  "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')]"
  }
},

Następnie zmodyfikuj szablon, aby uwzględnić "alwaysOn": true w konfiguracji zasobu w obszarze functionapp dla "properties": {"SiteConfig": {...}}. Konfiguracja alwaysOn zapewnia, że aplikacja funkcji jest zawsze uruchomiona.

Przykłady

W poniższych przykładach przedstawiono sposób konfigurowania mostka urządzenia dla różnych chmur IoT:

Przykład 1: Łączenie urządzeń Particle za pośrednictwem mostu urządzenia

Aby połączyć urządzenie Particle za pośrednictwem mostka urządzeniowego z usługą IoT Central, przejdź do konsoli Particle i utwórz nową integrację webhook. Ustaw format żądania na JSON. W obszarze Ustawienia zaawansowane użyj następującego niestandardowego formatu treści:

{
  "device": {
    "deviceId": "{{{PARTICLE_DEVICE_ID}}}"
  },
  "measurements": {
    "{{{PARTICLE_EVENT_NAME}}}": "{{{PARTICLE_EVENT_VALUE}}}"
  }
}

Wklej adres URL funkcji ze swojej aplikacji funkcyjnej, a zobaczysz, że urządzenia Particle pojawiają się jako nieprzypisane w usłudze IoT Central. Aby dowiedzieć się więcej, zobacz wpis w blogu Oto, jak zintegrować projekty oparte na cząstkach z usługą Azure IoT Central .

Przykład 2: Łączenie urządzeń Sigfox za pośrednictwem mostu urządzeń

Niektóre platformy mogą nie zezwalać na określanie formatu komunikatów urządzenia wysyłanych za pośrednictwem elementu webhook. W przypadku takich systemów należy przekonwertować treść wiadomości na oczekiwany format przed przetworzeniem jej przez mostek urządzenia. Konwersję można wykonać w tej samej funkcji, która uruchamia mostek urządzenia.

W tej sekcji pokazano, jak przekonwertować ładunek integracji webhook Sigfox na format treści oczekiwany przez bridge urządzenia. Chmura Sigfox przesyła dane urządzenia w formacie ciągu szesnastkowego. Dla wygody mostek urządzenia zawiera funkcję konwersji dla tego formatu, która akceptuje podzestaw możliwych typów pól w ładunku urządzenia Sigfox: int i uint o długości 8, 16, 32 lub 64 bitów; float o długości 32 bitów lub 64 bitów; formaty little-endian i big-endian. Aby przetworzyć komunikaty z integracji elementu webhook Sigfox, wprowadź następujące zmiany w pliku IoTCIntegration/index.js w aplikacji funkcji.

Aby przekonwertować ładunek komunikatu, dodaj następujący kod przed wywołaniem w wierszu 21 handleMessage, zastępując element payloadDefinition definicją ładunku Sigfox.

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)
};

Urządzenia Sigfox oczekują 204 kodu odpowiedzi. Dodaj następujący kod po wywołaniu metody handleMessage w wierszu 21:

context.res = {
    status: 204
};

Przykład 3. Łączenie urządzeń z sieci Rzeczy za pośrednictwem mostka urządzenia

Aby połączyć urządzenia sieciowe rzeczy z usługą IoT Central:

  • Dodaj nową integrację HTTP do swojej aplikacji w The Things Network: >.
  • Upewnij się, że aplikacja zawiera funkcję dekodera, która automatycznie konwertuje ładunek komunikatów urządzenia na kod JSON przed wysłaniem jej do funkcji: dekoder funkcji > ładunku aplikacji>.

Poniższy przykład przedstawia funkcję dekodera Języka JavaScript, której można użyć do dekodowania typowych typów liczbowych z danych binarnych:

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)
  };
}

Po zdefiniowaniu integracji dodaj następujący kod przed wywołaniem metody handleMessage w wierszu 21 pliku IoTCIntegration/index.js aplikacji funkcji. Ten kod tłumaczy treść integracji HTTP na oczekiwany format.

req.body = {
  device: {
    deviceId: req.body.end_device_ids.device_id.toLowerCase()
  },
  measurements: req.body.uplink_message.decoded_payload
};

Uwaga / Notatka

Poprzedni fragment kodu używa identyfikatora urządzenia przyjaznego dla człowieka. Komunikat Things Network zawiera również identyfikator techniczny, do którego można uzyskać dostęp przy użyciu polecenia req.body.dev_eui.toLowerCase(). Aby dowiedzieć się więcej, zobacz The Things Network — Data Formats (Sieci rzeczy — formaty danych).

Ograniczenia

Mostek urządzenia przekazuje komunikaty tylko do usługi IoT Central i nie wysyła komunikatów z powrotem do urządzeń. To ograniczenie polega na tym, że właściwości i polecenia nie działają w przypadku urządzeń łączących się z usługą IoT Central za pośrednictwem tego mostka urządzenia. Ponieważ operacje cyfrowego bliźniaka urządzenia nie są obsługiwane, nie można zaktualizować właściwości urządzenia za pośrednictwem mostu urządzeniowego. Aby korzystać z tych funkcji, urządzenie musi łączyć się bezpośrednio z usługą IoT Central przy użyciu jednego z zestawów SDK urządzeń usługi Azure IoT.