@startuml skinparam BackgroundColor F0F0F0 [*] --> InitialCheck InitialCheck --> LevelCriticalNotCharging : initialLevelCheck [isCriticalNotCharging && !isShutdown] InitialCheck --> Shutdown : initialLevelCheck [isCriticalNotCharging && isShutdown] InitialCheck --> LevelCriticalCharging : initialLevelCheck [isCriticalCharging] InitialCheck --> LevelNormal : initialLevelCheck [isNormal] LevelNormal --> LevelCriticalNotCharging : criticalLevelCheck [isCriticalNotCharging && !isShutdown] /\n (setCriticalNotCharging, sendStateChange) LevelNormal --> Shutdown : criticalLevelCheck [isCriticalNotCharging && isShutdown] /\n (setShutdown, sendStateChange) LevelNormal --> LevelCriticalCharging : criticalLevelCheck [isCriticalCharging] /\n (setCriticalCharging, sendStateChange) LevelCriticalNotCharging --> LevelNormal : criticalLevelCheck [isNormal] /\n (setNormal, sendStateChange) LevelCriticalNotCharging --> LevelCriticalCharging : criticalLevelCheck [isCriticalCharging] /\n (setCriticalCharging, sendStateChange) LevelCriticalNotCharging --> Shutdown : criticalLevelCheck [isShutdown] / (sendShutdown, sendStateChange) LevelCriticalCharging --> LevelCriticalNotCharging : criticalLevelCheck [isCriticalNotCharging && !isShutdown] /\n (setCriticalNotCharging, sendStateChange) LevelCriticalCharging --> LevelNormal : criticalLevelCheck [isNormal] /\n (setNormal, sendStateChange) LevelCriticalCharging --> Shutdown : criticalLevelCheck [isCriticalNotCharging && isShutdown] / \n(setShutdown, sendStateChange) @enduml