private static void SetupLight(StateMachine light, HSREL8 hsrel8, HSPE8OutputOnly hspe8) { // Front lights (left, middle, right) var fl = hspe8[HSPE8Pin.GPIO0].WithInvertedState(); var fm = hspe8[HSPE8Pin.GPIO2].WithInvertedState(); var fr = hsrel8[HSREL8Pin.GPIO0].WithInvertedState(); // Middle lights (left, middle, right) var ml = hspe8[HSPE8Pin.GPIO1].WithInvertedState(); var mm = hspe8[HSPE8Pin.GPIO3].WithInvertedState(); var mr = hsrel8[HSREL8Pin.GPIO1].WithInvertedState(); // Rear lights (left, right) // Two mechanical relays. var rl = hsrel8[HSREL8Pin.GPIO5]; var rr = hsrel8[HSREL8Pin.GPIO4]; light.AddOffState() .WithLowBinaryOutput(fl) .WithLowBinaryOutput(fm) .WithLowBinaryOutput(fr) .WithLowBinaryOutput(ml) .WithLowBinaryOutput(mm) .WithLowBinaryOutput(mr) .WithLowBinaryOutput(rl) .WithLowBinaryOutput(rr); light.AddOnState() .WithHighBinaryOutput(fl) .WithHighBinaryOutput(fm) .WithHighBinaryOutput(fr) .WithHighBinaryOutput(ml) .WithHighBinaryOutput(mm) .WithHighBinaryOutput(mr) .WithHighBinaryOutput(rl) .WithHighBinaryOutput(rr); light.AddState("DeskOnly") .WithHighBinaryOutput(fl) .WithHighBinaryOutput(fm) .WithLowBinaryOutput(fr) .WithHighBinaryOutput(ml) .WithLowBinaryOutput(mm) .WithLowBinaryOutput(mr) .WithLowBinaryOutput(rl) .WithLowBinaryOutput(rr); light.AddState("CouchOnly") .WithLowBinaryOutput(fl) .WithLowBinaryOutput(fm) .WithLowBinaryOutput(fr) .WithLowBinaryOutput(ml) .WithLowBinaryOutput(mm) .WithLowBinaryOutput(mr) .WithLowBinaryOutput(rl) .WithHighBinaryOutput(rr); light.AlternativeStateId = StateMachineStateExtensions.OffStateId; light.ResetStateId = StateMachineStateExtensions.OffStateId; }
public IDevice CreateDevice(CCToolsDeviceType type, string id, int address) { if (id == null) { throw new ArgumentNullException(nameof(id)); } var i2CSlaveAddress = new I2CSlaveAddress(address); IDevice deviceInstance; switch (type) { case CCToolsDeviceType.HSPE16_InputOnly: { deviceInstance = new HSPE16InputOnly(id, i2CSlaveAddress, _i2CBusService, _log); break; } case CCToolsDeviceType.HSPE16_OutputOnly: { deviceInstance = new HSPE16OutputOnly(id, i2CSlaveAddress, _i2CBusService, _log); break; } case CCToolsDeviceType.HSPE8_InputOnly: { deviceInstance = new HSPE8InputOnly(id, i2CSlaveAddress, _i2CBusService, _log); break; } case CCToolsDeviceType.HSPE8_OutputOnly: { deviceInstance = new HSPE8OutputOnly(id, i2CSlaveAddress, _i2CBusService, _log); break; } case CCToolsDeviceType.HSRel5: { deviceInstance = new HSREL5(id, i2CSlaveAddress, _i2CBusService, _log); break; } case CCToolsDeviceType.HSRel8: { deviceInstance = new HSREL8(id, i2CSlaveAddress, _i2CBusService, _log); break; } case CCToolsDeviceType.HSRT16: { deviceInstance = new HSRT16(id, i2CSlaveAddress, _i2CBusService, _log); break; } default: throw new NotSupportedException(); } return(deviceInstance); }
private void SetupStairsCeilingLamps(IArea floor, HSPE8OutputOnly hspe8UpperFloor) { var output = new LogicalBinaryOutput() .WithOutput(hspe8UpperFloor[HSPE8Pin.GPIO4]) .WithOutput(hspe8UpperFloor[HSPE8Pin.GPIO5]) .WithOutput(hspe8UpperFloor[HSPE8Pin.GPIO7]) .WithOutput(hspe8UpperFloor[HSPE8Pin.GPIO6]) .WithInvertedState(); floor.WithLamp(Floor.LampStairsCeiling, output); floor.SetupTurnOnAndOffAutomation() .WithTrigger(floor.MotionDetector(Floor.StairsLowerMotionDetector), new AnimateParameter()) .WithTrigger(floor.MotionDetector(Floor.StairsUpperMotionDetector)) //.WithTrigger(floor.Button(Floor.ButtonStairsUpper)) .WithTarget(floor.BinaryStateOutput(Floor.LampStairsCeiling)) .WithOnDuration(TimeSpan.FromSeconds(10)); var lamp = floor.Lamp(Floor.LampStairsCeiling); floor.Button(Floor.ButtonStairsUpper).GetPressedShortlyTrigger().Triggered += (s, e) => { if (lamp.GetState() == BinaryActuatorState.On) { lamp.TurnOff(new AnimateParameter().WithReversedOrder()); } else { lamp.TurnOn(new AnimateParameter()); } }; floor.Button(Floor.ButtonStairsLowerUpper).GetPressedShortlyTrigger().Triggered += (s, e) => { if (lamp.GetState() == BinaryActuatorState.On) { lamp.TurnOff(new AnimateParameter()); } else { lamp.TurnOn(new AnimateParameter().WithReversedOrder()); } }; }
private void SetupStairsCeilingLamps(IArea room, HSPE8OutputOnly hspe8UpperFloor) { var output = new LogicalBinaryOutput() .WithOutput(hspe8UpperFloor[HSPE8Pin.GPIO4]) .WithOutput(hspe8UpperFloor[HSPE8Pin.GPIO5]) .WithOutput(hspe8UpperFloor[HSPE8Pin.GPIO7]) .WithOutput(hspe8UpperFloor[HSPE8Pin.GPIO6]) .WithInvertedState(); _actuatorFactory.RegisterLamp(room, Floor.LampStairsCeiling, output); _automationFactory.RegisterTurnOnAndOffAutomation(room, Floor.LampStairsCeilingAutomation) .WithTrigger(room.GetMotionDetector(Floor.StairsLowerMotionDetector)) .WithTrigger(room.GetMotionDetector(Floor.StairsUpperMotionDetector)) //.WithTrigger(floor.GetButton(Floor.ButtonStairsUpper).GetPressedShortlyTrigger()) .WithTarget(room.GetStateMachine(Floor.LampStairsCeiling)); var lamp = room.GetLamp(Floor.LampStairsCeiling); room.GetButton(Floor.ButtonStairsUpper).GetPressedShortlyTrigger().Triggered += (s, e) => { if (lamp.GetState().Equals(BinaryStateId.On)) { lamp.SetState(BinaryStateId.Off, new AnimateParameter().WithReversedOrder()); } else { lamp.SetState(BinaryStateId.On, new AnimateParameter()); } }; room.GetButton(Floor.ButtonStairsLowerUpper).GetPressedShortlyTrigger().Triggered += (s, e) => { if (lamp.GetState().Equals(BinaryStateId.On)) { lamp.SetState(BinaryStateId.Off, new AnimateParameter()); } else { lamp.SetState(BinaryStateId.On, new AnimateParameter().WithReversedOrder()); } }; }
private void SetupStairsCeilingLamps(IArea room, HSPE8OutputOnly hspe8UpperFloor) { var output = new LogicalBinaryOutput() .WithOutput(hspe8UpperFloor[HSPE8Pin.GPIO4]) .WithOutput(hspe8UpperFloor[HSPE8Pin.GPIO5]) .WithOutput(hspe8UpperFloor[HSPE8Pin.GPIO7]) .WithOutput(hspe8UpperFloor[HSPE8Pin.GPIO6]) .WithInvertedState(); _actuatorFactory.RegisterLamp(room, Floor.LampStairsCeiling, output); _automationFactory.RegisterTurnOnAndOffAutomation(room, Floor.LampStairsCeilingAutomation) .WithTrigger(room.GetMotionDetector(Floor.StairsLowerMotionDetector)) .WithTrigger(room.GetMotionDetector(Floor.StairsUpperMotionDetector)) //.WithTrigger(floor.GetButton(Floor.ButtonStairsUpper).GetPressedShortlyTrigger()) .WithTarget(room.GetLamp(Floor.LampStairsCeiling)); var lamp = room.GetLamp(Floor.LampStairsCeiling); room.GetButton(Floor.ButtonStairsUpper).PressedShortTrigger.Attach(() => lamp.TryTogglePowerState()); room.GetButton(Floor.ButtonStairsLowerUpper).PressedShortTrigger.Attach(() => lamp.TryTogglePowerState()); }
private void SetupLight(StateMachine light, HSREL8 hsrel8, HSPE8OutputOnly hspe8, IArea room) { // Front lights (left, middle, right) var fl = hspe8[HSPE8Pin.GPIO0].WithInvertedState(); var fm = hspe8[HSPE8Pin.GPIO2].WithInvertedState(); var fr = hsrel8[HSREL8Pin.GPIO0].WithInvertedState(); // Middle lights (left, middle, right) var ml = hspe8[HSPE8Pin.GPIO1].WithInvertedState(); var mm = hspe8[HSPE8Pin.GPIO3].WithInvertedState(); var mr = hsrel8[HSREL8Pin.GPIO1].WithInvertedState(); // Rear lights (left, right) // Two mechanical relays. var rl = hsrel8[HSREL8Pin.GPIO5]; var rr = hsrel8[HSREL8Pin.GPIO4]; light.AddOffState() .WithLowOutput(fl) .WithLowOutput(fm) .WithLowOutput(fr) .WithLowOutput(ml) .WithLowOutput(mm) .WithLowOutput(mr) .WithLowOutput(rl) .WithLowOutput(rr); light.AddOnState() .WithHighOutput(fl) .WithHighOutput(fm) .WithHighOutput(fr) .WithHighOutput(ml) .WithHighOutput(mm) .WithHighOutput(mr) .WithHighOutput(rl) .WithHighOutput(rr); var deskOnlyStateId = new ComponentState("DeskOnly"); light.AddState(deskOnlyStateId) .WithHighOutput(fl) .WithHighOutput(fm) .WithLowOutput(fr) .WithHighOutput(ml) .WithLowOutput(mm) .WithLowOutput(mr) .WithLowOutput(rl) .WithLowOutput(rr); var couchOnlyStateId = new ComponentState("CouchOnly"); light.AddState(couchOnlyStateId) .WithLowOutput(fl) .WithLowOutput(fm) .WithLowOutput(fr) .WithLowOutput(ml) .WithLowOutput(mm) .WithLowOutput(mr) .WithLowOutput(rl) .WithHighOutput(rr); light.WithTurnOffIfStateIsAppliedTwice(); room.GetButton(Office.ButtonLowerRight) .GetPressedShortlyTrigger() .Attach(light.GetSetStateAction(couchOnlyStateId)); room.GetButton(Office.ButtonLowerLeft) .GetPressedShortlyTrigger() .Attach(light.GetSetStateAction(deskOnlyStateId)); room.GetButton(Office.ButtonUpperLeft) .GetPressedShortlyTrigger() .Attach(light.GetSetStateAction(BinaryStateId.On)); _synonymService.AddSynonymsForArea(Room.Office, "Büro", "Arbeitszimmer"); _synonymService.AddSynonymsForComponent(Room.Office, Office.CombinedCeilingLights, "Licht"); _synonymService.AddSynonymsForComponent(Room.Office, Office.SocketRearLeftEdge, "Rotlicht", "Pufflicht", "Rot"); _synonymService.AddSynonymsForComponentState(deskOnlyStateId, "Schreibtisch"); _synonymService.AddSynonymsForComponentState(couchOnlyStateId, "Couch"); }