Dela via


Anpassa en förkonfigurerad lösning

De förkonfigurerade lösningarna som medföljer Azure IoT Suite visar tjänsterna i sviten som arbetar tillsammans för att leverera en lösning från slutpunkt till slutpunkt. Från den här startpunkten finns det olika platser där du kan utöka och anpassa lösningen för specifika scenarier. I följande avsnitt beskrivs dessa vanliga anpassningspunkter.

Hitta källkoden

Källkoden för de förkonfigurerade lösningarna finns på GitHub på följande lagringsplatser:

Källkoden för de förkonfigurerade lösningarna tillhandahålls för att demonstrera de mönster och metoder som används för att implementera funktionerna från slutpunkt till slutpunkt för en IoT-lösning med hjälp av Azure IoT Suite. Du hittar mer information om hur du skapar och distribuerar lösningarna på GitHub lagringsplatser.

Ändra de förkonfigurerade reglerna

Fjärrövervakningslösningen innehåller tre Azure Stream Analytics-jobb för att hantera enhetsinformation, telemetri och regellogik i lösningen.

De tre Stream Analytics-jobben och deras syntax beskrivs närmare i genomgången av den förkonfigurerade lösningen fjärrövervakning.

Du kan redigera dessa jobb direkt för att ändra logiken eller lägga till logik som är specifik för ditt scenario. Du hittar Stream Analytics-jobben på följande sätt:

  1. Gå till Azure Portal.

  2. Gå till resursgruppen med samma namn som din IoT-lösning.

  3. Välj det Azure Stream Analytics-jobb som du vill ändra.

  4. Stoppa jobbet genom att välja Stoppa i uppsättningen med kommandon.

  5. Redigera indata, fråga och utdata.

    En enkel ändring är att ändra frågan för regeljobbet till att använda ett "<" i stället för ">". Lösningsportalen visar fortfarande ">" när du redigerar en regel, men observera hur beteendet vänds på grund av ändringen i det underliggande jobbet.

  6. Starta jobbet

Anteckning

Instrumentpanelen för fjärrövervakning är beroende av specifika data, så om du ändrar jobben kan det leda till att instrumentpanelen misslyckas.

Lägg till egna regler

Förutom att ändra de förkonfigurerade Azure Stream Analytics-jobben kan du använda Azure Portal för att lägga till nya jobb eller lägga till nya frågor i befintliga jobb.

Anpassa enheter

En av de vanligaste tilläggsaktiviteterna är att arbeta med enheter som är specifika för ditt scenario. Det finns flera metoder för att arbeta med enheter. Dessa metoder omfattar att ändra en simulerad enhet så att den matchar ditt scenario, eller att använda IoT-enhets-SDK för att ansluta din fysiska enhet till lösningen.

En steg-för-steg-guide för att lägga till enheter finns i artikeln Ansluta enheter för Iot Suite och C SDK-exemplet för fjärrövervakning. Det här exemplet är utformat för att fungera med den förkonfigurerade fjärrövervakningslösningen.

Skapa en egen simulerad enhet

Ingår i källkoden för fjärrövervakningslösningen, är en .NET-simulator. Den här simulatorn är den som etableras som en del av lösningen och du kan ändra den för att skicka olika metadata, telemetri och svara på olika kommandon och metoder.

Den förkonfigurerade simulatorn i den förkonfigurerade fjärrövervakningslösningen simulerar en kylare som genererar telemetri för temperatur och luftfuktighet. Du kan ändra simulatorn i projektet Simulator.WebJob när du har förgrenat GitHub lagringsplatsen.

Tillgängliga platser för simulerade enheter

Standarduppsättningen med platser är i Seattle/Redmond, Washington, USA of America. Du kan ändra dessa platser i SampleDeviceFactory.cs.

Lägga till en önskad egenskapsuppdateringshanterare i simulatorn

Du kan ange ett värde för en önskad egenskap för en enhet i lösningsportalen. Det är enhetens ansvar att hantera begäran om egenskapsändring när enheten hämtar önskat egenskapsvärde. Om du vill lägga till stöd för en egenskapsändring via en önskad egenskap måste du lägga till en hanterare i simulatorn.

Simulatorn innehåller hanterare för egenskaperna SetPointTemp och TelemetryInterval som du kan uppdatera genom att ange önskade värden i lösningsportalen.

I följande exempel visas hanteraren för den önskade egenskapen SetPointTemp i klassen CoolerDevice :

protected async Task OnSetPointTempUpdate(object value)
{
    var telemetry = _telemetryController as ITelemetryWithSetPointTemperature;
    telemetry.SetPointTemperature = Convert.ToDouble(value);

    await SetReportedPropertyAsync(SetPointTempPropertyName, telemetry.SetPointTemperature);
}

Den här metoden uppdaterar telemetripunkttemperaturen och rapporterar sedan ändringen tillbaka till IoT Hub genom att ange en rapporterad egenskap.

Du kan lägga till egna hanterare för dina egna egenskaper genom att följa mönstret i föregående exempel.

Du måste också binda den önskade egenskapen till hanteraren enligt följande exempel från CoolerDevice-konstruktorn :

_desiredPropertyUpdateHandlers.Add(SetPointTempPropertyName, OnSetPointTempUpdate);

Observera att SetPointTempPropertyName är en konstant som definieras som "Config.SetPointTemp".

Lägga till stöd för en ny metod i simulatorn

Du kan anpassa simulatorn för att lägga till stöd för en ny metod (direktmetod). Det krävs två viktiga steg:

  • Simulatorn måste meddela IoT-hubben i den förkonfigurerade lösningen med information om metoden.
  • Simulatorn måste innehålla kod för att hantera metodanropet när du anropar det från panelen Enhetsinformation i Lösningsutforskaren eller via ett jobb.

