Azure IoT Edge Module Twins Gebruiken voor Circuit State Management
Een LED laten knipperen met een Domain Specific Language toegepast via een Module Twin op een Docker-container die Johnny 5 draait op een Raspberry Pi.
Verhaal
Overzicht
Azure IoT Edge stelt intermittently connected devices in staat om gewenste eigenschappen te verkrijgen via “Module Twins”. Deze twins kunnen gebruikt worden als desired state configuration om specifiek gedrag binnen Edge Modules aan te sturen. Edge Modules draaien als container-workloads om self-healing en snelle deployment toe te staan zonder constante connectiviteit. Wanneer internet beschikbaar is, kunnen apparaten cloud-services benutten om methoden binnen modules aan te roepen.
In dit project ontwikkelen we een IoT Edge-module met de Azure IoT NodeJS SDK die een gewenste staat uit de cloud ophaalt die de GPIO-pinnen op een Raspberry Pi configureert om gewenste operaties op een aangesloten circuit uit te voeren met Johnny 5.
Dit maakt interessante use-cases mogelijk zoals:
* Meerdere bedrijfsmodi voor een enkel circuit door verschillende state-configuraties toe te passen
* Redundante hardware-failover met twee apparaten aangesloten op hetzelfde circuit wanneer geörchestreerd en correct geconfigureerd met Kubernetes.
Achtergrond
Desired state configuration is een populair concept dat vaak gebruikt wordt bij het provisioneren van servers voor de eerste keer en om compliance af te dwingen in draaiende systemen. We breiden dit concept uit naar circuiten met services die ontworpen zijn voor veerkracht en gezonde operatie in gebieden waar netwerkconnectiviteit intermittent kan zijn. Deze benadering stelt ons in staat om het gedrag van een aangesloten circuit runtime te veranderen en interessante scenario's met hardware-redundantie toe te staan.
De Azure IoT Edge-runtime van Microsoft biedt een stevige basis voor het project. Deze runtime draait als een service op lokale hardware en stelt orchestratie van containerized “modules” toe die per apparaat in de Azure-cloud geconfigureerd zijn. Twee systeemmodules worden altijd gebruikt: de edge-agent die module-deployment-configuraties ophaalt en toepast, en de edge-hub die cached messaging naar de cloud en inter-module-communicatie toestaat.
We begonnen met het maken van een Azure IoT Edge-module met de Azure IoT NodeJS SDK. Deze module ontvangt een twin-configuratie die desired en reported properties specificeert voor een gegeven apparaat. We gebruiken een Domain Specific Language die geparsed wordt naar een Johnny 5-configuratie. Dit stelt ons in staat om te definiëren hoe een circuit moet functioneren in de cloud, en het toe te passen op onze IoT Edge-module.
Een voorbeeldconfiguratie wordt hieronder gegeven:
"config": "{\"peripherals\":[{\"type\":\"Led\",\"name\":\"alarm\",\"settings\":{\"pin\":\"GPIO18\"},\"initialState\":{\"method\":\"blink\",\"period\":500},\"outputAlias\":\"alias2\"},{\"type\":\"Button\",\"name\":\"button\",\"settings\":{\"pin\":\"GPIO20\"},\"outputAlias\":\"alias1\"}]}"
Dit voorbeeld definieert een LED-apparaat op GPIO18 met een initialState van knipperen aan/uit elke 500 ms. De staat van de LED kan naar andere modules propageren via de outputAlias. Een knop wordt ook gebruikt op GPIO20 die staatveranderingen publiceert naar alias1. In zo'n configuratie kunnen we onafhankelijk reageren op staatveranderingen in additionele modules door de outputAlias te routeren.
We ondersteunen momenteel configuratie van een thermometer, LED en knop-apparaat met dit mechanisme.
Stappen om te reproduceren
Om te beginnen, heb je een Microsoft Azure-abonnement met een gedeployde IoT Hub nodig.
Vervolgens wil je beginnen met het configureren van je hardware door een LED aan te sluiten op GPIO18 van de Raspberry Pi. Instructies hiervoor vind je hier.
Met circuitry en cloud-services klaar, wil je de Azure IoT Edge-runtime op je Raspberry Pi installeren door deze gids te volgen. Eenmaal de runtime geïnstalleerd, moet je het apparaat handmatig provisioneren door deze instructies te volgen.
Vervolgens maken we een speciale deployment binnen Azure die ons toestaat onze LED te laten knipperen.
Maak een deployment zoals hieronder getoond:
De image URL:
toolboc/johnny5onedge:0.0.981-arm32v7
De container create options:
{"ExposedPorts":{"9229/tcp":{}}, "HostConfig":{"PortBindings":{"9229/tcp":[{"HostPort":"9229"}]},"Privileged":true,"Devices":[{"PathOnHost":"/dev/i2c-1","PathInContainer":"/dev/i2c-1","CgroupPermissions":"rwm"},{"PathOnHost":"/dev/gpiomem","PathInContainer":"/dev/gpiomem","CgroupPermissions":"rwm"}],"Mounts":[{"Type":"bind","Source":"/lib/modules/","Target":"/lib/modules/"}]}}
De Module Twin’s desired properties:
{
"properties.desired": {
"config": "{\"peripherals\":[{\"type\":\"Led\",\"name\":\"alarm\",\"settings\":{\"pin\":\"GPIO18\"},\"initialState\":{\"method\":\"blink\",\"period\":500},\"outputAlias\":\"alias2\"},{\"type\":\"Button\",\"name\":\"on\",\"settings\":{\"pin\":\"GPIO20\"},\"outputAlias\":\"alias1\"}]}"
}
}
Sla op wanneer je klaar bent. Sla dan de “Specify Routes” en “Specify Metrics” secties over tot je bij “Target Devices” komt.
Zet de Priority op 10 en voeg een target condition toe van tags.environment=’blinK
Lees Meer Informatie…..
Desired State Configuration for Circuits
Productieproces
- Geavanceerde CAD/CAM Oplossingen: Productie Optimaliseren voor Engineering Materialen
- HMI-configuraties optimaliseren voor hoogrisico-operaties
- Regelschakelingen: Fundamenten, Toepassingen en Best Practices
- Geavanceerde afgeschermde kabels voor signaalcircuits: praktische aansluittechnieken (Deel 2)
- Afgemelde kabels voor signaalcircuits: Deel 1 – Best Practices
- Kubernetes op Azure Beheersen: Bewezen Tools, Tips en Best Practices
- Welk Azure-certificatierpad Is Juist Voor U? Inzichten Van Cloud Institute Experts
- Moet u Azure DevOps-certificering aanstreken? Voordelen en carrière-impact
- Azure DevOps-certificeringsexamen Halen Zonder Formele Training
- Cloud Kostenbeheer Beheersen: Bewezen Strategieën voor AWS, GCP en Azure
- Microsoft Lanceert Azure Edge Zones voor 5G-ingeschakelde IoT & AI-workloads