Tworzenie reguły niestandardowej w wstępnie skonfigurowanym rozwiązaniu do monitorowania zdalnego
Wprowadzenie
W wstępnie skonfigurowanych rozwiązaniach można skonfigurować reguły wyzwalające, gdy wartość telemetrii urządzenia osiągnie określony próg. Używanie telemetrii dynamicznej ze wstępnie skonfigurowanym rozwiązaniem do monitorowania zdalnego opisuje sposób dodawania niestandardowych wartości telemetrii, takich jak ExternalTemperature do rozwiązania. W tym artykule pokazano, jak utworzyć regułę niestandardową dla dynamicznych typów telemetrii w rozwiązaniu.
W tym samouczku użyto prostego Node.js symulowanego urządzenia do generowania dynamicznych danych telemetrycznych do wysyłania do wstępnie skonfigurowanego zaplecza rozwiązania. Następnie dodasz reguły niestandardowe w rozwiązaniu RemoteMonitoring Visual Studio i wdrożysz ten dostosowany zaplecze do subskrypcji platformy Azure.
Do ukończenia tego samouczka niezbędne są następujące elementy:
- Aktywna subskrypcja platformy Azure. Jeśli jej nie masz, możesz utworzyć bezpłatne konto próbne w zaledwie kilka minut. Aby uzyskać szczegółowe informacje, zobacz Bezpłatna wersja próbna platformy Azure.
- Node.js w wersji 0.12.x lub nowszej w celu utworzenia symulowanego urządzenia.
- Visual Studio 2015 lub Visual Studio 2017 w celu zmodyfikowania wstępnie skonfigurowanego zaplecza rozwiązania przy użyciu nowych reguł.
Aprowizacja rozwiązania
Jeśli jeszcze nie przeprowadzono aprowizacji wstępnie skonfigurowanego rozwiązania do monitorowania zdalnego na Twoim koncie:
- Zaloguj się do azureiotsuite.com przy użyciu poświadczeń konta platformy Azure, a następnie kliknij + , aby utworzyć rozwiązanie.
- Kliknij pozycję Wybierz na kafelku Zdalne monitorowanie.
- W polu Nazwa rozwiązania wprowadź nazwę wstępnie skonfigurowanego rozwiązania do monitorowania zdalnego.
- W polach Region i Subskrypcja wybierz wartości, których chcesz użyć do aprowizacji rozwiązania.
- Kliknij pozycję Utwórz rozwiązanie, aby rozpocząć proces aprowizowania. Zwykle trwa on kilka minut.
Oczekiwanie na ukończenie procesu aprowizowania
- Kliknij kafelek swojego rozwiązania zawierający informację o stanie aprowizacji.
- Zwróć uwagę na informację o stanach aprowizacji podczas wdrażania usług Azure w Twojej subskrypcji platformy Azure.
- Po ukończeniu aprowizowania stan zmieni się na wartość Gotowe.
- Kliknij kafelek, aby wyświetlić szczegóły rozwiązania w prawym okienku.
Uwaga
Jeśli podczas wdrażania wstępnie skonfigurowanego rozwiązania pojawią się problemy, zapoznaj się z tematami Uprawnienia w witrynie azureiotsuite.com i Często zadawane pytania. Jeśli problemy będą się powtarzać, utwórz żądanie pomocy w portalu.
Czy istnieją jakieś szczegóły dotyczące Twojego rozwiązania, które nie są wyświetlane, a Twoim zdaniem powinny być widoczne? Prześlij nam swoje propozycje dotyczące funkcji, korzystając ze strony User Voice (Opinie użytkowników).
Zanotuj nazwę rozwiązania wybraną dla wdrożenia. Ta nazwa rozwiązania będzie potrzebna w dalszej części tego samouczka.
Konfigurowanie urządzenia symulowanego Node.js
Na pulpicie nawigacyjnym monitorowania zdalnego kliknij pozycję + Dodaj urządzenie , a następnie dodaj urządzenie niestandardowe. Zanotuj nazwę hosta IoT Hub, identyfikator urządzenia i klucz urządzenia. Będą one potrzebne w dalszej części tego samouczka podczas przygotowywania aplikacji klienckiej urządzenia remote_monitoring.js.
Upewnij się, że na maszynie dewelopera zainstalowano Node.js w wersji 0.12.x lub nowszej. Uruchom
node --version
polecenie w wierszu polecenia lub w powłoce, aby sprawdzić wersję. Aby uzyskać informacje na temat instalowania Node.js w systemie Linux przy użyciu menedżera pakietów, zobacz Instalowanie Node.js za pośrednictwem menedżera pakietów.Po zainstalowaniu Node.js sklonuj najnowszą wersję repozytorium azure-iot-sdk-node do maszyny dewelopera. Zawsze używaj gałęzi głównej do najnowszej wersji bibliotek i przykładów.
Z lokalnej kopii repozytorium azure-iot-sdk-node skopiuj następujące dwa pliki z folderu node/device/samples do pustego folderu na komputerze deweloperskim:
- packages.json
- remote_monitoring.js
Otwórz plik remote_monitoring.js i wyszukaj następującą definicję zmiennej:
var connectionString = "[IoT Hub device connection string]";
Zastąp ciąg [IoT Hub parametry połączenia urządzenia] parametrami połączenia urządzenia. Użyj wartości dla nazwy hosta IoT Hub, identyfikatora urządzenia i klucza urządzenia, które zanotujesz w kroku 1. Parametry połączenia urządzenia mają następujący format:
HostName={your IoT Hub hostname};DeviceId={your device id};SharedAccessKey={your device key}
Jeśli nazwa hosta IoT Hub to contoso, a identyfikator urządzenia to mydevice, parametry połączenia wyglądają podobnie do następującego fragmentu kodu:
var connectionString = "HostName=contoso.azure-devices.net;DeviceId=mydevice;SharedAccessKey=2s ... =="
Zapisz plik. Uruchom następujące polecenia w powłoce lub wierszu polecenia w folderze zawierającym te pliki, aby zainstalować niezbędne pakiety, a następnie uruchom przykładową aplikację:
npm install node remote_monitoring.js
Obserwowanie dynamicznej telemetrii w akcji
Na pulpicie nawigacyjnym są wyświetlane dane telemetryczne temperatury i wilgotności z istniejących symulowanych urządzeń:
Jeśli wybierzesz urządzenie symulowane Node.js uruchomione w poprzedniej sekcji, zobaczysz dane telemetryczne temperatury, wilgotności i temperatury zewnętrznej:
Rozwiązanie do monitorowania zdalnego automatycznie wykrywa dodatkowy typ telemetrii temperatury zewnętrznej i dodaje go do wykresu na pulpicie nawigacyjnym.
Możesz zatrzymać aplikację konsolową Node.js po zweryfikowaniu, że wysyła ona dane telemetryczne ExternalTemperature do wstępnie skonfigurowanego rozwiązania. Pozostaw otwarte okno konsoli, ponieważ uruchomisz tę aplikację konsolową Node.js ponownie po dodaniu reguły niestandardowej do rozwiązania.
Lokalizacje magazynu reguł
Informacje o regułach są utrwalane w dwóch lokalizacjach:
- Tabela DeviceRulesNormalizedTable — ta tabela przechowuje znormalizowane odwołanie do reguł zdefiniowanych przez portal rozwiązania. Gdy portal rozwiązania wyświetla reguły urządzeń, wysyła zapytanie do tej tabeli dla definicji reguł.
- Obiekt blob DeviceRules — ten obiekt blob przechowuje wszystkie reguły zdefiniowane dla wszystkich zarejestrowanych urządzeń i jest definiowany jako dane wejściowe odwołania do zadań usługi Azure Stream Analytics. Podczas aktualizowania istniejącej reguły lub definiowania nowej reguły w portalu rozwiązania zarówno tabela, jak i obiekt blob są aktualizowane w celu odzwierciedlenia zmian. Definicja reguły wyświetlana w portalu pochodzi z magazynu tabel, a definicja reguły, do której odwołuje się zadanie usługi Stream Analytics, pochodzi z obiektu blob.
Aktualizowanie rozwiązania Visual Studio RemoteMonitoring
W poniższych krokach pokazano, jak zmodyfikować rozwiązanie RemoteMonitoring Visual Studio w celu uwzględnienia nowej reguły korzystającej z telemetrii ExternalTemperature wysyłanej z symulowanego urządzenia:
Jeśli jeszcze tego nie zrobiono, sklonuj repozytorium azure-iot-remote-monitoring do odpowiedniej lokalizacji na komputerze lokalnym przy użyciu następującego polecenia Git:
git clone https://github.com/Azure/azure-iot-remote-monitoring.git
W Visual Studio otwórz plik RemoteMonitoring.sln z lokalnej kopii repozytorium azure-iot-remote-monitoring.
Otwórz plik Infrastructure\Models\DeviceRuleBlobEntity.cs i dodaj właściwość ExternalTemperature w następujący sposób:
public double? Temperature { get; set; } public double? Humidity { get; set; } public double? ExternalTemperature { get; set; }
W tym samym pliku dodaj właściwość ExternalTemperatureRuleOutput w następujący sposób:
public string TemperatureRuleOutput { get; set; } public string HumidityRuleOutput { get; set; } public string ExternalTemperatureRuleOutput { get; set; }
Otwórz plik Infrastructure\Models\DeviceRuleDataFields.cs i dodaj następującą właściwość ExternalTemperature po istniejącej właściwości Humidity :
public static string ExternalTemperature {
get { return "ExternalTemperature"; } } ```
W tym samym pliku zaktualizuj metodę _availableDataFields , aby uwzględnić metodę ExternalTemperature w następujący sposób:
private static List<string> _availableDataFields = new List<string> { Temperature, Humidity, ExternalTemperature };
7. Otwórz plik Infrastructure\Repository\DeviceRulesRepository.cs i zmodyfikuj metodę BuildBlobEntityListFromTableRows w następujący sposób:
```csharp
else if (rule.DataField == DeviceRuleDataFields.Humidity)
{
entity.Humidity = rule.Threshold;
entity.HumidityRuleOutput = rule.RuleOutput;
}
else if (rule.DataField == DeviceRuleDataFields.ExternalTemperature)
{
entity.ExternalTemperature = rule.Threshold;
entity.ExternalTemperatureRuleOutput = rule.RuleOutput;
}
```
Ponowne kompilowanie i ponowne wdrażanie rozwiązania.
Teraz możesz wdrożyć zaktualizowane rozwiązanie w ramach subskrypcji platformy Azure.
Otwórz wiersz polecenia z podwyższonym poziomem uprawnień i przejdź do katalogu głównego lokalnej kopii repozytorium azure-iot-remote-monitoring.
Aby wdrożyć zaktualizowane rozwiązanie, uruchom następujące polecenie zastępujące {deployment name} nazwą wstępnie skonfigurowanego wdrożenia rozwiązania, które zostało wcześniej zanotowane:
build.cmd cloud release {deployment name}
Aktualizowanie zadania usługi Stream Analytics
Po zakończeniu wdrażania możesz zaktualizować zadanie usługi Stream Analytics, aby użyć nowych definicji reguł.
W Azure Portal przejdź do grupy zasobów zawierającej wstępnie skonfigurowane zasoby rozwiązania. Ta grupa zasobów ma taką samą nazwę, która została określona dla rozwiązania podczas wdrażania.
Przejdź do zadania usługi Stream Analytics {nazwa wdrożenia}-Reguły.
3. Kliknij przycisk Zatrzymaj , aby zatrzymać uruchamianie zadania usługi Stream Analytics. (Zanim będzie można edytować zapytanie, musisz poczekać na zatrzymanie zadania przesyłania strumieniowego).
4. Kliknij pozycję Zapytanie. Edytuj zapytanie, aby uwzględnić instrukcję SELECT dla externalTemperature. Poniższy przykład przedstawia pełne zapytanie z nową instrukcją SELECT :
```
WITH AlarmsData AS
(
SELECT
Stream.IoTHub.ConnectionDeviceId AS DeviceId,
'Temperature' as ReadingType,
Stream.Temperature as Reading,
Ref.Temperature as Threshold,
Ref.TemperatureRuleOutput as RuleOutput,
Stream.EventEnqueuedUtcTime AS [Time]
FROM IoTTelemetryStream Stream
JOIN DeviceRulesBlob Ref ON Stream.IoTHub.ConnectionDeviceId = Ref.DeviceID
WHERE
Ref.Temperature IS NOT null AND Stream.Temperature > Ref.Temperature
UNION ALL
SELECT
Stream.IoTHub.ConnectionDeviceId AS DeviceId,
'Humidity' as ReadingType,
Stream.Humidity as Reading,
Ref.Humidity as Threshold,
Ref.HumidityRuleOutput as RuleOutput,
Stream.EventEnqueuedUtcTime AS [Time]
FROM IoTTelemetryStream Stream
JOIN DeviceRulesBlob Ref ON Stream.IoTHub.ConnectionDeviceId = Ref.DeviceID
WHERE
Ref.Humidity IS NOT null AND Stream.Humidity > Ref.Humidity
UNION ALL
SELECT
Stream.IoTHub.ConnectionDeviceId AS DeviceId,
'ExternalTemperature' as ReadingType,
Stream.ExternalTemperature as Reading,
Ref.ExternalTemperature as Threshold,
Ref.ExternalTemperatureRuleOutput as RuleOutput,
Stream.EventEnqueuedUtcTime AS [Time]
FROM IoTTelemetryStream Stream
JOIN DeviceRulesBlob Ref ON Stream.IoTHub.ConnectionDeviceId = Ref.DeviceID
WHERE
Ref.ExternalTemperature IS NOT null AND Stream.ExternalTemperature > Ref.ExternalTemperature
)
SELECT *
INTO DeviceRulesMonitoring
FROM AlarmsData
SELECT *
INTO DeviceRulesHub
FROM AlarmsData
```
Kliknij przycisk Zapisz , aby zmienić zaktualizowane zapytanie reguły.
Kliknij przycisk Start, aby ponownie uruchomić zadanie usługi Stream Analytics.
Dodawanie nowej reguły na pulpicie nawigacyjnym
Teraz możesz dodać regułę ExternalTemperature do urządzenia na pulpicie nawigacyjnym rozwiązania.
- Przejdź do portalu rozwiązania.
2. Przejdź do panelu Urządzenia .
3. Znajdź utworzone urządzenie niestandardowe, które wysyła dane telemetryczne ExternalTemperature , a następnie na panelu Szczegóły urządzenia kliknij przycisk Dodaj regułę.
4. Wybierz pozycję ExternalTemperature w polu danych.
Ustaw wartość Próg na 56. Następnie kliknij pozycję Zapisz i wyświetl reguły.
Wróć do pulpitu nawigacyjnego, aby wyświetlić historię alarmów.
W otwartym oknie konsoli uruchom aplikację konsolową Node.js, aby rozpocząć wysyłanie danych telemetrycznych ExternalTemperature .
8. Zwróć uwagę, że w tabeli Historia alarmów są wyświetlane nowe alarmy po wyzwoleniu nowej reguły.
Dodatkowe informacje
Zmiana operatora > jest bardziej złożona i wykracza poza kroki opisane w tym samouczku. Chociaż można zmienić zadanie usługi Stream Analytics tak, aby używało dowolnego operatora, odzwierciedlając ten operator w portalu rozwiązania jest bardziej złożonym zadaniem.
Następne kroki
Teraz, gdy już wiesz, jak tworzyć reguły niestandardowe, możesz dowiedzieć się więcej o wstępnie skonfigurowanych rozwiązaniach: