Hoppa till huvudinnehåll

Lektion 2.1 Regelmotorn (äldre version)

Regler utlöser åtgärder-som att skicka ett e-postmeddelande-när angivna villkor uppfylls. Eftersom både villkor och åtgärder kan anpassas är regelmotorn idealisk för att övervaka tröskelvärden och larm.

I denna lektion går vi igenom följande ämnen:

  • Hur man skapar en kontakt för att ta emot ett larm-e-postmeddelande.
  • Hur man skapar villkor för att utlösa en regel eller utvärdera ett värde när en regel har utlösts.
  • Hur man skapar och bekantar sig med några olika typer av åtgärder, som definierar vad som händer när en regel utlöses.
  • Hur man kombinerar villkor, åtgärder och kontakter för att bygga en komplett regel.

Det är en enkel och rakt-på-sak process, så låt oss börja!

Börja med att skapa en enkel regel som övervakar ett larm och skickar en e-postnotis närhelst ett tröskelvärde överskrids.

Observera: Regler är single-tenant, vilket innebär att de inte kan delas med andra användare.

Skapa en regel​

Börja med att lägga till en kontakt​

  1. Gå till Rule Engine under Apps.
  2. Klicka på Contacts.
  3. Tryck på Add contact.
  4. Lägg till en e-postadress och eventuellt telefonnummer för din kontakt
  5. När du är klar, tryck på Add Contact och gå sedan tillbaka till toppmenyn.

Börja med att lägga till ett villkor​

  1. Klicka på Conditions.
  2. Tryck på Add Condition.
  3. Namnge ditt villkor. I detta exempel kommer villkoret från en larmöversättare.
  4. Ange ditt villkor. Det bör se ut ungefär så här: Example rule engine condition setup
  5. När du är klar, tryck på Add Condition.

Vanliga operatorer: Vanliga operatorer i villkor är:

  • == Likhetsoperator (=== strikt likhet)
  • != Olikhetsoperator (!== strikt olikhet)
  • > Större än
  • < Mindre än
  • <= Mindre än eller lika med
  • >= Större än eller lika med
  • || Villkorlig OR
  • && Villkorlig AND

Tillåtna datatyper: Number, Boolean och String

  • För strängjämförelser, använd enkla citattecken runt strängen. Exempel:
    • Astro Clock-villkor: sunState=='Night' eller sunState=='Day'
    • Villkoret Missing expected report: message=='Missing expected report'
  • För alla andra datatyper, använd inte citattecken.

Det rekommenderas att i första hand använda ==-likhetskontroller och enkla booleska villkor. Observera att = betyder tilldela till och inte är en giltig operator i ett villkor.

Att hantera tillstånd i regelmotorn kan snabbt bli komplext, eftersom antalet möjliga tillstånd växer och kräver många ytterligare regler för att hanteras effektivt. Detta gör inte bara regler svårare att underhålla utan begränsar också skalbarheten. För bättre prestanda och överlägsen skalbarhet, låt översättare hantera tillståndslogiken medan dina regler hålls fokuserade på enkla jämförelser.

Skapa en åtgärd​

Nu när du har skapat ett villkor vill du skapa en åtgärd:

  1. Gå till "Actions" i regelmotorn.

  2. (Valfritt) Hitta en befintlig åtgärd som liknar det du vill ha. Du kan kopiera innehållet, eftersom redigering av fördefinierade åtgärder gör att de återgår till sitt ursprungliga tillstånd.

  3. Skapa en ny åtgärd. rule engine action

  4. När du skapar en regel kan du välja mellan olika typer av åtgärder. Varje typ stödjer olika funktioner:

    a) E-post-, SMS- eller loggåtgärder

    • Du kan använda dynamisk data från den iotnode som utlöste regeln.
    • Exempel: ${iotnode.co2} infogar co2-värdet från noden. Ersätt "co2" med det fält du vill inkludera.
    • För e-poståtgärder kan du utöka meddelandet med HTML-formatering - lägga till logotyper, justera teckenstorlekar och tillämpa stilar för professionellt utseende e-postmeddelanden.
    • För loggåtgärder kan du antingen:
      • Direkt välja loggtyp, prioritet och kategori, eller

      • Dynamiskt hämta dessa värden från en larmöversättares log-objekt (om tillgängligt).

        Exempel på log-objekt:

        "log": {
        "type": "info",
        "priority": "severe",
        "category": "status",
        "message": "Log text"
        }
      • För att använda texten som genereras av en larmöversättare, referera till den med: ${iotnode.log.message}.

    b) Command-åtgärder

    • Command-åtgärder stödjer också dynamisk data, men de kräver en Generic MQTT Connector för att publicera till en mål-MQTT-broker.
    • För närvarande är det enda kommando som stöds sendDownlink för att publicera data.
    • Payloaden måste vara i JSON-format och innehålla både en message-del och en mqttTopic-del.
    • Viktigt: Escapa citattecken (") inom JSON-värden med ett bakstreck (\").
    • Eftersom formateringen kan vara knepig, validera din payload med en online JSON-linter innan användning.

    Exempel på kommando och payload:

    sendDownlink

    {
    "message": "{\"temperature\":${iotnode.temperature}}",
    "mqttTopic": "${iotnode._id}"
    }

    c) LoRaWAN-nedlänksåtgärder

    • Ange den hex-kodade payloaden, portnumret, och om nedlänken ska vara bekräftad.
    • Kom ihåg: en "bekräftad" nedlänk rapporterar bara om meddelandet levererades framgångsrikt eller misslyckades. Den garanterar inte att enheten utförde åtgärden som avsett.
    • För att verifiera effekten av nedlänken:
      1. Skapa en annan regel som utlöses med en 60 sekunders tidsfördröjning av den första regeln.
      2. I den andra regeln, kontrollera om det förväntade resultatet inte inträffade i regelns AND-del.
      3. Om inte kommer regeln att nå åtgärdssteget, vidta korrigerande åtgärder - till exempel skicka om nedlänken varannan minut tills effekten bekräftas.

    d) Rule

    • Detta är en fördefinierad åtgärd som låter dig direkt utlösa en annan regel utan att utvärdera dess triggervillkor. Den är avgörande för användningsfall som kräver regelkedjning.

    e) Report

    • Detta är en flexibel åtgärd som kan generera två typer av e-postrapporter:
      1. CSV-rapport – Inkluderar tidsstämplar och en enda mätning baserat på angivna sökkriterier.
      2. Enhetsantal/faktureringsrapport – Räknar antalet enheter per konto över alla tillgängliga organisationer, exporterad som CSV.
  5. När du är klar, tryck på "Add Action".

