Thank you so much! For context, this for a "driver" running on a pi that controls actuators on an esp32 via MQTT. So the the most basics states just clones of the states (On/Off) on the esp32, while more complicated states would combine actions like fan + humidifier. I've written everything on the pi in python so far. But that was all V1 and I'm starting over so maybe I'll try something new.
You might map out your functionality and see what you actually need in terms of programmatic functionality. LLMs are actually decent at creating the boilerplate if you know what you need.
Here's an example I had Claude throw together for states/substates for a door with a lock
https://mermaidchart.com/play?utm_source=mermaid_live_editor...
Wow. That's a lot of link. Here's the raw chart:
The syntax in the text labels is written the same way the Harel paper proposes: <State>: <entry/exit> / <action>()Thank you! I just started using mermaid via llms, it's been so helpful mapping ideas out and making sure the llm and I have shared understanding.
I definitely don't need super sophisticated functionality, but I'm trying learn a little more about formal system specification, modeling and verification like in https://mitpress.mit.edu/9780262548922/principles-of-cyber-p... and https://ptolemy.berkeley.edu/books/leeseshia/ while I'm working on this project(it might be a stretch, i'm trying to pack a lot of outcomes into one project in finite time).
I want to be able to do things like prove certain bad states are unreachable or that a certain state of the system will eventually be reached, stuff like that. I'm intrigued by the idea of analyzing/enumerating traces and the dynamical systems perspectives of trajectories through state space (background in physics- statistical mechanics).
My thinking is that the more formal and precise I am with specifying the state machine to begin with, the easier the analyses/modeling will be. I'm following a configuration-driven approach where the whole system is specified/composed from YAML/JSON, so I was planning in this iteration to come up with like a pydantic model to specify state machine behavior.
I haven't looked into 'formal' verification methods for FSMs, so I did some light googling. I found this guy [0] which gives an overview of potential methods.
I'll have to think about testing methods more. There are a few things I would want to know about a single FSM: does it exit (various exit states, either error final state or valid final state), are there unreachable states, does it loop in places it shouldn't, does it enter states it shouldn't for a given stimuli (Events + Guards are the params for this test). I think there's also a place for event fuzzing to try and break the machine.
[0] https://www.linkedin.com/pulse/verification-testing-fsms-too...