dm_mac.models.machine module

Model representing a machine.

class dm_mac.models.machine.Machine(name: str, authorizations_or: List[str], unauthorized_warn_only: bool = False)

Bases: object

Object representing a machine and its state and configuration.

property as_dict: Dict[str, Any]

Return a dict representation of this machine.

authorizations_or: List[str]

List of OR’ed authorizations, any of which is sufficient

async lockout(slack: SlackHandler | None = None) None

Pass directly to self.state.

name: str

The name of the machine

async oops(slack: SlackHandler | None = None) None

Pass directly to self.state.

state: MachineState

state of the machine

unauthorized_warn_only: bool

Whether to allow anyone to operate machine regardless of authorization, just logging/displaying a warning if unauthorized

async unlock(slack: SlackHandler | None = None) None

Pass directly to self.state.

async unoops(slack: SlackHandler | None = None) None

Pass directly to self.state.

async update(users: UsersConfig, **kwargs: Any) Dict[str, str | bool | float | List[float]]

Pass directly to self.state and return result.

class dm_mac.models.machine.MachineState(machine: Machine, load_state: bool = True)

Bases: object

Object representing frozen state in time of a machine.

DEFAULT_DISPLAY_TEXT: str = 'Please Insert\nRFID Card'
LOCKOUT_DISPLAY_TEXT: str = 'Down for\nmaintenance'
OOPS_DISPLAY_TEXT: str = 'Oops!! Please\ncheck/post Slack'
STATUS_LED_BRIGHTNESS: float = 0.5
async _handle_oops(users: UsersConfig) None

Handle oops button press.

async _handle_reboot() None

Handle when the ESP32 (MCU) has rebooted since last checkin.

This logs out the current user if logged in and turns off the relay if turned on.

async _handle_rfid_insert(users: UsersConfig, rfid_value: str) None

Handle change in the RFID value.

async _handle_rfid_remove() None

Handle RFID card removed.

_load_from_cache() None

Load machine state cache from disk.

_save_cache() None

Save machine state cache to disk.

_state_dir: str

Path to the directory to save machine state in

_state_path: str

Path to pickled state file

async _user_is_authorized(user: User, slack: SlackHandler | None = None) bool

Return whether user is authorized for this machine.

current_amps: float

Last reported output ammeter reading (if equipped).

current_user: User | None

Current user logged in to the machine

display_text: str

Text currently displayed on the machine LCD screen

internal_temperature_c: float | None

ESP32 internal temperature in °C

is_locked_out: bool

Whether the machine is locked out from use.

is_oopsed: bool

Whether the machine’s Oops button has been pressed.

last_checkin: float | None

Float timestamp of the machine’s last checkin time

last_update: float | None

Float timestamp of the last time that machine state changed in a meaningful way, i.e. RFID value or Oops

lockout() None

Lock-out the machine.

machine: Machine

The Machine that this state is for

property machine_response: Dict[str, str | bool | float | List[float]]

Return the response dict to send to the machine.

oops(do_locking: bool = True) None

Oops the machine.

relay_desired_state: bool

Whether the output relay should be on or not.

rfid_present_since: float | None

Float timestamp when rfid_value last changed to a non-None value.

rfid_value: str | None

Value of the RFID card/fob in use, or None if not present.

status_led_brightness: float

status LED brightness value; float 0 to 1

status_led_rgb: Tuple[float, float, float]

RGB values for status LED; floats 0 to 1

unlock() None

Un-lock-out the machine.

unoops(do_locking: bool = True) None

Un-oops the machine.

async update(users: UsersConfig, oops: bool = False, rfid_value: str | None = None, uptime: float | None = None, wifi_signal_db: float | None = None, wifi_signal_percent: float | None = None, internal_temperature_c: float | None = None, amps: float | None = None) Dict[str, str | bool | float | List[float]]

Handle an update to the machine via API.

uptime: float

Uptime of the machine’s ESP32 in seconds

wifi_signal_db: float | None

ESP32 WiFi signal strength in dB

wifi_signal_percent: float | None

ESP32 WiFi signal strength in percent

class dm_mac.models.machine.MachinesConfig

Bases: object

Class representing machines configuration file.

_load_and_validate_config() Dict[str, Dict[str, Any]]

Load and validate the config file.

static validate_config(config: Dict[str, Dict[str, Any]]) None

Validate configuration via jsonschema.