Иерархическое государство с лицами без гражданства

Мне интересно, если он будет делать то, что я после.

Я думаю о государственном автомате для домашней автоматизации с некоторой логикой, подобной этой:

var stateMachine = new StateMachine<State, Trigger>(State.UnOccupied);
        stateMachine.Configure(State.UnOccupied)
            .Permit(Trigger.SensorActivity, State.Occupied)
            .Ignore(Trigger.AlarmFullSet);

        stateMachine.Configure(State.Occupied)
            .Permit(Trigger.AlarmFullSet, State.UnOccupied)
            .Permit(Trigger.AlarmPartSet, State.Asleep)
            .PermitReentry(Trigger.SensorActivity);

        stateMachine.Configure(State.Asleep)
            .SubstateOf(State.Occupied)
            .Permit(Trigger.AlarmUnset, State.Occupied);

Однако я хочу представить состояние комнат в доме, а также общее состояние дома.

IE

Home

    House Object
                        Upstairs
                                        Bedroom 1
                                        Bedroom 2
                        Downstairs
                                        Kitchen
                                        Living Room

    Garden
                        Front
                        Back
                        Side                       

Так что если гостиная занята, то внизу и дом, и дом..

Заранее извиняюсь, мой C# не самый лучший, и я погружаюсь в глубокий конец!

Кроме того, можно ли выполнять временный выход из состояний... так, чтобы датчик мог вызвать занятость комнаты, тогда больше активности вызывает повторное поступление? (Перезапускает счетчик / таймер / корректирует расписание) в записи занятого состояния - затем через 15 минут после прекращения событий входа / активности занятие очищается в этой области, и состояние переходит в незанятое для этой области.

1 ответ

Да, я думаю, что это возможно для архивации без сохранения состояния. Я бы смоделировал каждую комнату как объект Room, который имеет набор триггеров и состояний. Объект Room может иметь один или несколько таймеров для выполнения запланированных триггеров, которые запускают триггер по истечении таймера. Некоторые комнаты могут быть особенными, поэтому они могут быть смоделированы как специализированные классы, наследуемые от класса Room. Может быть, даже создавать объекты пола и дома, если это имеет смысл. Тогда вы можете сделать house.SetVacationMode().

У Stateless есть событие StateChanged, которое вы можете использовать, чтобы сообщить каждой комнате о состоянии других комнат. Я подозреваю, что вам понадобится объект менеджера, который взаимодействует с UI, а также объект UI / Control. У них также может быть конечный автомат.

Другие вопросы по тегам