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
- Gå till Rule Engine under Apps.
- Klicka på Contacts.
- Tryck på Add contact.
- Lägg till en e-postadress och eventuellt telefonnummer för din kontakt
- När du är klar, tryck på Add Contact och gå sedan tillbaka till toppmenyn.
Börja med att lägga till ett villkor
- Klicka på Conditions.
- Tryck på Add Condition.
- Namnge ditt villkor. I detta exempel kommer villkoret från en larmöversättare.
- Ange ditt villkor. Det bör se ut ungefär så här:

- 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'ellersunState=='Day' - Villkoret Missing expected report:
message=='Missing expected report'
- Astro Clock-villkor:
- 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:
-
Gå till "Actions" i regelmotorn.
-
(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.
-
Skapa en ny åtgärd.

-
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}infogarco2-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
sendDownlinkför att publicera data. - Payloaden måste vara i JSON-format och innehålla både en
message-del och enmqttTopic-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:
- Skapa en annan regel som utlöses med en 60 sekunders tidsfördröjning av den första regeln.
- I den andra regeln, kontrollera om det förväntade resultatet inte inträffade i regelns AND-del.
- 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:
- CSV-rapport – Inkluderar tidsstämplar och en enda mätning baserat på angivna sökkriterier.
- Enhetsantal/faktureringsrapport – Räknar antalet enheter per konto över alla tillgängliga organisationer, exporterad som CSV.
-
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:
-
Navigera till "Add Rule".
-
Ge din regel ett namn.
-
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-2och 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.

-
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.
-
-
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.
-
Klicka nu på "Add Rule", grattis, du har skapat en regel.
Prova nu att skapa mer avancerade regler.
Exempel inkluderar:
-
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"
-
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
Aktivera gatubelysning när Astro Clock-villkoret övergår till natt
Kontrollera att gatubelysningen aktiverades, om LoRaWAN-nedlänkspaketet gick förlorat, vänta två minuter och försök tända det igen. -
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
- Fråga
- Svar
Behöver jag lägga till enheter individuellt på separata rader i triggersektionen av en regel?
Nej, du kan lägga till alla enheter som använder samma triggervillkor på samma rad. Detta är snabbare och enklare att underhålla. Använd ytterligare rader endast om du behöver flera triggervillkor.
- Fråga
- Svar
Kan jag lägga till flera åtgärder som ska köras när en regel utlöses?
Ja, du kan lägga till flera åtgärder och till och med inkludera tidsfördröjningar mellan deras körning. Ett vanligt exempel är: utlös en aktuator, vänta 30 sekunder, och utlös sedan en annan regel för att bekräfta att aktuatorn aktiverades som förväntat. Om inte, vidta lämplig åtgärd för att aktivera aktuatorn och logga händelsen.
- Fråga
- Svar
Min regel körde inte som förväntat när en upplänk togs emot, vad bör jag kontrollera?
Om en regel inte utlöses beror det ofta på att villkoret är felaktigt-fel fältnamn, fel datatyp, fel jämförelsevärde eller fel operator. Felsök genom att följa dessa steg:
-
Kontrollera fältnamnet Gå till Devices → din enhet → Data och verifiera att fältnamnet i ditt villkor matchar exakt stavningen i enhetens data.
-
Kontrollera datatypen
- I plattformen är fältvärden färgkodade:
- Blå = nummer
- Grön = boolean
- Röd = sträng
- Se till att ditt villkor använder rätt format:
- För nummer eller booleaner, använd inte citattecken.
- För strängar, använd enkla citattecken runt värdet (t.ex.
'Day').
- I plattformen är fältvärden färgkodade:
-
Kontrollera jämförelsevärdet Om ovanstående är korrekt men regeln fortfarande inte utlöses, verifiera att ditt triggervärde är korrekt. Dubbelkolla att den inkommande datan faktiskt passerar tröskelvärdet genom att granska tidsserien.
-
Kontrollera åtgärden För att bekräfta om regeln utlöses men åtgärden misslyckas, lägg till en logg i åtgärden.
- Om loggen visas utlöses regeln korrekt och problemet ligger i åtgärden.
- Åtgärda åtgärden i enlighet med detta.
- Fråga
- Svar
Ä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.
IoT-plattformen förhindrar skapandet av direkt looprande regler, som att Regel A utlöser Regel B, som sedan utlöser Regel A.
Det finns dock lösningar:
- Använd tillstånd för att indirekt utlösa regler.
- Använd MQTT för att publicera data på plattformens broker och utlös sedan regler baserat på vanliga villkor istället för att direkt anropa en annan regel.
Även med dessa metoder kommer plattformen att strypa trafik för att förhindra överbelastning, men du bör ändå använda tidsfördröjningar mellan åtgärder för att säkerställa tillförlitlig körning och undvika oavsiktliga loopar.