Add branding splash and simulator cycle timing

This commit is contained in:
masterdev
2026-06-17 13:51:12 +01:00
parent d2ddcb2b20
commit 6d5e11e433
8 changed files with 203 additions and 15 deletions

View File

@@ -331,19 +331,23 @@ def run_simulator_scenario(payload: SimulatorScenarioCreate, db: Session = Depen
elif payload.scenario == "cycle_signal_edge":
current_value = machine.cycle_signal_edge != "falling"
previous_value = not current_value
last_cycle_at = None
if machine.last_cycle_at is not None:
last_cycle_at = machine.last_cycle_at.replace(tzinfo=UTC) if machine.last_cycle_at.tzinfo is None else machine.last_cycle_at.astimezone(UTC)
current_event_time = last_cycle_at + timedelta(seconds=cycle_time_sec) if last_cycle_at is not None else now
events.extend(
[
SimulatorEventCreate(
machine_id=machine.code,
event_type="digital_input_changed",
timestamp=now - timedelta(milliseconds=max(machine.debounce_ms + 100, 500)),
timestamp=current_event_time - timedelta(milliseconds=max(machine.debounce_ms + 100, 500)),
input_name="cycle_signal",
input_value=previous_value,
),
SimulatorEventCreate(
machine_id=machine.code,
event_type="digital_input_changed",
timestamp=now,
timestamp=current_event_time,
input_name="cycle_signal",
input_value=current_value,
cycle_time_sec=cycle_time_sec,

View File

@@ -195,3 +195,23 @@ def test_simulator_debounce_noise_is_ignored(db_session: Session) -> None:
assert result["scenario"] == "debounce_noise"
assert len(result["events"]) == 2
assert cycles == []
def test_simulator_passive_edge_uses_requested_real_cycle_time(db_session: Session) -> None:
machine = seed_running_machine(db_session)
machine.last_cycle_at = datetime(2026, 6, 14, 8, 0, tzinfo=timezone.utc)
db_session.commit()
result = run_simulator_scenario(
SimulatorScenarioCreate(
machine_id=machine.code,
scenario="cycle_signal_edge",
cycle_time_sec=12,
),
db_session,
)
cycle = db_session.execute(select(Cycle).where(Cycle.machine_id == machine.id)).scalar_one()
assert result["scenario"] == "cycle_signal_edge"
assert len(result["events"]) == 2
assert cycle.cycle_time_sec == 12