def get_states()

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