protected override void Initialize()
        {
            InitializeHealthMonitor(22);

            var pi2PortController = new Pi2PortController();

            AddDevice(new BuiltInI2CBus(Logger));
            AddDevice(new OpenWeatherMapWeatherStation(OpenWeatherMapWeatherStation.DefaultDeviceId, Timer, HttpApiController, Logger));

            var ccToolsFactory = new CCToolsBoardController(this, Device <II2CBus>(), HttpApiController, Logger);
            var hsrt16         = ccToolsFactory.CreateHSRT16(Device.CellarHSRT16, new I2CSlaveAddress(32));

            var garden = this.CreateArea(RoomId.Garden)
                         .WithLamp(Garden.LampTerrace, hsrt16[HSRT16Pin.Relay15])
                         .WithLamp(Garden.LampGarage, hsrt16[HSRT16Pin.Relay14])
                         .WithLamp(Garden.LampTap, hsrt16[HSRT16Pin.Relay13])
                         .WithLamp(Garden.SpotlightRoof, hsrt16[HSRT16Pin.Relay12])
                         .WithLamp(Garden.LampRearArea, hsrt16[HSRT16Pin.Relay11])
                         .WithSocket(Garden.SocketPavillion, hsrt16[HSRT16Pin.Relay10])
                         // 9 = free
                         .WithLamp(Garden.LampParkingLot, new LogicalBinaryOutput().WithOutput(hsrt16[HSRT16Pin.Relay8]).WithOutput(hsrt16[HSRT16Pin.Relay6]).WithOutput(hsrt16[HSRT16Pin.Relay7]))
                         .WithButton(Garden.Button, pi2PortController.GetInput(4).WithInvertedState())
                         .WithStateMachine(Garden.StateMachine, SetupStateMachine);

            garden.StateMachine(Garden.StateMachine).ConnectMoveNextAndToggleOffWith(garden.Button(Garden.Button));

            garden.SetupConditionalOnAutomation()
            .WithActuator(garden.Lamp(Garden.LampParkingLot))
            .WithOnAtNightRange(Device <IWeatherStation>())
            .WithOffBetweenRange(TimeSpan.Parse("22:30:00"), TimeSpan.Parse("05:00:00"));

            Timer.Tick += (s, e) => { pi2PortController.PollOpenInputPorts(); };
        }
示例#2
0
        protected override async Task ConfigureAsync()
        {
            var pi2PortController = new Pi2PortController();

            AddDevice(new BuiltInI2CBus());

            ServiceLocator.RegisterService(typeof(OpenWeatherMapWeatherService),
                                           new OpenWeatherMapService(ApiController,
                                                                     ServiceLocator.GetService <IDateTimeService>(),
                                                                     ServiceLocator.GetService <ISchedulerService>(),
                                                                     ServiceLocator.GetService <ISystemInformationService>()));

            var ccToolsFactory = new CCToolsBoardController(this, GetDevice <II2CBus>());
            var hsrt16         = ccToolsFactory.CreateHSRT16(Device.CellarHSRT16, new I2CSlaveAddress(32));

            var garden = this.CreateArea(RoomId.Garden)
                         .WithLamp(Garden.LampTerrace, hsrt16[HSRT16Pin.Relay15])
                         .WithLamp(Garden.LampGarage, hsrt16[HSRT16Pin.Relay14])
                         .WithLamp(Garden.LampTap, hsrt16[HSRT16Pin.Relay13])
                         .WithLamp(Garden.SpotlightRoof, hsrt16[HSRT16Pin.Relay12])
                         .WithLamp(Garden.LampRearArea, hsrt16[HSRT16Pin.Relay11])
                         .WithSocket(Garden.SocketPavillion, hsrt16[HSRT16Pin.Relay10])
                         // 9 = free
                         .WithLamp(Garden.LampParkingLot, new LogicalBinaryOutput().WithOutput(hsrt16[HSRT16Pin.Relay8]).WithOutput(hsrt16[HSRT16Pin.Relay6]).WithOutput(hsrt16[HSRT16Pin.Relay7]))
                         .WithButton(Garden.Button, pi2PortController.GetInput(4).WithInvertedState())
                         .WithStateMachine(Garden.StateMachine, SetupStateMachine);

            garden.GetStateMachine(Garden.StateMachine).ConnectMoveNextAndToggleOffWith(garden.GetButton(Garden.Button));

            garden.SetupConditionalOnAutomation()
            .WithActuator(garden.GetLamp(Garden.LampParkingLot))
            .WithOnAtNightRange()
            .WithOffBetweenRange(TimeSpan.Parse("22:30:00"), TimeSpan.Parse("05:00:00"));

            Timer.Tick += (s, e) => { pi2PortController.PollOpenInputPorts(); };

            await base.ConfigureAsync();
        }