Den förkonfigurerade fjärrövervakningslösningen använder rapporterade egenskaper för att skicka information om metoder som stöds till IoT Hub. Serverdelen för lösningen innehåller en lista över alla metoder som stöds av varje enhet tillsammans med en historik över metodanrop. Du kan visa den här informationen om enheter och anropa metoder i lösningsportalen.

För att meddela IoT-hubben att en enhet stöder en metod måste enheten lägga till information om metoden i noden SupportedMethods i de rapporterade egenskaperna:

"SupportedMethods": {
  "<method signature>": "<method description>",
  "<method signature>": "<method description>"
}

Metodsignaturen har följande format: <method name>--<parameter #0 name>-<parameter #1 type>-...-<parameter #n name>-<parameter #n type>. Om du till exempel vill ange att metoden InitiateFirmwareUpdate förväntar sig en strängparameter med namnet FwPackageURI använder du följande metodsignatur:

InitiateFirmwareUpate--FwPackageURI-string: "description of method"

En lista över parametertyper som stöds finns i klassen CommandTypes i infrastrukturprojektet.

Om du vill ta bort en metod anger du metodsignaturen till null i de rapporterade egenskaperna.

Anteckning

Serverdelen för lösningen uppdaterar endast information om metoder som stöds när den tar emot ett meddelande om enhetsinformation från enheten.

Följande kodexempel från klassen SampleDeviceFactory i common-projektet visar hur du lägger till en metod i listan över SupportedMethods i de rapporterade egenskaperna som skickas av enheten:

device.Commands.Add(new Command(
    "InitiateFirmwareUpdate",
    DeliveryType.Method,
    "Updates device Firmware. Use parameter 'FwPackageUri' to specifiy the URI of the firmware file, e.g. https://iotrmassets.blob.core.windows.net/firmwares/FW20.bin",
    new[] { new Parameter("FwPackageUri", "string") }
));

Det här kodfragmentet lägger till information om metoden InitiateFirmwareUpdate , inklusive text som ska visas i lösningsportalen och information om de obligatoriska metodparametrarna.

Simulatorn skickar rapporterade egenskaper, inklusive listan över metoder som stöds, för att IoT Hub när simulatorn startar.

Lägg till en hanterare i simulatorkoden för varje metod som stöds. Du kan se befintliga hanterare i klassen CoolerDevice i projektet Simulator.WebJob. I följande exempel visas hanteraren för metoden InitiateFirmwareUpdate :

public async Task<MethodResponse> OnInitiateFirmwareUpdate(MethodRequest methodRequest, object userContext)
{
    if (_deviceManagementTask != null && !_deviceManagementTask.IsCompleted)
    {
        return await Task.FromResult(BuildMethodRespose(new
        {
            Message = "Device is busy"
        }, 409));
    }

    try
    {
        var operation = new FirmwareUpdate(methodRequest);
        _deviceManagementTask = operation.Run(Transport).ContinueWith(async task =>
        {
            // after firmware completed, we reset telemetry
            var telemetry = _telemetryController as ITelemetryWithTemperatureMeanValue;
            if (telemetry != null)
            {
                telemetry.TemperatureMeanValue = 34.5;
            }

            await UpdateReportedTemperatureMeanValue();
        });

        return await Task.FromResult(BuildMethodRespose(new
        {
            Message = "FirmwareUpdate accepted",
            Uri = operation.Uri
        }));
    }
    catch (Exception ex)
    {
        return await Task.FromResult(BuildMethodRespose(new
        {
            Message = ex.Message
        }, 400));
    }
}

Metodhanterarnamn måste börja med On följt av namnet på metoden. Parametern methodRequest innehåller alla parametrar som skickas med metodanropet från lösningens serverdel. Returvärdet måste vara av typen TaskMethodResponse<>. Verktyget BuildMethodResponse hjälper dig att skapa returvärdet.

I metodhanteraren kan du:

  • Starta en asynkron uppgift.
  • Hämta önskade egenskaper från enhetstvillingen i IoT Hub.
  • Uppdatera en enda rapporterad egenskap med hjälp av metoden SetReportedPropertyAsync i klassen CoolerDevice .
  • Uppdatera flera rapporterade egenskaper genom att skapa en TwinCollection-instans och anropa metoden Transport.UpdateReportedPropertiesAsync .

Föregående exempel på uppdatering av inbyggd programvara utför följande steg:

  • Kontrollerar att enheten kan godkänna begäran om uppdatering av den inbyggda programvaran.
  • Initierar uppdateringsåtgärden för den inbyggda programvaran asynkront och återställer telemetrin när åtgärden är klar.
  • Returnerar omedelbart meddelandet "FirmwareUpdate accepted" för att ange att begäran accepterades av enheten.

Skapa och använda en egen (fysisk) enhet

Azure IoT SDK:er tillhandahåller bibliotek för att ansluta flera enhetstyper (språk och operativsystem) till IoT-lösningar.

Ändra instrumentpanelsgränser

Antal enheter som visas i listrutan på instrumentpanelen

Standardvärdet är 200. Du kan ändra det här numret i DashboardController.cs.

Antal stift som ska visas i Bing Kartkontroll

Standardvärdet är 200. Du kan ändra det här numret i TelemetryApiController.cs.

Tidsperiod för telemetridiagram

Standardvärdet är 10 minuter. Du kan ändra det här värdet i TelmetryApiController.cs.

Feedback

Har du en anpassning som du vill se i det här dokumentet? Lägg till funktionsförslag i User Voice eller kommentera den här artikeln.

Nästa steg

Mer information om alternativen för att anpassa de förkonfigurerade lösningarna finns i: