in device_watchdog/cdkstack/lorawan_device_heartbeat_detectormodel.py [0:0]
def get_states(self, notify_if_inactive_seconds: int):
states = [
{
"stateName": "Healthy",
"onInput": {
"events": [
{
"eventName": "CollectInputMetrics",
"condition": "true",
"actions": [
{
"setVariable": {
"variableName": "input_message_count",
"value": "$variable.input_message_count + 1"
}
},
{
"setVariable": {
"variableName": "lastupdate_timestamp_ms",
"value": "$input.LoRaWANDeviceWatchdogInput.timestamp_ms"
}
}
]
},
{
"eventName": "ResetDisconnectedTimer",
"condition": "true",
"actions": [
{
"resetTimer": {
"timerName": "DisconnectedTimer"
}
},
{
"setVariable": {
"variableName": "timestamp_last_uplink",
"value": "'todo'"
}
}
]
},
{
"eventName": "PublishPresenceMessage",
"condition": "true",
"actions": [
{
"iotTopicPublish": {
"mqttTopic": "awsiotcorelorawan/events/uplink",
"payload": {
"contentExpression": "'{\"deviceid\":\"'+$variable.deviceid + '\", \"type\":\"uplink\"}'",
"type": "JSON"
}
}
}
]
}
],
"transitionEvents": [
{
"eventName": "onDisconnetedTimerTimeout",
"condition": "timeout('DisconnectedTimer')",
"actions": [],
"nextState": "Unhealthy"
}
]
},
"onEnter": {
"events": [
{
"eventName": "InitializeVariables",
"condition": "isUndefined($variable.initalization_complete)",
"actions": [
{
"setVariable": {
"variableName": "input_message_count",
"value": "0"
}
},
{
"setVariable": {
"variableName": "lastupdate_timestamp_ms",
"value": "0"
}
},
{
"setVariable": {
"variableName": "deviceid",
"value": "$input.LoRaWANDeviceWatchdogInput.deviceid"
}
},
{
"setVariable": {
"variableName": "initalization_complete",
"value": "true"
}
}
]
},
{
"eventName": "CreateDisconnectedTimer",
"condition": "true",
"actions": [
{
"setTimer": {
"timerName": "DisconnectedTimer",
"seconds": notify_if_inactive_seconds
}
}
]
}
]
},
"onExit": {
"events": []
}
},
{
"stateName": "Unhealthy",
"onInput": {
"events": [
{
"eventName": "CollectInputMetrics",
"condition": "true",
"actions": [
{
"setVariable": {
"variableName": "input_message_count",
"value": "$variable.input_message_count + 1"
}
},
{
"setVariable": {
"variableName": "lastupdate_timestamp_ms",
"value": "$input.LoRaWANDeviceWatchdogInput.timestamp_ms"
}
}
]
}
],
"transitionEvents": [
{
"eventName": "onIncomingTelemetry",
"condition": "$input.LoRaWANDeviceWatchdogInput.deviceid != \"\"",
"actions": [],
"nextState": "Healthy"
}
]
},
"onEnter": {
"events": [
{
"eventName": "NotifyAboutUnhealthyDevice",
"condition": "true",
"actions": [
{
"iotTopicPublish": {
"mqttTopic": "'awsiotcorelorawan/events/presence/missingheartbeat/'+$variable.deviceid",
"payload": {
"contentExpression": "'{\"deviceid\":\"'+$variable.deviceid + '\", \"type\":\"missingheartbeat\"}'",
"type": "JSON"
}
}
}
]
},
{
"eventName": "DisableTimer",
"condition": "true",
"actions": [
{
"clearTimer": {
"timerName": "DisconnectedTimer"
}
}
]
}
]
},
"onExit": {
"events": []
}
}
];
return states