diff --git a/.idea/.idea.ShellyExporter/.idea/.gitignore b/.idea/.idea.ShellyExporter/.idea/.gitignore
new file mode 100644
index 0000000..ff9903a
--- /dev/null
+++ b/.idea/.idea.ShellyExporter/.idea/.gitignore
@@ -0,0 +1,13 @@
+# Default ignored files
+/shelf/
+/workspace.xml
+# Rider ignored files
+/.idea.ShellyExporter.iml
+/projectSettingsUpdater.xml
+/modules.xml
+/contentModel.xml
+# Editor-based HTTP Client requests
+/httpRequests/
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml
diff --git a/.idea/.idea.ShellyExporter/.idea/encodings.xml b/.idea/.idea.ShellyExporter/.idea/encodings.xml
new file mode 100644
index 0000000..df87cf9
--- /dev/null
+++ b/.idea/.idea.ShellyExporter/.idea/encodings.xml
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/.idea/.idea.ShellyExporter/.idea/indexLayout.xml b/.idea/.idea.ShellyExporter/.idea/indexLayout.xml
new file mode 100644
index 0000000..7b08163
--- /dev/null
+++ b/.idea/.idea.ShellyExporter/.idea/indexLayout.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/.idea.ShellyExporter/.idea/vcs.xml b/.idea/.idea.ShellyExporter/.idea/vcs.xml
new file mode 100644
index 0000000..94a25f7
--- /dev/null
+++ b/.idea/.idea.ShellyExporter/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ShellyExporter/Metrics.cs b/ShellyExporter/Metrics.cs
index eb0fc0b..ff1758f 100644
--- a/ShellyExporter/Metrics.cs
+++ b/ShellyExporter/Metrics.cs
@@ -27,6 +27,31 @@ namespace ShellyExporter
public string? Temperature { get; set; }
public string? Voltage { get; set; }
public string? Current { get; set; }
+
+ public string? Emeters1Power { get; set; }
+ public string? Emeters1Pf { get; set; }
+ public string? Emeters1Current { get; set; }
+ public string? Emeters1Voltage { get; set; }
+ public bool? Emeters1IsValid { get; set; }
+ public string? Emeters1Total { get; set; }
+ public string? Emeters1TotalReturned { get; set; }
+
+ public string? Emeters2Power { get; set; }
+ public string? Emeters2Pf { get; set; }
+ public string? Emeters2Current { get; set; }
+ public string? Emeters2Voltage { get; set; }
+ public bool? Emeters2IsValid { get; set; }
+ public string? Emeters2Total { get; set; }
+ public string? Emeters2TotalReturned { get; set; }
+
+ public string? Emeters3Power { get; set; }
+ public string? Emeters3Pf { get; set; }
+ public string? Emeters3Current { get; set; }
+ public string? Emeters3Voltage { get; set; }
+ public bool? Emeters3IsValid { get; set; }
+ public string? Emeters3Total { get; set; }
+ public string? Emeters3TotalReturned { get; set; }
+
}
public static async Task Get(string path, string name, Version shellyVersion, Type type)
@@ -49,20 +74,16 @@ namespace ShellyExporter
throw new ArgumentOutOfRangeException(nameof(shellyVersion), shellyVersion, null);
}
break;
- //TODO
- // case Type.Em3:
- // switch (shellyVersion)
- // {
- // case Version.Gen1:
- // data = await GetPlugSGen1(path);
- // break;
- // case Version.Gen2:
- // data = await GetPlugSGen1(path);
- // break;
- // default:
- // throw new ArgumentOutOfRangeException();
- // }
- // break;
+ case Type.Em3:
+ switch (shellyVersion)
+ {
+ case Version.Gen1:
+ data = await Get3EmGen1(path);
+ break;
+ default:
+ throw new ArgumentOutOfRangeException();
+ }
+ break;
default:
throw new ArgumentOutOfRangeException(nameof(type), type, null);
}
@@ -85,6 +106,51 @@ namespace ShellyExporter
if (data.Temperature != null)
sb.AppendLine($"temperature{{item=\"{name}\"}} " + data.Temperature);
+ if (data.Emeters1Power != null)
+ sb.AppendLine($"emeters_1_power{{item=\"{name}\"}} " + data.Emeters1Power);
+ if (data.Emeters1Pf != null)
+ sb.AppendLine($"emeters_1_pf{{item=\"{name}\"}} " + data.Emeters1Pf);
+ if (data.Emeters1Current != null)
+ sb.AppendLine($"emeters_1_current{{item=\"{name}\"}} " + data.Emeters1Current);
+ if (data.Emeters1Voltage != null)
+ sb.AppendLine($"emeters_1_voltage{{item=\"{name}\"}} " + data.Emeters1Voltage);
+ if (data.Emeters1IsValid != null)
+ sb.AppendLine($"emeters_1_is_valid{{item=\"{name}\"}} " + ((bool)data.Emeters1IsValid ? 1 : 0));
+ if (data.Emeters1Total != null)
+ sb.AppendLine($"emeters_1_total{{item=\"{name}\"}} " + data.Emeters1Total);
+ if (data.Emeters1TotalReturned != null)
+ sb.AppendLine($"emeters_1_total_returned{{item=\"{name}\"}} " + data.Emeters1TotalReturned);
+
+ if (data.Emeters2Power != null)
+ sb.AppendLine($"emeters_2_power{{item=\"{name}\"}} " + data.Emeters2Power);
+ if (data.Emeters2Pf != null)
+ sb.AppendLine($"emeters_2_pf{{item=\"{name}\"}} " + data.Emeters2Pf);
+ if (data.Emeters2Current != null)
+ sb.AppendLine($"emeters_2_current{{item=\"{name}\"}} " + data.Emeters2Current);
+ if (data.Emeters2Voltage != null)
+ sb.AppendLine($"emeters_2_voltage{{item=\"{name}\"}} " + data.Emeters2Voltage);
+ if (data.Emeters2IsValid != null)
+ sb.AppendLine($"emeters_2_is_valid{{item=\"{name}\"}} " + ((bool)data.Emeters2IsValid ? 1 : 0));
+ if (data.Emeters2Total != null)
+ sb.AppendLine($"emeters_2_total{{item=\"{name}\"}} " + data.Emeters2Total);
+ if (data.Emeters2TotalReturned != null)
+ sb.AppendLine($"emeters_2_total_returned{{item=\"{name}\"}} " + data.Emeters2TotalReturned);
+
+ if (data.Emeters3Power != null)
+ sb.AppendLine($"emeters_3_power{{item=\"{name}\"}} " + data.Emeters3Power);
+ if (data.Emeters3Pf != null)
+ sb.AppendLine($"emeters_3_pf{{item=\"{name}\"}} " + data.Emeters3Pf);
+ if (data.Emeters3Current != null)
+ sb.AppendLine($"emeters_3_current{{item=\"{name}\"}} " + data.Emeters3Current);
+ if (data.Emeters3Voltage != null)
+ sb.AppendLine($"emeters_3_voltage{{item=\"{name}\"}} " + data.Emeters3Voltage);
+ if (data.Emeters3IsValid != null)
+ sb.AppendLine($"emeters_3_is_valid{{item=\"{name}\"}} " + ((bool)data.Emeters3IsValid ? 1 : 0));
+ if (data.Emeters3Total != null)
+ sb.AppendLine($"emeters_3_total{{item=\"{name}\"}} " + data.Emeters3Total);
+ if (data.Emeters3TotalReturned != null)
+ sb.AppendLine($"emeters_3_total_returned{{item=\"{name}\"}} " + data.Emeters3TotalReturned);
+
return sb;
}
@@ -115,7 +181,59 @@ namespace ShellyExporter
return data;
}
-
+
+ private static async Task Get3EmGen1(string path)
+ {
+ var data = new Data();
+ var client = new HttpClient();
+ var response = await client.GetStringAsync(path + "/status");
+
+ dynamic responseObject = JsonConvert.DeserializeObject(response);
+
+ if (responseObject == null)
+ return data;
+
+ if (responseObject.total_power != null)
+ {
+ data.Total = responseObject.total_power;
+ }
+
+ if (responseObject.emeters != null)
+ {
+ data.Emeters1Power = responseObject.emeters[0].power;
+ data.Emeters1Pf = responseObject.emeters[0].pf;
+ data.Emeters1Current = responseObject.emeters[0].current;
+ data.Emeters1Voltage = responseObject.emeters[0].voltage;
+ data.Emeters1IsValid = responseObject.emeters[0].is_valid;
+ data.Emeters1Total = responseObject.emeters[0].total;
+ data.Emeters1TotalReturned = responseObject.emeters[0].total_returned;
+ }
+
+ if (responseObject.emeters != null)
+ {
+ data.Emeters2Power = responseObject.emeters[1].power;
+ data.Emeters2Pf = responseObject.emeters[1].pf;
+ data.Emeters2Current = responseObject.emeters[1].current;
+ data.Emeters2Voltage = responseObject.emeters[1].voltage;
+ data.Emeters2IsValid = responseObject.emeters[1].is_valid;
+ data.Emeters2Total = responseObject.emeters[1].total;
+ data.Emeters2TotalReturned = responseObject.emeters[1].total_returned;
+ }
+
+ if (responseObject.emeters != null)
+ {
+ data.Emeters3Power = responseObject.emeters[2].power;
+ data.Emeters3Pf = responseObject.emeters[2].pf;
+ data.Emeters3Current = responseObject.emeters[2].current;
+ data.Emeters3Voltage = responseObject.emeters[2].voltage;
+ data.Emeters3IsValid = responseObject.emeters[2].is_valid;
+ data.Emeters3Total = responseObject.emeters[2].total;
+ data.Emeters3TotalReturned = responseObject.emeters[2].total_returned;
+ }
+
+ return data;
+ }
+
private static async Task GetPlugSGen2(string path)
{
var data = new Data();
diff --git a/ShellyExporter/appsettings.json b/ShellyExporter/appsettings.json
index 36e662e..347ccad 100644
--- a/ShellyExporter/appsettings.json
+++ b/ShellyExporter/appsettings.json
@@ -10,15 +10,21 @@
"Url": "http://192.168.111.77:5050"
},
"Hosts": {
- "server": {
- "ip": "192.168.1.60",
- "type": 1,
- "version" : 1
- },
- "bojler": {
- "ip": "192.168.1.61",
- "type": 1,
- "version" : 2
+ //"server": {
+ // "ip": "192.168.1.60",
+ // "type": 1,
+ // "version": 1
+ //},
+ //"bojler": {
+ // "ip": "192.168.1.61",
+ // "type": 1,
+ // "version": 2
+ //},
+ "pumpa": {
+ "ip": "192.168.1.64",
+ "type": 2,
+ "version": 1
}
+
}
}