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(); }; }
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(); }