One view model, Drop: level, litres (capacity), status, code and eta. The state machine has one state per status, and every status can be set directly by the host, so the app only ever writes data. A second small script formats litres with thousands separators, because the built-in converter cannot. The preview controls at the bottom drive the same view model, so the file can be tested without any app.