public async Task <IActionResult> pcs_localremote(int siteid, int deviceindex, ushort localremote) { if (IsControlOk(siteid) == false) { return(BadRequest()); } ModbusControlModel model = CreateModel <ModbusControlModel>(siteid, 0, deviceindex); if (localremote == 0) { model.commandcode = ModbusCommandCodes.LOCAL_MODE; } else { model.commandcode = ModbusCommandCodes.REMOTE_MODE; } string topic = $"hubbub/{siteid}/{0}/{deviceindex}/control"; JObject obj = JObject.FromObject(model); await mqttPusher.PushAsync(obj, topic, 2); //if(model.LocalRemote == true) //{ // await Task.Delay(3); // model = CreateModel<PcsControlModel>(siteid, 0, deviceindex); //} return(Ok()); }
private MqttApplicationMessage ConvertControlMessage(ModbusControlModel model) { DUT_MQTT_MANUALCOMMAND mc = new DUT_MQTT_MANUALCOMMAND(); mc.Header = new DUT_MQTT_COMMON_HEADER(); mc.Header.Quality = 1; mc.Header.Category = PmsCategoryTypes.MANUALCOMMAND; mc.Header.PmsIndex = 1; mc.Header.Timestamp = DateTime.Now.ToFileTime(); mc.SequenceNumber = 1; mc.Device = 2; mc.SetUpFlag = 1; mc.UserName = model.userid; //mc.ReferenceValue = Convert.ToUInt32(model.commandvalue.Value); mc.Command = ParseCommandCode(model.commandcode, mc.ReferenceValue); if (model.commandvalue.HasValue) { mc.ReferenceValue = Convert.ToUInt32(Math.Abs(model.commandvalue.Value)); } mc.DeviceIndex = (uint)model.deviceindex; string topic = Environment.GetEnvironmentVariable(ENV_PMS_CONTROL_TOPIC); byte[] packet = PacketParser.SturctToByte(mc); return(new MqttApplicationMessageBuilder(). WithExactlyOnceQoS().WithTopic(topic).WithPayload(packet).Build()); }
public async Task PublishAsync(CancellationToken token, int PcsNo, ushort Address, params ushort[] values) { ModbusControlModel model = new ModbusControlModel(); model.StartAddress = Address; model.WriteValues = values; string message = JsonConvert.SerializeObject(model); this.DeviceIndex = PcsNo; _logger.LogInformation($"[제어명령] TopicName:{GetMqttPublishTopicName()} PCS 대상: {PcsNo} 제어주소: {Address} 명령값: {string.Join(" ", values)}"); await base.PublishMessageAsync(message, token); }
public async Task <IActionResult> pcs_automode(int siteid, int deviceindex) { if (IsControlOk(siteid) == false) { return(BadRequest()); } ModbusControlModel model = CreateModel <ModbusControlModel>(siteid, 0, deviceindex); model.commandcode = ModbusCommandCodes.AUTO_MODE; string topic = $"hubbub/{siteid}/{0}/{deviceindex}/control"; JObject obj = JObject.FromObject(model); await mqttPusher.PushAsync(obj, topic, 2); return(Ok()); }
protected override async Task OnApplicationMessageReceived(string ClientId, string Topic, string ContentType, uint QosLevel, byte[] payload) { try { string msg = Encoding.UTF8.GetString(payload); ModbusControlModel model = JsonConvert.DeserializeObject <ModbusControlModel>(msg); globalStorage.ControlModelQueues.Enqueue(model); var logger = NLog.LogManager.GetLogger("control_logger"); logger.Info($"[{model.userid}] [DeviceIndex:{model.deviceindex}] {model.commandcode} REF:{model.commandvalue}"); } catch (Exception ex) { logger.LogError(ex, ex.Message); } //throw new NotImplementedException(); }
public async Task <IActionResult> pcs_soclower(int siteid, int deviceindex, float soclower) { if (IsControlOk(siteid) == false) { return(BadRequest()); } ModbusControlModel model = CreateModel <ModbusControlModel>(siteid, 0, deviceindex); model.commandcode = ModbusCommandCodes.LIMIT_SOC_MIN; model.commandvalue = soclower; string topic = $"hubbub/{siteid}/{0}/{deviceindex}/control"; JObject obj = JObject.FromObject(model); await mqttPusher.PushAsync(obj, topic, 2); return(Ok()); }
protected override async Task OnApplicationMessageReceived(string ClientId, string Topic, string ContentType, uint QosLevel, byte[] payload) { try { if (Topic.StartsWith("site")) { DUT_MQTT_COMMON_HEADER header = PacketParser.ByteToStruct <DUT_MQTT_COMMON_HEADER>(payload); switch (header.Category) { case PmsCategoryTypes.ESS: DUT_MQTT_ESS ess = PacketParser.ByteToStruct <DUT_MQTT_ESS>(payload); ModelConverter.DataProcessing(ess, _queues); ModelConverter.EventProcessing(this, ess); break; case PmsCategoryTypes.TEMPERATUREANDHUMIDITY: DUT_MQTT_TEMPHUMIDITY temp = PacketParser.ByteToStruct <DUT_MQTT_TEMPHUMIDITY>(payload); ModelConverter.DataProcessing(temp, _queues); break; } } else if (Topic.EndsWith("control")) { string msg = Encoding.UTF8.GetString(payload); ModbusControlModel model = JsonConvert.DeserializeObject <ModbusControlModel>(msg); MqttApplicationMessage mqtt_msg = ConvertControlMessage(model); await MqttClient.PublishAsync(mqtt_msg); var logger = NLog.LogManager.GetLogger("control_logger"); logger.Info($"[{model.userid}] [DeviceIndex:{model.deviceindex}] {model.commandcode} REF:{model.commandvalue}"); } //if(ModelConverter.TryConvertPcs(ess, DateTime.Now, out MqttApplicationMessage[] pcs_messages, // out MqttApplicationMessage[] bat_messages)) //{ //} } catch (Exception ex) { logger.LogError(ex, ex.Message); } //throw new NotImplementedException(); }
protected override async Task OnMessageReceivedAsync(MqttApplicationMessageReceivedEventArgs e) { byte[] packet = e.ApplicationMessage.Payload; string txt = Encoding.UTF8.GetString(packet); try { ModbusControlModel data = JsonConvert.DeserializeObject <ModbusControlModel>(txt); bool IsSuccess = await modbusFactory.WriteMultipleRegistersAsync(CancelToken, data.StartAddress, data.WriteValues); if (IsSuccess) { logger.Info($"Control Success -> {txt}"); } else { logger.Warn($"Control Failed -> {txt}"); } } catch (Exception ex) { logger.Error(ex, ex.Message); } }