Example #1
0
        private static bool CanSwitchState(DateTime now, HeaterState heater, PowerZoneState heaterPowerZoneState, bool forceImmidiateAction)
        {
            if (forceImmidiateAction)
            {
                return(true);
            }

            return((now - heater.LastStateChange).TotalSeconds >= heater.Heater.MinimumStateChangeIntervalSeconds &&
                   (heaterPowerZoneState == null || (now - heaterPowerZoneState.LastOutputStateChange).TotalSeconds >= heaterPowerZoneState.PowerZone.SwitchDelayBetweenOutputsSeconds));
        }
 public void setState(bool OnOff)
 {
     if (OnOff)
     {
         heaterState = HeaterState.ON;
     }
     else
     {
         heaterState = HeaterState.OFF;
     }
 }
Example #3
0
        void AddToGraph(HeaterState state)
        {
            cartesianChart.AxisX[0].Labels.Add(DateTime.Now.ToString("T", DateTimeFormatInfo.InvariantInfo));
            for (int i = 0; i < 3; i++)
            {
                sensorCharts[i].Values.Add(state.SensorsTemperature[i]);
            }

            ambientChart.Values.Add(state.AmbientTemperature);

            outputCharts[0].Values.Add((int)state.OutputValues[0]);
        }
        public TankHeater(int temp, string unit)
        {
            if (temp != 0)
            {
                heaterState = HeaterState.ON;
            }
            else
            {
                heaterState = HeaterState.OFF;
            }

            heaterTemp = temp;
            heatUnit   = unit;
        }
Example #5
0
        public virtual IActionResult GetHeaterState([FromRoute] string zoneId)
        {
            //string exampleJson = null;

            const ConnectorPin triggerPin = ConnectorPin.P1Pin38;
            const ConnectorPin echoPin    = ConnectorPin.P1Pin40;

            double distance = 0;
            string state    = null;

            Console.WriteLine("info: HC-SR04 distance measure");
            Console.WriteLine("      Trigger: {0}", triggerPin);
            Console.WriteLine("      Echo: {0}", echoPin);

            var driver = GpioConnectionSettings.DefaultDriver;

            using (var connection = new HcSr04Connection(
                       driver.Out(triggerPin.ToProcessor()),
                       driver.In(echoPin.ToProcessor())))

                try
                {
                    distance = connection.GetDistance().Centimeters;
                    Console.WriteLine(string.Format("{0:0.0} cm", distance).PadRight(16));
                    //Console.CursorTop--;
                }
                catch (TimeoutException e)
                {
                    state = "Timeout: " + e.Message;
                }

            if (state == null)
            {
                state = string.Format("{0:0.0} cm", distance);
            }

            HeaterState hs = new HeaterState
            {
                Id    = zoneId,
                State = state
            };

            var hs_state = hs ?? default(HeaterState);

            return(new ObjectResult(hs_state));
        }
Example #6
0
        public void Collect(HeaterState heaterState, ControllerState controllerState)
        {
            var heater = heaterState.Heater;

            if (!heaterState.OutputState)
            {
                _counterAccumulator.Accumulate(new CounterAccumulatorInput
                {
                    HeaterId            = heater.HeaterId,
                    SecondsToAccumulate = (int)(DateTime.UtcNow - heaterState.LastCounterStart).TotalSeconds
                });
            }

            heaterState.LastCounterStart = DateTime.UtcNow;

            controllerState.InstantUsage = controllerState.HeaterIdToState
                                           .Values
                                           .GroupBy(x => x.Heater.UsageUnit)
                                           .ToDictionary(x => x.Key,
                                                         x => x.Where(h => h.OutputState)
                                                         .Sum(h => h.Heater.UsagePerHour));
        }
Example #7
0
 private bool StateShouldBeUpdated(HeaterState heater)
 {
     return(heater.OutputState != _powerOutputProvider.Provide(heater.Heater.DigitalOutput.ProtocolName)
            .GetState(heater.Heater.DigitalOutput.OutputDescriptor));
 }
        public void iterates_over_available_heaters(byte iteration, bool state1, bool state2, bool state3, bool state4)
        {
            // Arrange
            var heater1 = new Heater {
                HeaterId = 1, UsagePerHour = 0.9m
            };
            var heater2 = new Heater {
                HeaterId = 2, UsagePerHour = 0.9m
            };
            var heater3 = new Heater {
                HeaterId = 3, UsagePerHour = 0.9m
            };
            var heater4 = new Heater {
                HeaterId = 4, UsagePerHour = 0.9m
            };

            var heaterState1 = new HeaterState {
                Heater = heater1, OutputState = true
            };
            var heaterState2 = new HeaterState {
                Heater = heater2, OutputState = true
            };
            var heaterState3 = new HeaterState {
                Heater = heater3, OutputState = true
            };
            var heaterState4 = new HeaterState {
                Heater = heater4, OutputState = true
            };

            var powerZoneState = new PowerZoneState
            {
                NextIntervalOffset = iteration,
                PowerZone          = new PowerZone
                {
                    MaxUsage = 2.1m,
                    Heaters  = new List <Heater> {
                        heater1, heater2, heater3, heater4
                    }
                }
            };

            var controllerState = new ControllerState
            {
                HeaterIdToState = new Dictionary <int, HeaterState>
                {
                    [1] = heaterState1,
                    [2] = heaterState2,
                    [3] = heaterState3,
                    [4] = heaterState4
                }
            };

            // Act
            var powerZoneOutputAllowanceCalculator = new PowerZoneOutputLimiter();

            powerZoneOutputAllowanceCalculator.Limit(powerZoneState, controllerState);

            // Assert
            Assert.Equal(state1, heaterState1.OutputState);
            Assert.Equal(state2, heaterState2.OutputState);
            Assert.Equal(state3, heaterState3.OutputState);
            Assert.Equal(state4, heaterState4.OutputState);
        }