public bool GetState(object outputDescriptor) { var output = DescriptorHelper.CastHardwareDescriptorOrThrow <OutputDescriptor>(outputDescriptor); var registerAddress = WORK_MODE_ADDRESS + GetOffset(output.DriverAddress); var registerValue = _modbusTcp.ReadHoldingRegister(output.IpAddress, output.PortNumber, registerAddress); return(registerValue != 1); }
public Task <TemperatureSensorData> GetValue(object inputDescriptor) { var input = DescriptorHelper.CastHardwareDescriptorOrThrow <InputDescriptor>(inputDescriptor); var temperatureReadout = _modbusTcp.ReadInputRegister(input.IpAddress, input.PortNumber, GetOffset(input.DriverAddress) + input.InputRegisterAddress); return(Task.FromResult(new TemperatureSensorData { Value = temperatureReadout * input.ValueMultiplier + input.ValueOffset, CrcOk = temperatureReadout != 1024 && temperatureReadout != int.MinValue })); }
public bool GetState(object outputDescriptor) { var output = DescriptorHelper.CastHardwareDescriptorOrThrow <OutputDescriptor>(outputDescriptor); var channel = GetChannel(output.OutputName); var chipState = GetChipState(output.DeviceId); var bitToCheck = 1 << channel.Pin; return((chipState.BankToValue[channel.Bank] & bitToCheck) == bitToCheck); }
public bool GetState(object outputDescriptor) { var output = DescriptorHelper.CastHardwareDescriptorOrThrow <OutputDescriptor>(outputDescriptor); if (!OUTPUT_NAME_TO_CHANNEL.TryGetValue(output.OutputName, out var channel)) { throw new ArgumentException(nameof(output.OutputName)); } return(GetChannelState(output.DeviceId, channel)); }
public void SetState(object outputDescriptor, bool state) { var output = DescriptorHelper.CastHardwareDescriptorOrThrow <OutputDescriptor>(outputDescriptor); Logger.DebugWithData("New output state: ", new { output.DeviceId, output.OutputName, state }); if (!OUTPUT_NAME_TO_CHANNEL.TryGetValue(output.OutputName, out var channel)) { throw new ArgumentException(nameof(output.OutputName)); } SetChannelState(output.DeviceId, channel, state); }
public void SetState(object outputDescriptor, bool state) { var output = DescriptorHelper.CastHardwareDescriptorOrThrow <OutputDescriptor>(outputDescriptor); var bmsState = _modbusTcp.ReadHoldingRegister(output.IpAddress, output.PortNumber, BMS_MODE_ADDRESS); if (bmsState != BMS_WM_RAW) { _modbusTcp.WriteHoldingRegister(output.IpAddress, output.PortNumber, BMS_MODE_ADDRESS, BMS_WM_RAW); } var registerAddress = WORK_MODE_ADDRESS + GetOffset(output.DriverAddress); _modbusTcp.WriteHoldingRegister(output.IpAddress, output.PortNumber, registerAddress, state ? 2 : 1); }
public void SetState(object outputDescriptor, bool newState) { var output = DescriptorHelper.CastHardwareDescriptorOrThrow <OutputDescriptor>(outputDescriptor); Logger.DebugWithData("New output state: ", new { output.DeviceId, output.OutputName, newState }); var channel = GetChannel(output.OutputName); lock (_lock) { var chipState = GetChipState(output.DeviceId); if (!chipState.InitializedAsOutput) { _i2c.WriteToDevice(output.DeviceId, 0x00, 0x00); _i2c.WriteToDevice(output.DeviceId, 0x01, 0x00); chipState.InitializedAsOutput = true; } var bitToFlip = 1 << channel.Pin; var currentState = chipState.BankToValue[channel.Bank]; if (newState) { currentState |= bitToFlip; } else { currentState &= ~bitToFlip; } chipState.BankToValue[channel.Bank] = currentState; _i2c.WriteToDevice(output.DeviceId, (byte)channel.Bank, (byte)currentState); } }
public async Task <TemperatureSensorData> GetValue(object inputDescriptor) { var input = DescriptorHelper.CastHardwareDescriptorOrThrow <InputDescriptor>(inputDescriptor); if (SupportedDevicesPrefix.Any(input.DeviceId.StartsWith)) { var rawData = await _oneWire.GetDeviceData(input.DeviceId); var indexOfTemp = rawData.IndexOf("t=", StringComparison.Ordinal) + 2; if (indexOfTemp > 2) { var result = new TemperatureSensorData { CrcOk = rawData.Contains("YES") && !rawData.Contains("00 00 00 00 00 00 00 00 00") }; if (int.TryParse(rawData.Substring(indexOfTemp, rawData.Length - (indexOfTemp + 1)), out int temp)) { result.Value = temp / 1000d; } return(result); } else { Logger.Warning("No data."); } } else { Logger.Warning("Unsupported device."); } return(new TemperatureSensorData()); }