[NF] PowerSensor und GraphTracing funktioniert nun
This commit is contained in:
parent
452db11a92
commit
0fe7c5067f
@ -58,6 +58,8 @@
|
||||
</Compile>
|
||||
<Compile Include="Program.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="Sensor\ASensor.cs" />
|
||||
<Compile Include="Sensor\Power.cs" />
|
||||
<Compile Include="Tracings\ATracings.cs" />
|
||||
<Compile Include="Tracings\Graph.cs" />
|
||||
<EmbeddedResource Include="Form1.resx">
|
||||
@ -96,5 +98,6 @@
|
||||
<Name>Utils</Name>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<ItemGroup />
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
</Project>
|
65
Mqtt-Dashboard/Form1.Designer.cs
generated
65
Mqtt-Dashboard/Form1.Designer.cs
generated
@ -23,16 +23,15 @@
|
||||
/// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden.
|
||||
/// </summary>
|
||||
private void InitializeComponent() {
|
||||
System.Windows.Forms.DataVisualization.Charting.ChartArea chartArea2 = new System.Windows.Forms.DataVisualization.Charting.ChartArea();
|
||||
System.Windows.Forms.DataVisualization.Charting.Legend legend2 = new System.Windows.Forms.DataVisualization.Charting.Legend();
|
||||
System.Windows.Forms.DataVisualization.Charting.Series series2 = new System.Windows.Forms.DataVisualization.Charting.Series();
|
||||
System.Windows.Forms.DataVisualization.Charting.ChartArea chartArea1 = new System.Windows.Forms.DataVisualization.Charting.ChartArea();
|
||||
System.Windows.Forms.DataVisualization.Charting.Series series1 = new System.Windows.Forms.DataVisualization.Charting.Series();
|
||||
System.Windows.Forms.DataVisualization.Charting.DataPoint dataPoint1 = new System.Windows.Forms.DataVisualization.Charting.DataPoint(42955.833344907405D, 10D);
|
||||
System.Windows.Forms.DataVisualization.Charting.DataPoint dataPoint2 = new System.Windows.Forms.DataVisualization.Charting.DataPoint(42955D, 2D);
|
||||
this.statusStrip1 = new System.Windows.Forms.StatusStrip();
|
||||
this.chart1 = new System.Windows.Forms.DataVisualization.Charting.Chart();
|
||||
this.panel1 = new System.Windows.Forms.Panel();
|
||||
this.flowLayoutPanel2 = new System.Windows.Forms.FlowLayoutPanel();
|
||||
((System.ComponentModel.ISupportInitialize)(this.chart1)).BeginInit();
|
||||
this.panel1.SuspendLayout();
|
||||
this.chart1 = new System.Windows.Forms.DataVisualization.Charting.Chart();
|
||||
this.flowLayoutPanel2.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.chart1)).BeginInit();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// statusStrip1
|
||||
@ -43,39 +42,33 @@
|
||||
this.statusStrip1.TabIndex = 0;
|
||||
this.statusStrip1.Text = "statusStrip1";
|
||||
//
|
||||
// chart1
|
||||
//
|
||||
chartArea2.Name = "ChartArea1";
|
||||
this.chart1.ChartAreas.Add(chartArea2);
|
||||
legend2.Name = "Legend1";
|
||||
this.chart1.Legends.Add(legend2);
|
||||
this.chart1.Location = new System.Drawing.Point(3, 3);
|
||||
this.chart1.Name = "chart1";
|
||||
series2.ChartArea = "ChartArea1";
|
||||
series2.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line;
|
||||
series2.Legend = "Legend1";
|
||||
series2.Name = "Series1";
|
||||
this.chart1.Series.Add(series2);
|
||||
this.chart1.Size = new System.Drawing.Size(183, 136);
|
||||
this.chart1.TabIndex = 1;
|
||||
this.chart1.Text = "chart1";
|
||||
//
|
||||
// panel1
|
||||
//
|
||||
this.panel1.Controls.Add(this.chart1);
|
||||
this.panel1.Location = new System.Drawing.Point(3, 3);
|
||||
this.panel1.Name = "panel1";
|
||||
this.panel1.Size = new System.Drawing.Size(201, 155);
|
||||
this.panel1.TabIndex = 2;
|
||||
//
|
||||
// flowLayoutPanel2
|
||||
//
|
||||
this.flowLayoutPanel2.Controls.Add(this.panel1);
|
||||
this.flowLayoutPanel2.Controls.Add(this.chart1);
|
||||
this.flowLayoutPanel2.Location = new System.Drawing.Point(12, 12);
|
||||
this.flowLayoutPanel2.Name = "flowLayoutPanel2";
|
||||
this.flowLayoutPanel2.Size = new System.Drawing.Size(819, 289);
|
||||
this.flowLayoutPanel2.TabIndex = 3;
|
||||
//
|
||||
// chart1
|
||||
//
|
||||
chartArea1.AxisX.LabelStyle.Enabled = false;
|
||||
chartArea1.Name = "ChartArea1";
|
||||
this.chart1.ChartAreas.Add(chartArea1);
|
||||
this.chart1.Location = new System.Drawing.Point(3, 3);
|
||||
this.chart1.Name = "chart1";
|
||||
series1.ChartArea = "ChartArea1";
|
||||
series1.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line;
|
||||
series1.Name = "Series1";
|
||||
series1.Points.Add(dataPoint1);
|
||||
series1.Points.Add(dataPoint2);
|
||||
series1.XValueType = System.Windows.Forms.DataVisualization.Charting.ChartValueType.DateTime;
|
||||
series1.YValueType = System.Windows.Forms.DataVisualization.Charting.ChartValueType.Single;
|
||||
this.chart1.Series.Add(series1);
|
||||
this.chart1.Size = new System.Drawing.Size(101, 66);
|
||||
this.chart1.TabIndex = 0;
|
||||
this.chart1.Text = "chart1";
|
||||
//
|
||||
// Dashboard
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||
@ -85,9 +78,8 @@
|
||||
this.Controls.Add(this.statusStrip1);
|
||||
this.Name = "Dashboard";
|
||||
this.Text = "Dashboard";
|
||||
((System.ComponentModel.ISupportInitialize)(this.chart1)).EndInit();
|
||||
this.panel1.ResumeLayout(false);
|
||||
this.flowLayoutPanel2.ResumeLayout(false);
|
||||
((System.ComponentModel.ISupportInitialize)(this.chart1)).EndInit();
|
||||
this.ResumeLayout(false);
|
||||
this.PerformLayout();
|
||||
|
||||
@ -96,9 +88,8 @@
|
||||
#endregion
|
||||
|
||||
private System.Windows.Forms.StatusStrip statusStrip1;
|
||||
private System.Windows.Forms.DataVisualization.Charting.Chart chart1;
|
||||
private System.Windows.Forms.Panel panel1;
|
||||
private System.Windows.Forms.FlowLayoutPanel flowLayoutPanel2;
|
||||
private System.Windows.Forms.DataVisualization.Charting.Chart chart1;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,11 +1,5 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Data;
|
||||
using System.Drawing;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
using Dashboard.Connector;
|
||||
using Dashboard.Sensor;
|
||||
@ -16,20 +10,33 @@ namespace Dashboard {
|
||||
public Dashboard() {
|
||||
InitializeComponent();
|
||||
Mqtt.Instance.Connect();
|
||||
ATracings g = new Graph();
|
||||
ASensor s = new Power();
|
||||
s.SetMqttTopic("zway/wohnzimmer/thinkpad/power");
|
||||
Mqtt.Instance.MessageIncomming += s.IncommingMqttMessage;
|
||||
g.SetSensor(s);
|
||||
this.flowLayoutPanel2.Controls.Add(g.GetTracing());
|
||||
this.chart1.ChartAreas[0].AxisX.Maximum = 100;
|
||||
|
||||
ATracings g1 = new Graph();
|
||||
ASensor s1 = new Power();
|
||||
s1.SetMqttTopic("zway/wohnzimmer/thinkpad/power");
|
||||
Mqtt.Instance.MessageIncomming += s1.IncommingMqttMessage;
|
||||
g1.SetSensor(s1);
|
||||
this.flowLayoutPanel2.Controls.Add(g1.GetTracing());
|
||||
|
||||
ATracings g2 = new Graph();
|
||||
ASensor s2 = new Power();
|
||||
s2.SetMqttTopic("zway/wohnzimmer/tV/power");
|
||||
Mqtt.Instance.MessageIncomming += s2.IncommingMqttMessage;
|
||||
g2.SetSensor(s2);
|
||||
this.flowLayoutPanel2.Controls.Add(g2.GetTracing());
|
||||
|
||||
ATracings g3 = new Graph();
|
||||
ASensor s3 = new Power();
|
||||
s3.SetMqttTopic("zway/küche/kuehlschrank/power");
|
||||
Mqtt.Instance.MessageIncomming += s3.IncommingMqttMessage;
|
||||
g3.SetSensor(s3);
|
||||
this.flowLayoutPanel2.Controls.Add(g3.GetTracing());
|
||||
|
||||
Mqtt.Instance.MessageIncomming += this.Instance_MessageIncomming;
|
||||
}
|
||||
|
||||
private void Instance_MessageIncomming(Object sender, uPLibrary.Networking.M2Mqtt.Messages.MqttMsgPublishEventArgs e) {
|
||||
if(e.Topic == "zway/wohnzimmer/thinkpad/power") {
|
||||
|
||||
}
|
||||
System.Diagnostics.Debug.WriteLine("Received = " + Encoding.UTF8.GetString(e.Message) + " on topic " + e.Topic);
|
||||
System.Diagnostics.Debug.WriteLine("Received = " + Encoding.UTF8.GetString(e.Message) + " on topic " + e.Topic+" at "+DateTime.Now.ToUniversalTime());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -4,15 +4,28 @@ using uPLibrary.Networking.M2Mqtt.Messages;
|
||||
namespace Dashboard.Sensor {
|
||||
public abstract class ASensor {
|
||||
private String topic;
|
||||
|
||||
public enum Types {
|
||||
Bool,
|
||||
Int,
|
||||
Float
|
||||
}
|
||||
public void SetMqttTopic(String topic) {
|
||||
this.topic = topic;
|
||||
}
|
||||
public delegate void UpdatedValue(Object sender, EventArgs e);
|
||||
public event UpdatedValue Update;
|
||||
internal abstract void IncommingMqttMessage(Object sender, MqttMsgPublishEventArgs e);
|
||||
public abstract Int32 GetInt();
|
||||
public abstract Single GetFloat();
|
||||
public abstract Boolean GetBool();
|
||||
internal void IncommingMqttMessage(Object sender, MqttMsgPublishEventArgs e) {
|
||||
if(e.Topic == this.topic) {
|
||||
this.UpdateValue(e);
|
||||
this.Timestamp = DateTime.Now;
|
||||
this.Update?.Invoke(this, e);
|
||||
}
|
||||
}
|
||||
protected abstract void UpdateValue(MqttMsgPublishEventArgs e);
|
||||
public Int32 GetInt { get; protected set; }
|
||||
public Single GetFloat { get; protected set; }
|
||||
public Boolean GetBool { get; protected set; }
|
||||
public Types Datatypes { get; protected set; }
|
||||
public DateTime Timestamp { get; protected set; }
|
||||
}
|
||||
}
|
@ -1,10 +1,19 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Globalization;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using uPLibrary.Networking.M2Mqtt.Messages;
|
||||
|
||||
namespace Dashboard.Sensor {
|
||||
class Power : ASensor {
|
||||
public Power() {
|
||||
this.GetBool = true;
|
||||
this.GetFloat = 0.0f;
|
||||
this.GetInt = 0;
|
||||
this.Datatypes = Types.Float;
|
||||
}
|
||||
|
||||
protected override void UpdateValue(MqttMsgPublishEventArgs e) {
|
||||
this.GetFloat = Single.Parse(Encoding.UTF8.GetString(e.Message), new CultureInfo("en-US"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -4,9 +4,7 @@ using Dashboard.Sensor;
|
||||
|
||||
namespace Dashboard.Tracings {
|
||||
public abstract class ATracings {
|
||||
private ASensor sensor;
|
||||
public abstract Int32 ElementWidth { get; }
|
||||
public abstract Int32 ElementHeight { get; }
|
||||
protected ASensor sensor;
|
||||
public void SetSensor(ASensor sensor) {
|
||||
this.sensor = sensor;
|
||||
this.sensor.Update += this.SensorUpdate;
|
||||
|
@ -1,10 +1,54 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
using System.Windows.Forms.DataVisualization.Charting;
|
||||
|
||||
namespace Dashboard.Tracings {
|
||||
class Graph : ATracings {
|
||||
private Series series;
|
||||
private Chart chart;
|
||||
|
||||
public override Panel GetTracing() {
|
||||
Panel panel = new Panel();
|
||||
|
||||
this.chart = new Chart();
|
||||
((System.ComponentModel.ISupportInitialize)(this.chart)).BeginInit();
|
||||
ChartArea chartArea = new ChartArea();
|
||||
chartArea.AxisX.LabelStyle.Enabled = false;
|
||||
this.chart.ChartAreas.Add(chartArea);
|
||||
this.series = new Series() {
|
||||
ChartType = SeriesChartType.Line,
|
||||
XValueType = ChartValueType.DateTime
|
||||
};
|
||||
if (this.sensor.Datatypes == Sensor.ASensor.Types.Bool) {
|
||||
this.series.YValueType = ChartValueType.Int32;
|
||||
} else if (this.sensor.Datatypes == Sensor.ASensor.Types.Int) {
|
||||
this.series.YValueType = ChartValueType.Int32;
|
||||
} else if (this.sensor.Datatypes == Sensor.ASensor.Types.Float) {
|
||||
this.series.YValueType = ChartValueType.Single;
|
||||
}
|
||||
this.chart.Series.Add(this.series);
|
||||
this.chart.Location = new System.Drawing.Point(0, 0);
|
||||
this.chart.Size = new System.Drawing.Size(200, 100);
|
||||
panel.Controls.Add(this.chart);
|
||||
((System.ComponentModel.ISupportInitialize)(this.chart)).EndInit();
|
||||
|
||||
panel.Size = new System.Drawing.Size(200, 100);
|
||||
panel.ResumeLayout(false);
|
||||
return panel;
|
||||
}
|
||||
|
||||
protected override void SensorUpdate(Object sender, EventArgs e) {
|
||||
this.chart.BeginInvoke((MethodInvoker)delegate {
|
||||
if (this.sensor.Datatypes == Sensor.ASensor.Types.Bool) {
|
||||
this.series.Points.AddXY(this.sensor.Timestamp, (this.sensor.GetBool) ? 1 : 0);
|
||||
}
|
||||
if (this.sensor.Datatypes == Sensor.ASensor.Types.Int) {
|
||||
this.series.Points.AddXY(this.sensor.Timestamp, this.sensor.GetInt);
|
||||
}
|
||||
if (this.sensor.Datatypes == Sensor.ASensor.Types.Float) {
|
||||
this.series.Points.AddXY(this.sensor.Timestamp, this.sensor.GetFloat);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user