Am Ende dieses Kapitels kann Ihre Lösung Folgendes:
In diesem Kapitel erstellen Sie eine serverlose Anwendung ohne Code, die die Eingaben Ihres intelligenten Thermostats analysiert und das Verhalten für das entsprechende (fiktive) HLK-System bestimmt. Sie verwenden IoT-Events, um eine Ressource bereitzustellen, die als Detektor-Modell bezeichnet wird, und die weitergeleiteten Nachrichten verarbeitet. Bewerten Sie, ob Zustandsänderungen von Heizung über Kühlung bis Standby auftreten sollten, und senden dann eine Nachricht mit der aktualisierten Statusänderung an Ihr intelligentes Thermostat zurück, falls vorhanden.
Hier ist eine Vorschau des Detektor-Modells, das Sie erstellen werden:
Wie Sie sehen, gibt es drei Zustände für die HLK-Anwendung: HEATING, COOLING und STANDBY. Die Applikation befindet sich immer in einem dieser Status und beginnt in standby. Wenn neue Nachrichten vom intelligenten Thermostat eingehen, wertet das Detektor-Modell diese Eingaben anhand der bedingten Logik aus, um zu bestimmen, ob das Modell in einen neuen Zustand übergehen soll.
Wenn beispielsweise im Standby-Zustand ein neuer Temperaturwert über 80 (in Grad Fahrenheit) liegt, bewertet das Modell einen Übergang in den Zustand cooling. Wenn es dann in den Status cooling wechselt, veröffentlicht das Modell eine neue Nachricht zurück an IoT Core, um den Geräteschatten des intelligenten Thermostats mit einer Meldung wie: {"state": {"desired": {"hvacStatus": "COOLING" }}}
zu aktualisieren. Basierend auf der Arbeit, die Sie ursprünglich im Kapitel Datensynchronisierung geleistet haben, werden diese neuen Befehle bestätigt, der Status auf dem Gerät entsprechend aktualisiert und die LED-Streifen auf Rot, Blau oder Aus gesetzt.
Es sprengt den Rahmen dieses Lernmoduls, vollständig zu untersuchen, wie Detektor-Modelle in IoT-Events erstellt werden. Stattdessen bringen die folgenden Schritte Ihr Detektor-Modell zum Laufen. Ein paar Anmerkungen zu den wichtigsten Teilen sollen Ihnen helfen zu verstehen, wie dieses Modell funktioniert. Eine Einführung in die ersten Schritte mit AWS IoT Events finden Sie im Entwicklerhandbuch .
Führen Sie die folgenden Schritte aus, um das in der Abbildung oben dargestellte Detektor-Modell zu erstellen:
Erstellen Sie zunächst auf Ihrem lokalen Desktop eine Datei mit folgendem Inhalt. Nennen Sie die Datei etwas wie model.json
. Sie müssen die Datei bearbeiten und die drei Instanzen des Begriffs «CLIENT_ID» durch die Client-ID/Seriennummer Ihres Geräts ersetzen (sie wird auf dem Bildschirm Ihres Geräts angezeigt).
{
"detectorModelDefinition": {
"states": [
{
"stateName": "standby",
"onInput": {
"events": [],
"transitionEvents": [
{
"eventName": "startHeating",
"condition": "($input.thermostat.current.state.reported.temperature <= $variable.heatingThresholdUnoccupied) || ($input.thermostat.current.state.reported.roomOccupancy && $input.thermostat.current.state.reported.temperature <= $variable.heatingThresholdOccupied) ",
"actions": [],
"nextState": "heating"
},
{
"eventName": "startCooling",
"condition": "($input.thermostat.current.state.reported.temperature >= $variable.coolingThresholdUnoccupied) || ($input.thermostat.current.state.reported.roomOccupancy && $input.thermostat.current.state.reported.temperature >= $variable.coolingThresholdOccupied) ",
"actions": [],
"nextState": "cooling"
}
]
},
"onEnter": {
"events": [
{
"eventName": "setThresholds",
"condition": "true",
"actions": [
{
"setVariable": {
"variableName": "heatingThresholdUnoccupied",
"value": "60"
}
},
{
"setVariable": {
"variableName": "heatingThresholdOccupied",
"value": "68"
}
},
{
"setVariable": {
"variableName": "coolingThresholdOccupied",
"value": "72"
}
},
{
"setVariable": {
"variableName": "coolingThresholdUnoccupied",
"value": "80"
}
}
]
},
{
"eventName": "setStandbyInShadow",
"condition": "true",
"actions": [
{
"iotTopicPublish": {
"mqttTopic": "'$aws/things/<<CLIENT_ID>>/shadow/update'",
"payload": {
"contentExpression": "'{\"state\":{\"desired\":{\"hvacStatus\":\"STANDBY\"}}}'",
"type": "JSON"
}
}
}
]
}
]
},
"onExit": {
"events": []
}
},
{
"stateName": "cooling",
"onInput": {
"events": [],
"transitionEvents": [
{
"eventName": "stopCooling",
"condition": "(!$input.thermostat.current.state.reported.roomOccupancy && $input.thermostat.current.state.reported.temperature < $variable.coolingThresholdUnoccupied) || ($input.thermostat.current.state.reported.roomOccupancy && $input.thermostat.current.state.reported.temperature < $variable.coolingThresholdOccupied) ",
"actions": [],
"nextState": "standby"
}
]
},
"onEnter": {
"events": [
{
"eventName": "setCoolingInShadow",
"condition": "true",
"actions": [
{
"iotTopicPublish": {
"mqttTopic": "'$aws/things/<<CLIENT_ID>>/shadow/update'",
"payload": {
"contentExpression": "'{\"state\":{\"desired\":{\"hvacStatus\":\"COOLING\"}}}'",
"type": "JSON"
}
}
}
]
}
]
},
"onExit": {
"events": []
}
},
{
"stateName": "heating",
"onInput": {
"events": [],
"transitionEvents": [
{
"eventName": "stopHeating",
"condition": "(!$input.thermostat.current.state.reported.roomOccupancy && $input.thermostat.current.state.reported.temperature > $variable.heatingThresholdUnoccupied) || ($input.thermostat.current.state.reported.roomOccupancy && $input.thermostat.current.state.reported.temperature > $variable.heatingThresholdOccupied) ",
"actions": [],
"nextState": "standby"
}
]
},
"onEnter": {
"events": [
{
"eventName": "setHeatingInShadow",
"condition": "true",
"actions": [
{
"iotTopicPublish": {
"mqttTopic": "'$aws/things/<<CLIENT_ID>>/shadow/update'",
"payload": {
"contentExpression": "'{\"state\":{\"desired\":{\"hvacStatus\":\"HEATING\"}}}'",
"type": "JSON"
}
}
}
]
}
]
},
"onExit": {
"events": []
}
}
],
"initialStateName": "standby"
},
"detectorModelName": "hvacApplication",
"detectorModelDescription": "cloud application to manage HVAC state",
"evaluationMethod": "BATCH"
}
Verwenden Sie als Nächstes diese Datei, um ein neues Detektor-Modell in die AWS IoT Events Konsole zu importieren:
edukit-iotevents
. Die Konsole erstellt eine neue IAM-Rolle, die IoT-Events die Berechtigung zum Betrieb Ihres Modells erteilt.Sie haben das Detektor-Modell jetzt in IoT-Events erstellt. Wenn neue Nachrichten von Ihrem intelligenten Thermostat veröffentlicht werden, leitet die IoT-Core-Regel, die Sie im vorherigen Kapitel erstellt haben, sie an die IoT-Events Eingabe weiter. Anschließend überträgt IoT Events Kopien der Nachrichten von allen Eingaben an alle Detektor-Modelle.
Nun zu der Erklärung einiger wichtiger Teile des Modells. Jeder Zustand des Modells (Heizen/Kühlen/Standby) ist nahezu gleich. Der Status standby hat eine zusätzliche Aktion zum Festlegen der numerischen Schwellenwerte, die jeder Zustand verwendet, um zu bestimmen, ob er den Status ändern soll. Diese könnten einmal in einem einmaligen Initialisierungszustand gesetzt werden, bevor sie zum ersten Mal in Standby verändert werden. Hier sind sie in Standby enthalten, um die Demonstration zu vereinfachen.
Die Konfiguration der übrigen Zustände ist ähnlich. Es gibt ein OnEnter-Ereignis, um eine Meldung im Geräteschatten des intelligenten Thermostats zu veröffentlichen, die angibt, in welchem Zustand sich die HLK jetzt befinden soll. Es gibt einen bedingten Übergang, der nach der Verarbeitung jeder Nachricht ausgewertet wird und prüft, ob sich der Status ändern soll. Wenn sich das Modell beispielsweise im Zustand heating befindet und der bedingte Ausdruck für StopHeating den Wert true ergibt, wechselt das Modell in den Status Standby. Beachten Sie, dass der Status Standby zwei Übergänge hat, jeweils einen für den Übergang zuHeizen oder Kühlung. Dieses Modell ist insofern vereinfacht, als das System immer den Status Standby durchläuft, anstatt direkt von Heizen zu Kühlung oder umgekehrt. Die bedingte Übergangslogik berücksichtigt die beiden Temperaturgrenzen; eine, wenn der Raum belegt ist, und eine, wenn der Raum nicht belegt ist.
Im Folgenden finden Sie ein Beispiel für einen Übergang vom Zustand heating mit der Bezeichnung stopHeating. Es gibt zwei boolesche Ausdrücke, die mit der ODER ||
-Logik verknüpft sind. Im Klartext bedeutet dieser Ausdruck „Stoppen Sie die Heizung, wenn der Raum nicht belegt ist und die Raumtemperatur warm genug ist, wenn Sie nicht besetzt sind, ODER wenn der Raum belegt ist und der Raum warm genug für Menschen ist“.
(!$input.thermostat.current.state.reported.roomOccupancy && $input.thermostat.current.state.reported.temperature > $variable.heatingThresholdUnoccupied) || ($input.thermostat.current.state.reported.roomOccupancy && $input.thermostat.current.state.reported.temperature > $variable.heatingThresholdOccupied)
Wenn alles gemäß den Anweisungen dieses Moduls konfiguriert wurde, sollten jetzt Statusänderungen in Form von aktualisierten LED-Streifen an Ihren intelligenten Thermostat gesendet werden. Damit ist die End-to-End-Lösung abgeschlossen!
Bevor Sie mit dem nächsten Kapitel fortfahren, können Sie überprüfen, ob die Lösung wie beabsichtigt konfiguriert ist:
Hinweis: Der Temperatursensor befindet sich im Gehäuse des Kits und der Code enthält einen fest codierten Offset. Sie können eine Abweichung der Temperaturmessung von bis zu 10 Grad vom Ablesen bis zum Messwert feststellen.
Wenn die Lösung wie erwartet funktioniert, können Sie mit der Zusammenfassung fortfahren.
AWS IoT Kit now features direct access to
AWS re:Post
, which is a community-driven, questions-and-answers service. Search re:Post using the
AWS IoT Kit
tag to see if your question has been asked and answered. If not, ask a new question using the AWS IoT Kit
tag.