public async Task Run( [EdgeHubTrigger("opc")] Message message, [EdgeHub(OutputName = "dtdl")] IAsyncCollector <Message> output, ILogger logger ) { byte[] messageBytes = message.GetBytes(); logger.LogInformation($"OPC-UA Message Recieved: {Encoding.UTF8.GetString(messageBytes)}"); var opcMessages = new OpcMessage[] { }; try { opcMessages = JsonConvert.DeserializeObject <OpcMessage[]>(Encoding.UTF8.GetString(messageBytes)); } catch (Exception e) { logger.LogInformation($"Failed to deserialize opc message as an array. Exception: {e}"); logger.LogInformation($"Attempting single instance deserialization"); opcMessages[0] = JsonConvert.DeserializeObject <OpcMessage>(Encoding.UTF8.GetString(messageBytes)); } var dtdlMessages = BuildDtdlMessage(opcMessages); for (int i = 0; i < dtdlMessages.Length; i++) { var messageString = JsonConvert.SerializeObject(dtdlMessages[i]); var outputMessageString = Encoding.UTF8.GetBytes(messageString); var outputMessage = new Message(outputMessageString); await output.AddAsync(outputMessage); } }
private static async Task <MessageResponse> ProcessOPCInput(Message message, object userContext) { Console.WriteLine("Processing OPC input"); var counterValue = Interlocked.Increment(ref counter); try { ModuleClient deviceClient = (ModuleClient)userContext; var opcMessage = new OpcMessage(message); List <DynoCard> cards = new List <DynoCard>(); if (opcMessage != null) { // var dynoCard = await opcMessage.ToDynoCard(); // if (dynoCard.SurfaceCard != null && dynoCard.PumpCard != null) // { // cards.Add(dynoCard); // Console.WriteLine("Parsing OPC dyno card values."); // } } foreach (var card in cards) { string json = JsonConvert.SerializeObject(card); //System.Console.WriteLine(json); int cardID = await(new DataHelper()).PersistDynoCard(card); if (cardID > 0) { card.Id = cardID; var dynoCardMessage = card.ToDeviceMessage(); await deviceClient.SendEventAsync("output1", dynoCardMessage); } } // Indicate that the message treatment is completed return(MessageResponse.Completed); } catch (AggregateException ex) { foreach (Exception exception in ex.InnerExceptions) { Console.WriteLine(); Console.WriteLine("Error in OPC input: {0}", exception); } return(MessageResponse.Completed); } catch (Exception ex) { Console.WriteLine(); Console.WriteLine("Error in OPC input: {0}", ex.Message); return(MessageResponse.Completed); } }
private static void HandleMessageReceived(object sender, OpcMessage message) { Log.DebugFormat("Handling message received {0}", message); if (message.Command == OpcCommandType.SetPixels) { // render no more data than we can (pixel count) for (int i = 0; i < _renderer.PixelCount; i++) { var r = message.Data[i * 3]; var g = message.Data[i * 3 + 1]; var b = message.Data[i * 3 + 2]; _renderer.SetPixelColor(i, r, g, b); } _renderer.Show(); } }
/// <summary> /// Creates a dyanmic object in the appropraite DTDL format /// </summary> /// <param name="opcMessage">The OPC-UA message to convert</param> private dynamic BuildDtdlMessage(OpcMessage opcMessage) { dynamic dtdlMessage = new ExpandoObject(); var dict = (IDictionary <string, object>)dtdlMessage; dict.Add("NodeId", ParseNodeId(opcMessage.NodeId)); if (string.IsNullOrEmpty(opcMessage.ApplicationUri)) { dict.Add("ApplicationUri", _Options.DefaultApplicationUri); } else { dict.Add("ApplicationUri", ParseApplicationUri(opcMessage.ApplicationUri)); } dict.Add("Status", opcMessage.Status); dict.Add("SourceTimestamp", opcMessage.Value.SourceTimestamp); dict.Add(opcMessage.DisplayName, opcMessage.Value.Value); return(dtdlMessage); }
private static void HandleMessageReceived(OpcMessage message) { Console.WriteLine(message.ToString(12)); }