예제 #1
0
        public Room(string uid, IEnumerable <string> neighbors, string lamp, IConcurrencyProvider concurrencyProvider, ILogger logger, IMessageBroker messageBroker,
                    AreaDescriptor areaDescriptor, MotionConfiguration motionConfiguration)
        {
            Uid                  = uid ?? throw new ArgumentNullException(nameof(uid));
            _neighbors           = neighbors ?? throw new ArgumentNullException(nameof(neighbors));
            _lamp                = lamp ?? throw new ArgumentNullException(nameof(lamp));
            _logger              = logger;
            _motionConfiguration = motionConfiguration;
            _concurrencyProvider = concurrencyProvider;
            _messageBroker       = messageBroker;
            _areaDescriptor      = areaDescriptor;

            if (areaDescriptor.WorkingTime == WorkingTime.DayLight)
            {
                _turnOnConditionsValidator.WithCondition(new IsDayCondition(_messageBroker));
            }
            else if (areaDescriptor.WorkingTime == WorkingTime.AfterDusk)
            {
                _turnOnConditionsValidator.WithCondition(new IsNightCondition(_messageBroker));
            }

            _turnOnConditionsValidator.WithCondition(new IsEnabledAutomationCondition(this));
            _turnOffConditionsValidator.WithCondition(new IsEnabledAutomationCondition(this));
            _turnOffConditionsValidator.WithCondition(new IsTurnOffAutomaionCondition(this));

            _TurnOffTimeOut = new Timeout(_areaDescriptor.TurnOffTimeout, _motionConfiguration.TurnOffPresenceFactor);
        }
예제 #2
0
        public Room(string uid, IEnumerable <string> neighbors, Component lamp, IDaylightService daylightService,
                    IConcurrencyProvider concurrencyProvider, ILogger logger,
                    AreaDescriptor areaDescriptor, MotionConfiguration motionConfiguration, IEnumerable <IEventDecoder> eventsDecoders)
        {
            Uid       = uid ?? throw new ArgumentNullException(nameof(uid));
            Neighbors = neighbors ?? throw new ArgumentNullException(nameof(neighbors));
            Lamp      = lamp ?? throw new ArgumentNullException(nameof(lamp));

            if (areaDescriptor.WorkingTime == WorkingTime.DayLight)
            {
                _turnOnConditionsValidator.WithCondition(ConditionRelation.And, new IsDayCondition(daylightService));
            }
            else if (areaDescriptor.WorkingTime == WorkingTime.AfterDusk)
            {
                _turnOnConditionsValidator.WithCondition(ConditionRelation.And, new IsNightCondition(daylightService));
            }

            _turnOnConditionsValidator.WithCondition(ConditionRelation.And, new IsEnabledAutomationCondition(this));
            _turnOffConditionsValidator.WithCondition(ConditionRelation.And, new IsEnabledAutomationCondition(this));
            _turnOffConditionsValidator.WithCondition(ConditionRelation.And, new IsTurnOffAutomaionCondition(this));

            _logger = logger;
            _motionConfiguration = motionConfiguration;
            _concurrencyProvider = concurrencyProvider;
            _eventsDecoders      = eventsDecoders;
            AreaDescriptor       = areaDescriptor;
            _TurnOffTimeOut      = new Timeout(AreaDescriptor.TurnOffTimeout, _motionConfiguration.TurnOffPresenceFactor);

            _eventsDecoders?.ForEach(decoder => decoder.Init(this));
        }
예제 #3
0
 public MachineMonitor(
     IConcurrencyProvider concurrencyProvider,
     ITemperatureSensor temperatureSensor, 
     IProximitySensor proximitySensor)
 {
     _concurrencyProvider = concurrencyProvider;
     _temperatureSensor = temperatureSensor;
     _proximitySensor = proximitySensor;
 }
예제 #4
0
 public MachineMonitor(
     IConcurrencyProvider concurrencyProvider,
     ITemperatureSensor temperatureSensor,
     IProximitySensor proximitySensor)
 {
     _concurrencyProvider = concurrencyProvider;
     _temperatureSensor   = temperatureSensor;
     _proximitySensor     = proximitySensor;
 }
예제 #5
0
        public void Start(IMessageBroker messageBroker, IConcurrencyProvider concurrencyProvider)
        {
            foreach (var eventDescription in EventDescriptors)
            {
                var attributes = eventDescription.Event.GetProperties().ToDictionary();
                _disposables.Add(messageBroker.SubscribeForEvent <Event>(EventHandler, new RoutingFilter(attributes)));
            }

            _disposables.Add(_eventStream.Timestamp()
                             .Buffer(_eventStream, _ => Observable.Timer(MaxMessageTime, concurrencyProvider.Scheduler))
                             .Subscribe(DecodeMessage)
                             );
        }
예제 #6
0
        public LightAutomationService(IEventAggregator eventAggregator,
                                      IDaylightService daylightService,
                                      ILogService logService,
                                      IConcurrencyProvider concurrencyProvider,
                                      IMotionConfigurationProvider motionConfigurationProvider,
                                      IObservableTimer observableTimer
                                      )
        {
            if (logService == null)
            {
                throw new ArgumentNullException(nameof(logService));
            }
            _logger              = logService.CreatePublisher(nameof(LightAutomationService));
            _eventAggregator     = eventAggregator ?? throw new ArgumentNullException(nameof(eventAggregator));
            _daylightService     = daylightService ?? throw new ArgumentNullException(nameof(daylightService));
            _concurrencyProvider = concurrencyProvider ?? throw new ArgumentNullException(nameof(concurrencyProvider));

            var configurationProvider = motionConfigurationProvider ?? throw new ArgumentNullException(nameof(motionConfigurationProvider));

            _motionConfiguration = configurationProvider.GetConfiguration();
            _observableTimer     = observableTimer;
        }
예제 #7
0
 protected LightAutomationService(IConcurrencyProvider concurrencyProvider, IObservableTimer observableTimer)
 {
     _concurrencyProvider = concurrencyProvider;
     _observableTimer     = observableTimer;
 }
 protected LightAutomationService(IConcurrencyProvider concurrencyProvider)
 {
     _concurrencyProvider = concurrencyProvider;
 }
예제 #9
0
 public Room ToRoom(MotionConfiguration config, IDaylightService daylightService, IConcurrencyProvider concurrencyProvider, ILogger logger)
 {
     return(new Room(MotionDetectorUid, Neighbors, Lamp, daylightService, concurrencyProvider, logger, AreaInitializer, config, EventDecoders));
 }