public MaxStateAnalyzer(IMaxConnector maxConnector, MaxMerger maxMerger) { _maxMerger = maxMerger; maxConnector.Connected += (sender, args) => _maxCube = new MaxCube(); maxConnector.MessageReceived += MaxConnector_MessageReceived; }
public void Merge(MaxCube maxCube, object message) { var lMessages = message as LMessages; if (lMessages == null) return; foreach (var lMessage in lMessages.Messages) { var maxDevice = maxCube.Rooms.SelectMany(room => room.Devices).FirstOrDefault(device => device.RfAddress == lMessage.RfAddress); if (maxDevice != null) { if (lMessage.DeviceType == MaxDeviceType.HeatingThermostat) { var lMessageHeatingThermostat = lMessage as LMessageHeatingThermostat; if (lMessageHeatingThermostat == null) continue; maxDevice.SetPointTemperature = lMessageHeatingThermostat.SetPointTemperature; maxDevice.RoomControlMode = lMessageHeatingThermostat.RoomControlMode; maxDevice.State = new DeviceState { BatteryLow = lMessageHeatingThermostat.IsBatteryLow, TransmitError = lMessageHeatingThermostat.IsTransmitError }; } } } }
public void Merge(MaxCube maxCube, object message) { var messageParser = _messageMergers.FirstOrDefault(merger => merger.Accept(message)); messageParser?.Merge(maxCube, message); }