public void Update(IDeviceState state, bool fromDatabase = false) { //TODO: update more properties? if (!fromDatabase) { if (Name == null && state.Name != null) { Name = state.Name; } if ((Type == null || Type.Equals(DeviceType.Unknown)) && state.Type != null) { Type = state.Type; } } Location = (state.Location == null) ? null : new Location(state.Location.GetParts()); IsConnected = state.IsConnected; CurrentAction = state.CurrentAction; BinarySwitch.Update(state.BinarySwitchState ?? ReadOnlyBinarySwitchSwitchState.Blank()); MultilevelSwitch.Update(state.MultilevelSwitchState ?? ReadOnlyMultilevelSwitchState.Blank()); ColorSwitch.Update(state.ColorSwitchState ?? ReadOnlyColorSwitchState.Blank()); BinarySensor.Update(state.BinarySensorState ?? ReadOnlyBinarySensorState.Blank()); PowerSensor.Update(state.PowerSensorState ?? ReadOnlyMultilevelSensorState <IPower> .Blank()); TemperatureSensor.Update(state.TemperatureSensorState ?? ReadOnlyMultilevelSensorState <ITemperature> .Blank()); HumiditySensor.Update(state.HumiditySensorState ?? ReadOnlyMultilevelSensorState <IHumidity> .Blank()); IlluminanceSensor.Update(state.IlluminanceSensorState ?? ReadOnlyMultilevelSensorState <IIlluminance> .Blank()); Thermostat.Update(state.ThermostatState ?? ReadOnlyThermostatState.Blank()); }
/// <summary> /// Add a new binary sensor /// </summary> public IBinarySensor AddNewBinarySensor() { var item = new BinarySensor(); Add(item); return(item); }
/// <summary> /// Identifies the class/type of the device and returns it. /// </summary> /// <param name="plantTag">Plant tag</param> /// <param name="module">Name of the module in plant</param> /// <param name="istIds">Mapping of opc ua node id's</param> /// <returns></returns> public Device Validator(string plantTag, string module, IstOPCUANodeIds istIds) { Device local; switch (plantTag[0].ToString()) { case "P": switch (plantTag) { case "PIC": local = new Device(plantTag); break; case "PROP_V": local = new Device(plantTag); break; default: local = new Pump(plantTag); break; } break; case "V": // Valve modeld in opc ua if (istIds.TagToNodeId[module].ContainsKey(plantTag)) { // RelayValve if (istIds.TagToNodeId[module][plantTag].Core.Contains("#")) { local = new RelayValve(plantTag); } else // Normal valve { local = new Valve(plantTag); } } else // only modeld in Linked Data // Handventil. Achtung codedopplung. { local = new HandValve(plantTag); } break; case "F": // TODO: Fix device typ local = new Device(plantTag); break; case "L": // TODO: NIcht eindeutig ob binär oder linear local = new BinarySensor(plantTag); break; case "R": local = new Mixer(plantTag); break; case "T": local = new TemperatureSensor(plantTag); break; case "B": local = new Tank(plantTag); break; case "W": // Spechial case: WT if (plantTag [1].ToString() == "T") { local = new DeviceGUI(plantTag); } else { local = new Device(plantTag); } break; default: local = new Device(plantTag); break; } return(local); }