Udostępnij za pośrednictwem


Łączenie innych chmur IoT Central z usługą IoT Central za pomocą mostka urządzeń

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. Mostek urządzeń działa przez przekazywanie danych z urządzeń połączonych z innymi chmurami IoT za pośrednictwem 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 siecią o niskiej mocy w całej sieci 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 mostka urządzeń aprowizuje kilka zasobów platformy Azure w ramach subskrypcji platformy Azure, które współpracują ze sobą w celu przekształcania i przekazywania komunikatów urządzeń do usługi IoT Central.

Wymagania wstępne

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

  • Aktywna subskrypcja platformy Azure. Jeśli nie masz subskrypcji platformy Azure, przed rozpoczęciem utwórz bezpłatne konto.

  • Aplikacja usługi IoT Central utworzona na podstawie szablonu aplikacji niestandardowej. Aby dowiedzieć się więcej, zobacz Tworzenie aplikacji usługi IoT Central i Informacje o aplikacji.

Omówienie

Mostek urządzeń usługi IoT Central to rozwiązanie typu open source w usłudze 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 elementu webhook. Repozytorium mostka urządzeń usługi Azure IoT Central zawiera przykłady pokazujące sposób łączenia chmur 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 aplikacji funkcji.

Aplikacja funkcji przekształca dane w format akceptowany przez usługę IoT Central i przekazuje je przy użyciu usługi device provisioning i interfejsów API klienta urządzeń:

Screenshot of an Azure Functions definition showing the code.

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ć mostek urządzeń w ramach 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 w ramach subskrypcji. Użyj zakresu identyfikatora i klucza podstawowego z poprzedniego kroku:

    Deploy to Azure Button

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ź do konsoli narzędzi>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:

    Screenshot that shows the restart option in 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 pozycji Functions > IoTCIntegration > Code + Test > Get function URL:

    Screenshot that shows the get function URL in 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.

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

Musi deviceId być alfanumeryczne, małe litery i mogą zawierać łączniki.

Jeśli nie dołączysz modelId pola lub usługa IoT Central nie rozpozna identyfikatora modelu, wówczas komunikat nierozpoznany 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

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

Aby włączyć rejestrowanie aplikacji funkcji przy użyciu usługi Application Szczegółowe informacje, przejdź do pozycji Dzienniki monitorowania > w aplikacji funkcji w witrynie Azure Portal. Wybierz pozycję Włącz usługę Application Insights.

Aprowizowane zasoby

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

  • Aplikacja funkcji
  • Plan usługi App Service
  • Storage account
  • Magazyn kluczy

Magazyn kluczy przechowuje klucz grupy sygnatur dostępu współdzielonego dla aplikacji usługi IoT Central.

Aplikacja funkcji jest uruchamiana w planie zużycia. Chociaż ta opcja nie oferuje dedykowanych zasobów obliczeniowych, umożliwia mostek urządzeń do obsługi setek komunikatów urządzeń na minutę, odpowiedni dla mniejszych flot urządzeń lub urządzeń, które wysyłają komunikaty rzadziej. Jeśli aplikacja zależy od przesyłania strumieniowego dużej liczby komunikatów urządzenia, zastąp plan zużycie dedykowanym planem usługi App Service. Ten plan oferuje dedykowane zasoby obliczeniowe, które zapewniają szybsze czasy odpowiedzi serwera. Korzystając ze 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.

Screenshot that shows the edit template option for an Azure Resource Manager template.

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"
  }
},

with

{
  "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 go w konfiguracji zasobu w obszarze functionapp"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: Połączenie urządzenia cząstkowe przez mostek urządzenia

Aby połączyć urządzenie cząstkowe za pośrednictwem mostka urządzenia z usługą IoT Central, przejdź do konsoli Cząstki i utwórz nową integrację elementu webhook. Ustaw format żądania na JSON. W obszarze Zaawansowane Ustawienia 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 z aplikacji funkcji i zobaczysz, że urządzenia cząstkowe są wyświetlane jako nieprzypisane urządzenia 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: Połączenie urządzenia Sigfox za pośrednictwem mostka urządzenia

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

W tej sekcji pokazano, jak przekonwertować ładunek integracji elementu webhook Sigfox na format treści oczekiwany przez mostek 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 z 8, 16, 32 lub 64 bitów; z 32 bitów lub 64 bitów; float mało 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 handleMessage wierszu 21, zastępując payloadDefinition element 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: Połą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 aplikacji w sekcji The Things Network: Application Integrations (Integracja aplikacji: integracja aplikacji>) dodaj integrację z protokołem >> HTTP.
  • Upewnij się, że aplikacja zawiera funkcję dekodera, która automatycznie konwertuje ładunek komunikatów urządzenia na kod JSON przed wysłaniem 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

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 bliźniaczej reprezentacji urządzenia nie są obsługiwane, nie można zaktualizować właściwości urządzenia za pośrednictwem mostka urządzenia. 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.

Następne kroki

Teraz, gdy wiesz już, jak wdrożyć mostek urządzeń usługi IoT Central, oto sugerowany następny krok: