-
Notifications
You must be signed in to change notification settings - Fork 11
State Machine
Stefan Bormann edited this page Oct 25, 2025
·
1 revision
There is a main state maschine that covers wifi and server connection, shutdown and boot up options:
stateDiagram-v2
classDef NominalPath stroke-width:1px,stroke-dasharray:none,stroke:#254336,fill:#27654A,color:#FFFFFF;
[*] --> STARTUP
class STARTUP NominalPath
state InitialKeys <<choice>>
class InitialKeys NominalPath
STARTUP --> InitialKeys
InitialKeys --> WAIT_ON_RED_KEY: [ESTOP]
WAIT_ON_RED_KEY --> CONNECTING: [!ESTOP]
WAIT_ON_RED_KEY --> wait_release_red_key: after 5s
wait_release_red_key: wait_release_red_key
wait_release_red_key: entry/deleteAllConfig
wait_release_red_key: exit/ESP.restart
wait_release_red_key --> [*]: [!ESTOP]
InitialKeys --> WAIT_ON_YELLOW_KEY: [SHIFT]
WAIT_ON_YELLOW_KEY --> CONNECTING: [!SHIFT]
WAIT_ON_YELLOW_KEY --> CONFIG_AP: after 5s
CONNECTING --> CONFIG_AP: after 60s
CONFIG_AP: CONFIG_AP
CONFIG_AP: entry/initWiFiAP
InitialKeys --> CONNECTING: else
CONNECTING: CONNECTING
CONNECTING: entry/initWifiSTA
class CONNECTING NominalPath
state CheckF0 <<choice>>
class CheckF0 NominalPath
CONNECTING --> CheckF0: [Wifi connected]
CheckF0 --> WAIT_ON_F0_KEY: [F0]
WAIT_ON_F0_KEY --> CONNECTED: [!F0]
WAIT_ON_F0_KEY --> CONFIG_STATION: after 5s
CheckF0 --> CONNECTED: [!F0]
CONNECTED: CONNECTED
CONNECTED: entry/broadcastUDP
CONNECTED: do/locoConnect
class CONNECTED NominalPath
CONNECTED --> STARTUP: [wifi_disconnected]
CONNECTED --> CONFIG_STATION_WAITING: after 60s
CONNECTED --> LOCO_CONNECTING: Server_connected
LOCO_CONNECTING: LOCO_CONNECTING
LOCO_CONNECTING: do/locoRegister
class LOCO_CONNECTING NominalPath
LOCO_CONNECTING --> STARTUP: [wifi_disconnected]
LOCO_CONNECTING --> CONNECTED: [server_disconnected]
LOCO_CONNECTING --> CONFIG_STATION_WAITING: after 10s
LOCO_CONNECTING --> STATE_LOCO_WAITFORTIMEOUT: received "VN2.0"
STATE_LOCO_WAITFORTIMEOUT: STATE_LOCO_WAITFORTIMEOUT
STATE_LOCO_WAITFORTIMEOUT: do/timeoutReceived
class STATE_LOCO_WAITFORTIMEOUT NominalPath
STATE_LOCO_WAITFORTIMEOUT --> STARTUP: [wifi_disconnected]
STATE_LOCO_WAITFORTIMEOUT --> LOCO_ONLINE: received "*"
STATE_LOCO_WAITFORTIMEOUT --> LOCO_ONLINE: after 1s
STATE_LOCO_WAITFORTIMEOUT --> STARTUP: [wifi_disconnected]
CONFIG_STATION_WAITING: CONFIG_STATION_WAITING
CONFIG_STATION_WAITING: entry/initWiFiConfigSTA
CONFIG_STATION_WAITING: exit/shutdownWiFiConfigSTA
CONFIG_STATION_WAITING --> LOCO_ONLINE: after 120s
CONFIG_STATION_WAITING --> STARTUP: [wifi_disconnected]/initWifiAP
LOCO_ONLINE: LOCO_ONLINE
LOCO_ONLINE: do/locoHandler
class LOCO_ONLINE NominalPath
LOCO_ONLINE --> LOCOS_OFF: [allLocosInactive]
LOCO_ONLINE --> CONNECTED: [server_disconnected && !emptyBattery]
LOCO_ONLINE --> LOWPOWER_WAITING: [emptyBattery || now - lastActivity > 3min]
LOCOS_OFF: LOCOS_OFF
class LOCOS_OFF NominalPath
LOCOS_OFF --> LOWPOWER_WAITING: after 6s/locoDisconnect
LOCOS_OFF --> LOCO_ONLINE: [!allLocosInactive]
LOWPOWER_WAITING --> LOCO_ONLINE: [!allLocosInactive && !lowBattery && !emptyBattery]
LOWPOWER_WAITING --> LOWPOWER: after 100ms/shutdownWiFiSTA
LOWPOWER: LOWPOWER
LOWPOWER: do/ESP.deepSleep(0)
LOWPOWER: exit/ESP.restart
LOWPOWER --> [*]: [!allLocosInactive]
CONFIG_STATION --> STARTUP: [wifi_disconnected]