Neuron®
The Neuron® is the basis for the creation of open and secure federated networks for smart societies.
Loading...
Searching...
No Matches
DateTimeData.cs
1using System;
2using System.Text;
3using System.Threading.Tasks;
11
13{
17 public class DateTimeData : MqttData
18 {
19 private DateTime value;
20
24 public DateTimeData()
25 : base()
26 {
27 }
28
34 public DateTimeData(MqttTopic Topic, DateTime Value)
35 : base(Topic)
36 {
37 this.value = Value;
38 }
39
46 public override Task<DataProcessingResult> DataReported(MqttTopic Topic, MqttContent Content)
47 {
48 if (DateTime.TryParse(Content.DataString, out DateTime Value) || XML.TryParse(Content.DataString, out Value))
49 {
50 this.value = Value;
51 this.Timestamp = DateTime.UtcNow;
52 this.QoS = Content.Header.QualityOfService;
53 this.Retain = Content.Header.Retain;
54
55 return Task.FromResult(DataProcessingResult.ProcessedNewMomentaryValues);
56 }
57 else
58 return Task.FromResult(DataProcessingResult.Incompatible);
59 }
60
64 public override Task<string> GetTypeName(Language Language)
65 {
66 return Language.GetStringAsync(typeof(MqttTopicNode), 33, "Date and Time");
67 }
68
76 public override Task StartReadout(ThingReference ThingReference, ISensorReadout Request, string Prefix, bool Last)
77 {
78 if (this.value.TimeOfDay == TimeSpan.Zero)
79 {
80 Request.ReportFields(Last, new DateField(ThingReference, this.Timestamp, this.Append(Prefix, "Value"),
81 this.value, FieldType.Momentary, FieldQoS.AutomaticReadout));
82 }
83 else
84 {
85 Request.ReportFields(Last, new DateTimeField(ThingReference, this.Timestamp, this.Append(Prefix, "Value"),
86 this.value, FieldType.Momentary, FieldQoS.AutomaticReadout));
87 }
88
89 return Task.CompletedTask;
90 }
91
95 public override bool IsControllable => true;
96
101 {
102 return new ControlParameter[]
103 {
104 new DateTimeControlParameter("Value", "Publish", "Value:", "Date & time value of topic.", null, null,
105 (n) => Task.FromResult<DateTime?>(this.value),
106 (n, v) =>
107 {
108 this.value = v;
109 this.Topic.MqttClient.PUBLISH(this.Topic.FullTopic, this.QoS, this.Retain, Encoding.UTF8.GetBytes(v.ToString()));
110 return Task.CompletedTask;
111 })
112 };
113 }
114
118 public override void SnifferOutput(ICommunicationLayer Output)
119 {
120 this.Information(Output, this.value.ToString());
121 }
122
126 public override Grade DefaultSupport => Grade.Perfect;
127
135 {
136 IMqttData Result = new DateTimeData(Topic, default);
137 Result.DataReported(Topic, Content);
138 return Result;
139 }
140 }
141}
Helps with common XML-related tasks.
Definition: XML.cs:19
static bool TryParse(string s, out DateTime Value)
Tries to decode a string encoded DateTime.
Definition: XML.cs:744
Information about content received from the MQTT server.
Definition: MqttContent.cs:9
string DataString
String representation of UTF-8 encoded binary data.
Definition: MqttContent.cs:56
MqttHeader Header
MQTT Header
Definition: MqttContent.cs:35
Contains information about a language.
Definition: Language.cs:17
Task< string > GetStringAsync(Type Type, int Id, string Default)
Gets the string value of a string ID. If no such string exists, a string is created with the default ...
Definition: Language.cs:209
Abstract base class for control parameters.
Represents an MQTT topic with Date & Time data.
Definition: DateTimeData.cs:18
override Task< DataProcessingResult > DataReported(MqttTopic Topic, MqttContent Content)
Called when new data has been published.
Definition: DateTimeData.cs:46
DateTimeData()
Represents an MQTT topic with Date & Time data.
Definition: DateTimeData.cs:24
override Grade DefaultSupport
Default support.
override IMqttData CreateNew(MqttTopic Topic, MqttContent Content)
Creates a new instance of the data.
DateTimeData(MqttTopic Topic, DateTime Value)
Represents an MQTT topic with Date & Time data.
Definition: DateTimeData.cs:34
override Task< string > GetTypeName(Language Language)
Type name representing data.
Definition: DateTimeData.cs:64
override void SnifferOutput(ICommunicationLayer Output)
Outputs the parsed data to the sniffer.
override Task StartReadout(ThingReference ThingReference, ISensorReadout Request, string Prefix, bool Last)
Starts a readout of the data.
Definition: DateTimeData.cs:76
override ControlParameter[] GetControlParameters()
TODO
Abstract base class for MQTT data encapsulations.
Definition: MqttData.cs:18
void Information(ICommunicationLayer Output, string Info)
Outputs information to sniffer.
Definition: MqttData.cs:91
DateTime Timestamp
Timestamp of data reception.
Definition: MqttData.cs:39
string Append(string Prefix, string Name)
Appends a name to a topic name.
Definition: MqttData.cs:100
MQTT Topic information.
Definition: MqttTopic.cs:19
A Metering node representing an MQTT topic
Represents a date value.
Definition: DateField.cs:11
Represents a date and optional time value.
Contains a reference to a thing
Interface for observable classes implementing communication protocols.
Interface for classes managing sensor data readouts.
Task ReportFields(bool Done, params Field[] Fields)
Report read fields to the client.
Interface for MQTT Data encapsulations
Definition: IMqttData.cs:38
Task< DataProcessingResult > DataReported(MqttTopic Topic, MqttContent Content)
Called when new data has been published.
Grade
Grade enumeration
Definition: Grade.cs:7
DataProcessingResult
Results from processing an incoming message.
Definition: IMqttData.cs:17
FieldQoS
Field Quality of Service flags
Definition: FieldQoS.cs:10
FieldType
Field Type flags
Definition: FieldType.cs:10
MqttQualityOfService QualityOfService
Quality of Service level.
Definition: MqttHeader.cs:16