Kombinera villkor och åtgärd för att skapa en regel​

Nu när du har skapat ett anpassat villkor och en åtgärd är det dags att använda dem i en regel:

  1. Navigera till "Add Rule".

  2. Ge din regel ett namn.

  3. Lägg till triggervillkor. Det finns en användbar genväg för att snabbt lägga till flera enheter:

    • Tryck på "Select Node" och skriv en del av enhetsnamnet (t.ex. device)

    • Om dina enheter heter device-1, device-2 och så vidare kommer de att visas i listan

    • Klicka sedan på varje enhet så snabbt du kan tills alla är tillagda. Det går bra att lägga till flera enheter på en rad.

      Example if same trigger condition

    • Observera: Använd inte denna genväg om enheterna kräver olika triggervillkor.

    • Du kan söka efter Select value, vilket kan vara ditt villkor.

  4. I sektionen "Actions", välj den åtgärd du skapade. Om det är en e-poståtgärd, se till att också välja mottagande Contact.

  5. Klicka nu på "Add Rule", grattis, du har skapat en regel.

Prova nu att skapa mer avancerade regler.​

Exempel inkluderar:

  1. Enhetsövervakningsrapport Meddela dig själv om en enhet inte rapporterar inom det förväntade intervallet. Tips: a) Gå till Devices → din enhet och ställ in ett Expected Report Interval. b) Använd standardvillkoret "Missing expected report". c) Använd standard-e-poståtgärden "Device did not report in time"

  2. Tänd och släck en lampa samtidigt som händelsen loggas Ur ett regelperspektiv finns det ingen skillnad mellan att styra en enda lampa eller en hel gatubelysningsgrupp med hundratals lampor. Den enda skillnaden är att du i det senare fallet kanske vill lägga till redundans för ökad tillförlitlighet.

    Exempel - Redundant gatubelysningsregel

    Styr gatubelysning med inbyggd redundans

    Activate Street lighting Aktivera gatubelysning när Astro Clock-villkoret övergår till natt

    Check Street lighting Kontrollera att gatubelysningen aktiverades, om LoRaWAN-nedlänkspaketet gick förlorat, vänta två minuter och försök tända det igen.

  3. Skicka en CSV-rapport Använd Report-åtgärden för att definiera din rapport. Prova följande definition som en start:

    [
    {
    "query": "all",
    "csv-column": true,
    "measurement": "temperature",
    "duration": "1d",
    "distance": "0h",
    "fileName": "myReport.csv"
    }
    ]

    Om du behöver fler detaljer, se Användarguidens rapportgenerator

Frågor och svar

Behöver jag lägga till enheter individuellt på separata rader i triggersektionen av en regel?

Kan jag lägga till flera åtgärder som ska köras när en regel utlöses?

Min regel körde inte som förväntat när en upplänk togs emot, vad bör jag kontrollera?

Är det tillåtet att skapa regler som loopar, där en regel utlöser en annan regel som till slut utlöser den ursprungliga regeln? Detta kan vara användbart i kombination med tidsfördröjningar för att bekräfta att en förväntad åtgärd faktiskt inträffade.