Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
852a096f1d | ||
|
|
69030796f5 | ||
|
|
19d92c8cac | ||
|
|
c792ea20ad | ||
|
|
611205e78f | ||
|
|
4be8bb72f4 | ||
|
|
76cb025606 | ||
|
|
aa84aa0539 | ||
|
|
04f43b95ff | ||
|
|
a1009b5293 | ||
|
|
91a05f882e | ||
|
|
74d270b6d2 | ||
|
|
200420c9b0 | ||
|
|
acf5cea593 | ||
|
|
307f03c7c0 | ||
|
|
32b4daf3fb | ||
|
|
55e88f7b45 | ||
|
|
8baef3b2b5 | ||
|
|
80baca45e5 | ||
|
|
75eac65510 | ||
|
|
44b8daa325 | ||
|
|
2cd2c7c02e | ||
|
|
33b1b6527c | ||
|
|
9e60264d7d | ||
|
|
c96b2393d3 | ||
|
|
5fa97ea82b | ||
|
|
74027d705d | ||
|
|
8dfc339194 | ||
|
|
f4545af4fe | ||
|
|
81737d5d3a | ||
|
|
8771a3ce89 |
+31
-1
@@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||||
# Visual Studio 15
|
# Visual Studio 15
|
||||||
VisualStudioVersion = 15.0.26730.16
|
VisualStudioVersion = 15.0.27004.2010
|
||||||
MinimumVisualStudioVersion = 10.0.40219.1
|
MinimumVisualStudioVersion = 10.0.40219.1
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Zway-Bot", "Zway-Bot\Zway-Bot.csproj", "{AEF8059F-8AEF-45C7-85C4-318C8F797900}"
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Zway-Bot", "Zway-Bot\Zway-Bot.csproj", "{AEF8059F-8AEF-45C7-85C4-318C8F797900}"
|
||||||
EndProject
|
EndProject
|
||||||
@@ -9,6 +9,16 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Zway", "..\Zway\Zway\Zway.c
|
|||||||
EndProject
|
EndProject
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Utils", "..\Utils\Utils\Utils.csproj", "{FAC8CE64-BF13-4ECE-8097-AEB5DD060098}"
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Utils", "..\Utils\Utils\Utils.csproj", "{FAC8CE64-BF13-4ECE-8097-AEB5DD060098}"
|
||||||
EndProject
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Utils-IoT", "..\Utils\IoT\Utils-IoT.csproj", "{B870E4D5-6806-4A0B-B233-8907EEDC5AFC}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ConnectorDataMqtt", "..\Utils\IoT\Connector\Data\Mqtt\ConnectorDataMqtt.csproj", "{EE6C8F68-ED46-4C1C-ABDD-CFCDF75104F2}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Iot-Interfaces", "..\Utils\IoT\Interfaces\Iot-Interfaces.csproj", "{4DAADA29-C600-4CF3-8AD3-9C97C8D7F632}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "litjson_4.7.1", "..\Librarys\litjson\litjson\litjson_4.7.1.csproj", "{91A14CD2-2940-4500-8193-56D37EDDDBAA}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "M2Mqtt", "..\Librarys\mqtt\M2Mqtt\M2Mqtt_4.7.1.csproj", "{A11AEF5A-B246-4FE8-8330-06DB73CC8074}"
|
||||||
|
EndProject
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
Debug|Any CPU = Debug|Any CPU
|
Debug|Any CPU = Debug|Any CPU
|
||||||
@@ -27,6 +37,26 @@ Global
|
|||||||
{FAC8CE64-BF13-4ECE-8097-AEB5DD060098}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
{FAC8CE64-BF13-4ECE-8097-AEB5DD060098}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
{FAC8CE64-BF13-4ECE-8097-AEB5DD060098}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{FAC8CE64-BF13-4ECE-8097-AEB5DD060098}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
{FAC8CE64-BF13-4ECE-8097-AEB5DD060098}.Release|Any CPU.Build.0 = Release|Any CPU
|
{FAC8CE64-BF13-4ECE-8097-AEB5DD060098}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{B870E4D5-6806-4A0B-B233-8907EEDC5AFC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{B870E4D5-6806-4A0B-B233-8907EEDC5AFC}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{B870E4D5-6806-4A0B-B233-8907EEDC5AFC}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{B870E4D5-6806-4A0B-B233-8907EEDC5AFC}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{EE6C8F68-ED46-4C1C-ABDD-CFCDF75104F2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{EE6C8F68-ED46-4C1C-ABDD-CFCDF75104F2}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{EE6C8F68-ED46-4C1C-ABDD-CFCDF75104F2}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{EE6C8F68-ED46-4C1C-ABDD-CFCDF75104F2}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{4DAADA29-C600-4CF3-8AD3-9C97C8D7F632}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{4DAADA29-C600-4CF3-8AD3-9C97C8D7F632}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{4DAADA29-C600-4CF3-8AD3-9C97C8D7F632}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{4DAADA29-C600-4CF3-8AD3-9C97C8D7F632}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{91A14CD2-2940-4500-8193-56D37EDDDBAA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{91A14CD2-2940-4500-8193-56D37EDDDBAA}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{91A14CD2-2940-4500-8193-56D37EDDDBAA}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{91A14CD2-2940-4500-8193-56D37EDDDBAA}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{A11AEF5A-B246-4FE8-8330-06DB73CC8074}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{A11AEF5A-B246-4FE8-8330-06DB73CC8074}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{A11AEF5A-B246-4FE8-8330-06DB73CC8074}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{A11AEF5A-B246-4FE8-8330-06DB73CC8074}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
HideSolutionNode = FALSE
|
HideSolutionNode = FALSE
|
||||||
|
|||||||
+56
-9
@@ -1,7 +1,7 @@
|
|||||||
using System;
|
using System;
|
||||||
|
|
||||||
namespace ZwayBot {
|
namespace ZwayBot {
|
||||||
public class CronEvent : EventArgs {
|
public class CronEvent : ModulEventArgs {
|
||||||
|
|
||||||
public CronEvent() {
|
public CronEvent() {
|
||||||
}
|
}
|
||||||
@@ -10,13 +10,10 @@ namespace ZwayBot {
|
|||||||
this.Address = addr;
|
this.Address = addr;
|
||||||
this.Property = prop;
|
this.Property = prop;
|
||||||
this.Value = value;
|
this.Value = value;
|
||||||
|
this.Source = "Cronjob";
|
||||||
}
|
}
|
||||||
|
|
||||||
public String Address { get; }
|
|
||||||
public String Property { get; }
|
|
||||||
public String Value { get; }
|
|
||||||
}
|
}
|
||||||
public class OvertakerEvent : EventArgs {
|
public class OvertakerEvent : ModulEventArgs {
|
||||||
|
|
||||||
public OvertakerEvent() {
|
public OvertakerEvent() {
|
||||||
}
|
}
|
||||||
@@ -25,10 +22,60 @@ namespace ZwayBot {
|
|||||||
this.Address = addr;
|
this.Address = addr;
|
||||||
this.Property = prop;
|
this.Property = prop;
|
||||||
this.Value = value;
|
this.Value = value;
|
||||||
|
this.Source = "Overtaker";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public String Address { get; }
|
public class Flex4gridEvent : ModulEventArgs {
|
||||||
public String Property { get; }
|
public Flex4gridEvent() {
|
||||||
public String Value { get; }
|
}
|
||||||
|
public Flex4gridEvent(String topic, String text) {
|
||||||
|
this.Address = topic;
|
||||||
|
this.Value = text;
|
||||||
|
this.Source = "Flex4Grid";
|
||||||
|
}
|
||||||
|
public override String ToString() {
|
||||||
|
return this.Source + ": on " + this.Address + " set " + this.Value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class MqttEvent : ModulEventArgs {
|
||||||
|
public MqttEvent() {
|
||||||
|
}
|
||||||
|
public MqttEvent(String topic, String text) {
|
||||||
|
this.Address = topic;
|
||||||
|
this.Value = text;
|
||||||
|
this.Source = "MQTT";
|
||||||
|
}
|
||||||
|
public override String ToString() {
|
||||||
|
return this.Source + ": on " + this.Address + " set " + this.Value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class StatusPollingEvent : ModulEventArgs {
|
||||||
|
public StatusPollingEvent() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public StatusPollingEvent(String text, String node) {
|
||||||
|
this.Value = text;
|
||||||
|
this.Address = node;
|
||||||
|
this.Source = "POLLING";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override String ToString() {
|
||||||
|
return this.Source + ": " + this.Value + " on " + this.Address;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class ModulEventArgs : EventArgs {
|
||||||
|
public ModulEventArgs() {
|
||||||
|
}
|
||||||
|
public String Address { get; protected set; }
|
||||||
|
public String Property { get; protected set; }
|
||||||
|
public String Value { get; protected set; }
|
||||||
|
public String Source { get; protected set; }
|
||||||
|
public override String ToString() {
|
||||||
|
return this.Source + ": " + this.Address + " set " + this.Property + " to " + this.Value;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+41
-7
@@ -2,8 +2,8 @@
|
|||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
|
|
||||||
namespace ZwayBot {
|
namespace ZwayBot {
|
||||||
class Helper {
|
static class Helper {
|
||||||
public static void SetProperty(Object o, String name, String value) {
|
public static void SetProperty(this Object o, String name, String value) {
|
||||||
PropertyInfo prop = o.GetType().GetProperty(name);
|
PropertyInfo prop = o.GetType().GetProperty(name);
|
||||||
if (prop.CanWrite) {
|
if (prop.CanWrite) {
|
||||||
if (prop.PropertyType == typeof(Boolean) && Boolean.TryParse(value, out Boolean vb)) {
|
if (prop.PropertyType == typeof(Boolean) && Boolean.TryParse(value, out Boolean vb)) {
|
||||||
@@ -12,12 +12,15 @@ namespace ZwayBot {
|
|||||||
prop.SetValue(o, v32);
|
prop.SetValue(o, v32);
|
||||||
} else if (prop.PropertyType == typeof(Single) && Single.TryParse(value, out Single vs)) {
|
} else if (prop.PropertyType == typeof(Single) && Single.TryParse(value, out Single vs)) {
|
||||||
prop.SetValue(o, vs);
|
prop.SetValue(o, vs);
|
||||||
|
} else if (prop.PropertyType == typeof(Double) && Double.TryParse(value, out Double vd)) {
|
||||||
|
prop.SetValue(o, vd);
|
||||||
} else if (prop.PropertyType == typeof(Int64) && Int64.TryParse(value, out Int64 v64)) {
|
} else if (prop.PropertyType == typeof(Int64) && Int64.TryParse(value, out Int64 v64)) {
|
||||||
prop.SetValue(o, v64);
|
prop.SetValue(o, v64);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public static Boolean HasProperty(Object o, String type) {
|
|
||||||
|
internal static Boolean HasProperty(this Object o, String type) {
|
||||||
Type t = o.GetType();
|
Type t = o.GetType();
|
||||||
foreach (PropertyInfo item in t.GetProperties()) {
|
foreach (PropertyInfo item in t.GetProperties()) {
|
||||||
if (item.Name == type) {
|
if (item.Name == type) {
|
||||||
@@ -27,7 +30,7 @@ namespace ZwayBot {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal static Object GetProperty(Object o, String name) {
|
internal static Object GetProperty(this Object o, String name) {
|
||||||
PropertyInfo prop = o.GetType().GetProperty(name);
|
PropertyInfo prop = o.GetType().GetProperty(name);
|
||||||
if(prop.CanRead) {
|
if(prop.CanRead) {
|
||||||
return prop.GetValue(o);
|
return prop.GetValue(o);
|
||||||
@@ -35,14 +38,45 @@ namespace ZwayBot {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal static Boolean HasInterface(Object o, String type) {
|
internal static Boolean HasAbstract(this Object o, Type type) {
|
||||||
Type t = o.GetType();
|
if(o.GetType().BaseType == type) {
|
||||||
foreach (Type item in t.GetInterfaces()) {
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
internal static Boolean HasInterface(this Type o, String type) {
|
||||||
|
foreach (Type item in o.GetInterfaces()) {
|
||||||
if(item.Name == type) {
|
if(item.Name == type) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
internal static Boolean HasInterface(this Object o, Type interf) {
|
||||||
|
foreach(Type item in o.GetType().GetInterfaces()) {
|
||||||
|
if(item == interf) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
internal static void WriteError(String text) {
|
||||||
|
Console.ForegroundColor = ConsoleColor.Red;
|
||||||
|
Console.Error.WriteLine("ERROR: " + text);
|
||||||
|
Console.ResetColor();
|
||||||
|
}
|
||||||
|
|
||||||
|
internal static String ToUpperLower(this String s) {
|
||||||
|
if(s.Length == 0) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
if(s.Length == 1) {
|
||||||
|
return s.ToUpper();
|
||||||
|
}
|
||||||
|
return s[0].ToString().ToUpper() + s.Substring(1).ToLower();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,4 @@
|
|||||||
|
namespace ZwayBot.Interfaces {
|
||||||
|
interface IForceLoad {
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,71 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using BlubbFish.IoT.Zway;
|
||||||
|
using BlubbFish.Utils;
|
||||||
|
|
||||||
|
namespace ZwayBot {
|
||||||
|
abstract class AModul {
|
||||||
|
protected ZwayController zw;
|
||||||
|
private InIReader settings;
|
||||||
|
protected Dictionary<String, Dictionary<String, String>> config = new Dictionary<String, Dictionary<String, String>>();
|
||||||
|
|
||||||
|
public Boolean HasConfig { get; private set; }
|
||||||
|
public Boolean ConfigPublic { get; private set; }
|
||||||
|
|
||||||
|
public delegate void ModulEvent(Object sender, ModulEventArgs e);
|
||||||
|
public abstract event ModulEvent Update;
|
||||||
|
|
||||||
|
public AModul(ZwayController zway, InIReader settings) {
|
||||||
|
this.HasConfig = false;
|
||||||
|
this.ConfigPublic = false;
|
||||||
|
this.zw = zway;
|
||||||
|
this.settings = settings;
|
||||||
|
this.ParseConfig();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ParseConfig() {
|
||||||
|
if (this.settings != null) {
|
||||||
|
this.HasConfig = true;
|
||||||
|
foreach (String item in this.settings.GetSections(false)) {
|
||||||
|
this.config.Add(item, this.settings.GetSection(item));
|
||||||
|
}
|
||||||
|
if(this.config.ContainsKey("modul")) {
|
||||||
|
this.ConfigPublic = this.config["modul"].ContainsKey("config") && this.config["modul"]["config"].ToLower() == "public";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public Dictionary<String, Dictionary<String, String>> GetConfig() {
|
||||||
|
if (this.HasConfig && this.ConfigPublic) {
|
||||||
|
Dictionary<String, Dictionary<String, String>> ret = new Dictionary<String, Dictionary<String, String>>(this.config);
|
||||||
|
if(ret.ContainsKey("modul")) {
|
||||||
|
ret.Remove("modul");
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
return new Dictionary<String, Dictionary<String, String>>();
|
||||||
|
}
|
||||||
|
|
||||||
|
public virtual void Interconnect(Dictionary<String, AModul> moduls) { }
|
||||||
|
|
||||||
|
public virtual void SetInterconnection(String param, Action<Object> hook, Object data) { }
|
||||||
|
|
||||||
|
public abstract void Dispose();
|
||||||
|
|
||||||
|
internal void SetConfig(Dictionary<String, Dictionary<String, String>> newconf) {
|
||||||
|
if (this.HasConfig && this.ConfigPublic) {
|
||||||
|
if (newconf.ContainsKey("modul")) {
|
||||||
|
newconf.Remove("modul");
|
||||||
|
}
|
||||||
|
if (this.config.ContainsKey("modul")) {
|
||||||
|
newconf.Add("modul", this.config["modul"]);
|
||||||
|
}
|
||||||
|
this.config = newconf;
|
||||||
|
this.settings.SetSections(this.config);
|
||||||
|
this.UpdateConfig();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected abstract void UpdateConfig();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -6,16 +6,15 @@ using System.Threading;
|
|||||||
using BlubbFish.IoT.Zway;
|
using BlubbFish.IoT.Zway;
|
||||||
using BlubbFish.IoT.Zway.Interfaces;
|
using BlubbFish.IoT.Zway.Interfaces;
|
||||||
using BlubbFish.Utils;
|
using BlubbFish.Utils;
|
||||||
|
using ZwayBot.Interfaces;
|
||||||
|
|
||||||
namespace ZwayBot {
|
namespace ZwayBot.Moduls {
|
||||||
internal class CronJob : IDisposable {
|
internal class CronJob : AModul, IDisposable, IForceLoad {
|
||||||
private ZwayController zw;
|
|
||||||
private InIReader ini;
|
|
||||||
private DateTime crontime;
|
private DateTime crontime;
|
||||||
private Thread thread;
|
private Thread thread;
|
||||||
|
private List<Tuple<String, Action<Object>, Object>> internalCron = new List<Tuple<String, Action<Object>, Object>>();
|
||||||
|
|
||||||
public delegate void CronRunned(Object sender, CronEvent e);
|
public override event ModulEvent Update;
|
||||||
public event CronRunned Update;
|
|
||||||
|
|
||||||
private Dictionary<String, String> cron_named = new Dictionary<String, String> {
|
private Dictionary<String, String> cron_named = new Dictionary<String, String> {
|
||||||
{ "@yearly", "0 0 1 1 *" },
|
{ "@yearly", "0 0 1 1 *" },
|
||||||
@@ -26,9 +25,7 @@ namespace ZwayBot {
|
|||||||
{ "@hourly", "0 * * * *" }
|
{ "@hourly", "0 * * * *" }
|
||||||
};
|
};
|
||||||
|
|
||||||
public CronJob(ZwayController zw) {
|
public CronJob(ZwayController zway, InIReader settings) : base(zway, settings) {
|
||||||
this.zw = zw;
|
|
||||||
this.ini = InIReader.GetInstance("cron.ini");
|
|
||||||
this.crontime = DateTime.Now;
|
this.crontime = DateTime.Now;
|
||||||
this.thread = new Thread(this.Runner);
|
this.thread = new Thread(this.Runner);
|
||||||
this.thread.Start();
|
this.thread.Start();
|
||||||
@@ -39,9 +36,16 @@ namespace ZwayBot {
|
|||||||
while (true) {
|
while (true) {
|
||||||
if(this.crontime.Minute != DateTime.Now.Minute) {
|
if(this.crontime.Minute != DateTime.Now.Minute) {
|
||||||
this.crontime = DateTime.Now;
|
this.crontime = DateTime.Now;
|
||||||
foreach (String item in this.ini.GetSections()) {
|
if (this.config.Count != 0) {
|
||||||
if(ParseCronString(this.ini.GetValue(item, "cron"))) {
|
foreach (KeyValuePair<String, Dictionary<String, String>> item in this.config) {
|
||||||
this.SetValues(this.ini.GetValue(item, "set"));
|
if (item.Value.ContainsKey("cron") && item.Value.ContainsKey("set") && this.ParseCronString(item.Value["cron"])) {
|
||||||
|
this.SetValues(item.Value["set"]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
foreach (Tuple<String, Action<Object>, Object> item in this.internalCron) {
|
||||||
|
if(this.ParseCronString(item.Item1)) {
|
||||||
|
item.Item2?.Invoke(item.Item3);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -53,29 +57,17 @@ namespace ZwayBot {
|
|||||||
foreach (String item in value.Split(';')) {
|
foreach (String item in value.Split(';')) {
|
||||||
String[] items = item.Split(':');
|
String[] items = item.Split(':');
|
||||||
if(items.Length == 2) {
|
if(items.Length == 2) {
|
||||||
String[] addr = items[0].Split('-');
|
|
||||||
String[] values = items[1].Split('-');
|
String[] values = items[1].Split('-');
|
||||||
if(addr.Length == 3 || addr.Length == 4) {
|
ACommandClass c = this.zw.GetCommandClass(items[0]);
|
||||||
Int32 deviceid = Int32.Parse(addr[0]);
|
|
||||||
Int32 instanceid = Int32.Parse(addr[1]);
|
|
||||||
Int32 classid = Int32.Parse(addr[2]);
|
|
||||||
ICommandClass c;
|
|
||||||
if(addr.Length == 4) {
|
|
||||||
Int32 subcid = Int32.Parse(addr[3]);
|
|
||||||
c = this.zw.GetCommandClassSub(deviceid, instanceid, classid, subcid);
|
|
||||||
} else {
|
|
||||||
c = this.zw.GetCommandClass(deviceid, instanceid, classid);
|
|
||||||
}
|
|
||||||
if (c != null && values.Length == 2) {
|
if (c != null && values.Length == 2) {
|
||||||
if (Helper.HasProperty(c, values[0])) {
|
if (c.HasProperty(values[0])) {
|
||||||
Helper.SetProperty(c, values[0], values[1]);
|
c.SetProperty(values[0], values[1]);
|
||||||
this.Update?.Invoke(this, new CronEvent(items[0], values[0], values[1]));
|
this.Update?.Invoke(this, new CronEvent(items[0], values[0], values[1]));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
private Boolean ParseCronString(String str) {
|
private Boolean ParseCronString(String str) {
|
||||||
str = str.Trim();
|
str = str.Trim();
|
||||||
@@ -117,7 +109,7 @@ namespace ZwayBot {
|
|||||||
cron = cron.Replace(DateTime.Parse("2015-01-" + (4 + i) + "T00:00:00").ToString("dddd", CultureInfo.CreateSpecificCulture("en-US")), i.ToString());
|
cron = cron.Replace(DateTime.Parse("2015-01-" + (4 + i) + "T00:00:00").ToString("dddd", CultureInfo.CreateSpecificCulture("en-US")), i.ToString());
|
||||||
}
|
}
|
||||||
for (Int32 i = 1; i <= 12; i++) {
|
for (Int32 i = 1; i <= 12; i++) {
|
||||||
cron = cron.Replace(DateTime.Parse("2015-"+i+"-01T00:00:00").ToString("MMM", CultureInfo.CreateSpecificCulture("en-US")), i.ToString());
|
cron = cron.Replace(DateTime.Parse("2015-" + i + "-01T00:00:00").ToString("MMM", CultureInfo.CreateSpecificCulture("en-US")), i.ToString());
|
||||||
cron = cron.Replace(DateTime.Parse("2015-" + i + "-01T00:00:00").ToString("MMMM", CultureInfo.CreateSpecificCulture("en-US")), i.ToString());
|
cron = cron.Replace(DateTime.Parse("2015-" + i + "-01T00:00:00").ToString("MMMM", CultureInfo.CreateSpecificCulture("en-US")), i.ToString());
|
||||||
}
|
}
|
||||||
if (cron.Contains("*")) {
|
if (cron.Contains("*")) {
|
||||||
@@ -161,8 +153,14 @@ namespace ZwayBot {
|
|||||||
return ret.ContainsKey(Int32.Parse(date));
|
return ret.ContainsKey(Int32.Parse(date));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override void SetInterconnection(String cron, Action<Object> hook, Object data) {
|
||||||
|
this.internalCron.Add(new Tuple<String, Action<Object>, Object>(cron, hook, data));
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void UpdateConfig() { }
|
||||||
|
|
||||||
#region IDisposable Support
|
#region IDisposable Support
|
||||||
private Boolean disposedValue = false; // Dient zur Erkennung redundanter Aufrufe.
|
private Boolean disposedValue = false;
|
||||||
|
|
||||||
protected virtual void Dispose(Boolean disposing) {
|
protected virtual void Dispose(Boolean disposing) {
|
||||||
if (!this.disposedValue) {
|
if (!this.disposedValue) {
|
||||||
@@ -181,7 +179,7 @@ namespace ZwayBot {
|
|||||||
Dispose(false);
|
Dispose(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Dispose() {
|
public override void Dispose() {
|
||||||
Dispose(true);
|
Dispose(true);
|
||||||
GC.SuppressFinalize(this);
|
GC.SuppressFinalize(this);
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,134 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Text.RegularExpressions;
|
||||||
|
using BlubbFish.IoT.Zway;
|
||||||
|
using BlubbFish.IoT.Zway.Events;
|
||||||
|
using BlubbFish.IoT.Zway.Interfaces;
|
||||||
|
using BlubbFish.Utils;
|
||||||
|
using BlubbFish.Utils.IoT.Connector;
|
||||||
|
using BlubbFish.Utils.IoT.Events;
|
||||||
|
using LitJson;
|
||||||
|
|
||||||
|
namespace ZwayBot.Moduls {
|
||||||
|
class Mqtt : AModul, IDisposable {
|
||||||
|
private ABackend mqtt;
|
||||||
|
private Dictionary<String, AModul> modules;
|
||||||
|
|
||||||
|
public override event ModulEvent Update;
|
||||||
|
|
||||||
|
public Mqtt(ZwayController zway, InIReader settings) : base(zway, settings) {
|
||||||
|
if (this.config.ContainsKey("settings")) {
|
||||||
|
this.mqtt = ABackend.GetInstance(this.config["settings"], ABackend.BackendType.Data);
|
||||||
|
this.mqtt.MessageIncomming += this.Mqtt_MessageIncomming;
|
||||||
|
this.zw.Update += this.ZwayEvent;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ZwayEvent(Object sender, DeviceUpdateEvent e) {
|
||||||
|
String topic = "";
|
||||||
|
String data = "";
|
||||||
|
if(e.Parent.HasAbstract(typeof(ACommandClass))) {
|
||||||
|
ACommandClass sensor = (ACommandClass)e.Parent;
|
||||||
|
topic = "zwavebot/devices/" + sensor.MqttTopic();
|
||||||
|
data = sensor.ToJson();
|
||||||
|
}
|
||||||
|
if(topic != "" && data != "") {
|
||||||
|
((ADataBackend)this.mqtt).Send(topic, data);
|
||||||
|
this.Update?.Invoke(this, new MqttEvent(topic, data));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Mqtt_MessageIncomming(Object sender, BackendEvent e) {
|
||||||
|
if (e.From.ToString().StartsWith("zwavebot/devices/") && (e.From.ToString().EndsWith("/set") || e.From.ToString().EndsWith("/get"))) {
|
||||||
|
Match m = new Regex("^zwavebot/devices/(\\d+)/(\\d+)/(\\d+)/[gs]et$|^zwavebot/devices/(\\d+)/(\\d+)/(\\d+)/(\\d+)/[gs]et$").Match(e.From.ToString());
|
||||||
|
String id = "";
|
||||||
|
if(m.Groups[1].Success) {
|
||||||
|
id = m.Groups[1].Value + "-" + m.Groups[2].Value + "-" + m.Groups[3].Value;
|
||||||
|
}
|
||||||
|
if(m.Groups[4].Success) {
|
||||||
|
id = m.Groups[4].Value + "-" + m.Groups[5].Value + "-" + m.Groups[6].Value + "-" + m.Groups[7].Value;
|
||||||
|
}
|
||||||
|
ACommandClass c = this.zw.GetCommandClass(id);
|
||||||
|
if(c == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (e.From.ToString().EndsWith("/set")) {
|
||||||
|
try {
|
||||||
|
JsonData a = JsonMapper.ToObject(e.Message);
|
||||||
|
foreach (String item in a.Keys) {
|
||||||
|
String key = item.ToUpperLower();
|
||||||
|
if (c.HasProperty(key)) {
|
||||||
|
c.SetProperty(key, a[item].ToString());
|
||||||
|
this.Update?.Invoke(this, new MqttEvent(c.Id, a[item].ToString()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (Exception) { }
|
||||||
|
} else if(e.From.ToString().EndsWith("/get")) {
|
||||||
|
c.PollOnce = true;
|
||||||
|
((ADataBackend)this.mqtt).Send("zwavebot/devices/" + c.MqttTopic(), c.ToJson());
|
||||||
|
this.Update?.Invoke(this, new MqttEvent(e.From.ToString(), "Dataget"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (e.From.ToString().StartsWith("zwavebot/config/") && (e.From.ToString().EndsWith("/set") || e.From.ToString().EndsWith("/get"))) {
|
||||||
|
Match m = new Regex("^zwavebot/config/(\\w+)/[gs]et$|").Match(e.From.ToString());
|
||||||
|
if (!m.Groups[1].Success) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
AModul modul = null;
|
||||||
|
foreach (KeyValuePair<String, AModul> item in this.modules) {
|
||||||
|
if (item.Key.ToLower() == m.Groups[1].Value) {
|
||||||
|
modul = item.Value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (modul == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if(e.From.ToString().EndsWith("/get") && modul.HasConfig && modul.ConfigPublic) {
|
||||||
|
String topic = "zwavebot/config/" + m.Groups[1].Value;
|
||||||
|
String data = JsonMapper.ToJson(modul.GetConfig()).ToString();
|
||||||
|
((ADataBackend)this.mqtt).Send(topic, data);
|
||||||
|
this.Update?.Invoke(this, new MqttEvent(topic, data));
|
||||||
|
}
|
||||||
|
if (e.From.ToString().EndsWith("/set") && modul.HasConfig && modul.ConfigPublic) {
|
||||||
|
try {
|
||||||
|
JsonData a = JsonMapper.ToObject(e.Message);
|
||||||
|
Dictionary<String, Dictionary<String, String>> newconf = new Dictionary<String, Dictionary<String, String>>();
|
||||||
|
foreach (String section in a.Keys) {
|
||||||
|
Dictionary<String, String> sectiondata = new Dictionary<String, String>();
|
||||||
|
foreach (String item in a[section].Keys) {
|
||||||
|
sectiondata.Add(item, a[section][item].ToString());
|
||||||
|
}
|
||||||
|
newconf.Add(section, sectiondata);
|
||||||
|
}
|
||||||
|
modul.SetConfig(newconf);
|
||||||
|
this.Update?.Invoke(this, new MqttEvent("New Config", "Write"));
|
||||||
|
} catch (Exception) { }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void Interconnect(Dictionary<String, AModul> moduls) {
|
||||||
|
this.modules = moduls;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void UpdateConfig() { }
|
||||||
|
|
||||||
|
#region IDisposable Support
|
||||||
|
private Boolean disposedValue = false;
|
||||||
|
|
||||||
|
protected virtual void Dispose(Boolean disposing) {
|
||||||
|
if (!this.disposedValue) {
|
||||||
|
if (disposing) {
|
||||||
|
this.mqtt.Dispose();
|
||||||
|
}
|
||||||
|
this.disposedValue = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void Dispose() {
|
||||||
|
Dispose(true);
|
||||||
|
GC.SuppressFinalize(this);
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,102 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using BlubbFish.IoT.Zway;
|
||||||
|
using BlubbFish.IoT.Zway.Events;
|
||||||
|
using BlubbFish.IoT.Zway.Interfaces;
|
||||||
|
using BlubbFish.Utils;
|
||||||
|
|
||||||
|
namespace ZwayBot.Moduls {
|
||||||
|
internal class Overtaker : AModul, IDisposable {
|
||||||
|
private Dictionary<String, Dictionary<String, String>> events = new Dictionary<String, Dictionary<String, String>>();
|
||||||
|
|
||||||
|
public override event ModulEvent Update;
|
||||||
|
|
||||||
|
public Overtaker(ZwayController zway, InIReader settings) : base(zway, settings) {
|
||||||
|
this.ParseIni();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ParseIni() {
|
||||||
|
foreach (KeyValuePair<String, Dictionary<String, String>> item in this.config) {
|
||||||
|
if (item.Value.ContainsKey("from")) {
|
||||||
|
String from = item.Value["from"];
|
||||||
|
String[] source = from.Split(':');
|
||||||
|
this.events.Add(source[0], item.Value);
|
||||||
|
ACommandClass c = this.zw.GetCommandClass(source[0]);
|
||||||
|
if (c != null) {
|
||||||
|
c.Polling = true;
|
||||||
|
c.Update += this.ChangedEvent;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ChangedEvent(Object sender, DeviceUpdateEvent e) {
|
||||||
|
if(sender.HasAbstract(typeof(ACommandClass))) {
|
||||||
|
if (this.events.ContainsKey(((ACommandClass)sender).Id)) {
|
||||||
|
this.SetValues(sender, ((ACommandClass)sender).Id, this.events[((ACommandClass)sender).Id]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void SetValues(Object sender, String name, Dictionary<String, String> dictionary) {
|
||||||
|
String from = dictionary["from"];
|
||||||
|
String[] source = from.Split(':');
|
||||||
|
if (source.Length != 2) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
String source_value;
|
||||||
|
if (sender.HasProperty(source[1])) {
|
||||||
|
source_value = sender.GetProperty(source[1]).ToString();
|
||||||
|
} else {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if(dictionary.ContainsKey("convert")) {
|
||||||
|
foreach (String tuple in dictionary["convert"].Split(';')) {
|
||||||
|
String[] item = tuple.Split('-');
|
||||||
|
if(source_value == item[0]) {
|
||||||
|
source_value = item[1];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (dictionary.ContainsKey("to")) {
|
||||||
|
foreach (String to in dictionary["to"].Split(';')) {
|
||||||
|
String[] target = to.Split(':');
|
||||||
|
if (target.Length == 2) {
|
||||||
|
ACommandClass c = this.zw.GetCommandClass(target[0]);
|
||||||
|
if (c != null) {
|
||||||
|
if (c.HasProperty(target[1])) {
|
||||||
|
if (c.GetProperty(target[1]).ToString() != source_value) {
|
||||||
|
c.SetProperty(target[1], source_value);
|
||||||
|
this.Update?.Invoke(this, new OvertakerEvent(target[0], target[1], source_value));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void UpdateConfig() { }
|
||||||
|
|
||||||
|
#region IDisposable Support
|
||||||
|
private Boolean disposedValue = false;
|
||||||
|
|
||||||
|
protected virtual void Dispose(Boolean disposing) {
|
||||||
|
if (!this.disposedValue) {
|
||||||
|
if (disposing) {
|
||||||
|
}
|
||||||
|
this.disposedValue = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
~Overtaker() {
|
||||||
|
Dispose(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void Dispose() {
|
||||||
|
Dispose(true);
|
||||||
|
GC.SuppressFinalize(this);
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,64 @@
|
|||||||
|
using System;
|
||||||
|
using BlubbFish.IoT.Zway;
|
||||||
|
using BlubbFish.IoT.Zway.Events;
|
||||||
|
using BlubbFish.Utils;
|
||||||
|
using BlubbFish.Utils.IoT.Connector;
|
||||||
|
using BlubbFish.Utils.IoT.Events;
|
||||||
|
using BlubbFish.Utils.IoT.Interfaces;
|
||||||
|
|
||||||
|
namespace ZwayBot.Moduls {
|
||||||
|
class Senml : AModul {
|
||||||
|
public override event ModulEvent Update;
|
||||||
|
private ABackend mqtt;
|
||||||
|
private String SenmlGuid;
|
||||||
|
|
||||||
|
public Senml(ZwayController zway, InIReader settings) : base(zway, settings) {
|
||||||
|
if (this.config.ContainsKey("settings")) {
|
||||||
|
this.mqtt = ABackend.GetInstance(this.config["settings"], ABackend.BackendType.Data);
|
||||||
|
this.mqtt.MessageIncomming += this.EventInput;
|
||||||
|
this.zw.Update += this.EventOutput;
|
||||||
|
this.SenmlGuid = this.config["settings"]["guid"];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#region Events
|
||||||
|
private void EventOutput(Object sender, DeviceUpdateEvent e) {
|
||||||
|
String topic = "";
|
||||||
|
String data = "";
|
||||||
|
if (e.Parent.HasInterface(typeof(ISenml))) {
|
||||||
|
ISenml sensor = (ISenml)e.Parent;
|
||||||
|
topic = sensor.SenmlTopic() + this.SenmlGuid+ "/senml";
|
||||||
|
data = sensor.ToSenml();
|
||||||
|
}
|
||||||
|
if (topic != "" && data != null && data != "") {
|
||||||
|
((ADataBackend)this.mqtt).Send(topic, data);
|
||||||
|
this.Update?.Invoke(this, new MqttEvent(topic, data));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void EventInput(Object sender, BackendEvent e) { }
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Config
|
||||||
|
protected override void UpdateConfig() { }
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region IDisposable Support
|
||||||
|
private Boolean disposedValue = false;
|
||||||
|
|
||||||
|
protected virtual void Dispose(Boolean disposing) {
|
||||||
|
if (!this.disposedValue) {
|
||||||
|
if (disposing) {
|
||||||
|
this.mqtt.Dispose();
|
||||||
|
}
|
||||||
|
this.disposedValue = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void Dispose() {
|
||||||
|
Dispose(true);
|
||||||
|
GC.SuppressFinalize(this);
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,60 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using BlubbFish.IoT.Zway;
|
||||||
|
using BlubbFish.IoT.Zway.Devices;
|
||||||
|
using BlubbFish.IoT.Zway.Interfaces;
|
||||||
|
using BlubbFish.Utils;
|
||||||
|
using ZwayBot.Interfaces;
|
||||||
|
|
||||||
|
namespace ZwayBot.Moduls {
|
||||||
|
class Statuspolling : AModul, IDisposable, IForceLoad {
|
||||||
|
public override event ModulEvent Update;
|
||||||
|
|
||||||
|
public Statuspolling(ZwayController zway, InIReader settings) : base(zway, settings) { }
|
||||||
|
|
||||||
|
|
||||||
|
public override void Interconnect(Dictionary<String, AModul> moduls) {
|
||||||
|
foreach (KeyValuePair<String, AModul> item in moduls) {
|
||||||
|
if (item.Value is CronJob) {
|
||||||
|
item.Value.SetInterconnection("0 0 * * *", new Action<Object>(this.PollAll), null);
|
||||||
|
if (this.config.Count != 0) {
|
||||||
|
foreach (KeyValuePair<String, Dictionary<String, String>> section in this.config) {
|
||||||
|
if (section.Value.ContainsKey("cron") && section.Value.ContainsKey("devices")) {
|
||||||
|
item.Value.SetInterconnection(section.Value["cron"], new Action<Object>(this.PollSpecific), section.Value["devices"]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void PollSpecific(Object obj) {
|
||||||
|
String devices = (String)obj;
|
||||||
|
foreach (String item in devices.Split(',')) {
|
||||||
|
ACommandClass c = this.zw.GetCommandClass(item);
|
||||||
|
c.PollOnce = true;
|
||||||
|
this.Update?.Invoke(this, new StatusPollingEvent("Polling", item));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void PollAll(Object o) {
|
||||||
|
foreach (KeyValuePair<Int32, Device> device in this.zw.Devices) {
|
||||||
|
foreach (KeyValuePair<Int32, Instance> instance in device.Value.Instances) {
|
||||||
|
foreach (KeyValuePair<ACommandClass.Classes, ACommandClass> commandclass in instance.Value.CommandClasses) {
|
||||||
|
commandclass.Value.PollOnce = true;
|
||||||
|
if(commandclass.Value.HasSub) {
|
||||||
|
foreach (KeyValuePair<Int32, ACommandClass> subclass in commandclass.Value.Sub) {
|
||||||
|
subclass.Value.PollOnce = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this.Update?.Invoke(this, new StatusPollingEvent("Polling", "all nodes"));
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void UpdateConfig() { }
|
||||||
|
|
||||||
|
public override void Dispose() {}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,106 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using BlubbFish.IoT.Zway;
|
|
||||||
using BlubbFish.IoT.Zway.Events;
|
|
||||||
using BlubbFish.IoT.Zway.Interfaces;
|
|
||||||
using BlubbFish.Utils;
|
|
||||||
|
|
||||||
namespace ZwayBot {
|
|
||||||
internal class Overtaker {
|
|
||||||
private ZwayController zw;
|
|
||||||
private InIReader ini;
|
|
||||||
private Dictionary<String, Dictionary<String, String>> events = new Dictionary<String, Dictionary<String, String>>();
|
|
||||||
|
|
||||||
public delegate void OvertakeValue(Object sender, OvertakerEvent e);
|
|
||||||
public event OvertakeValue Update;
|
|
||||||
|
|
||||||
public Overtaker(ZwayController zw) {
|
|
||||||
this.zw = zw;
|
|
||||||
this.ini = InIReader.GetInstance("overtaker.ini");
|
|
||||||
this.ParseIni();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void ParseIni() {
|
|
||||||
foreach (String item in this.ini.GetSections()) {
|
|
||||||
String from = this.ini.GetValue(item, "from");
|
|
||||||
String[] source = from.Split(':');
|
|
||||||
this.events.Add(source[0], this.ini.GetSection(item));
|
|
||||||
String[] addr = source[0].Split('-');
|
|
||||||
ICommandClass c;
|
|
||||||
if (addr.Length == 3 || addr.Length == 4) {
|
|
||||||
Int32 deviceid = Int32.Parse(addr[0]);
|
|
||||||
Int32 instanceid = Int32.Parse(addr[1]);
|
|
||||||
Int32 classid = Int32.Parse(addr[2]);
|
|
||||||
if (addr.Length == 4) {
|
|
||||||
Int32 subcid = Int32.Parse(addr[3]);
|
|
||||||
c = this.zw.GetCommandClassSub(deviceid, instanceid, classid, subcid);
|
|
||||||
} else {
|
|
||||||
c = this.zw.GetCommandClass(deviceid, instanceid, classid);
|
|
||||||
}
|
|
||||||
if (c != null) {
|
|
||||||
c.Polling = true;
|
|
||||||
c.Update += this.ChangedEvent;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void ChangedEvent(Object sender, DeviceUpdateEvent e) {
|
|
||||||
if(Helper.HasInterface(sender, "ICommandClass")) {
|
|
||||||
if (this.events.ContainsKey(((ICommandClass)sender).Id)) {
|
|
||||||
this.SetValues(sender, ((ICommandClass)sender).Id, this.events[((ICommandClass)sender).Id]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void SetValues(Object sender, String name, Dictionary<String, String> dictionary) {
|
|
||||||
String from = dictionary["from"];
|
|
||||||
String[] source = from.Split(':');
|
|
||||||
if (source.Length != 2) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
String source_value;
|
|
||||||
if (Helper.HasProperty(sender, source[1])) {
|
|
||||||
source_value = Helper.GetProperty(sender, source[1]).ToString();
|
|
||||||
} else {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if(dictionary.ContainsKey("convert")) {
|
|
||||||
foreach (String tuple in dictionary["convert"].Split(';')) {
|
|
||||||
String[] item = tuple.Split('-');
|
|
||||||
if(source_value == item[0]) {
|
|
||||||
source_value = item[1];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
foreach (String to in dictionary["to"].Split(';')) {
|
|
||||||
String[] target = to.Split(':');
|
|
||||||
if(target.Length == 2) {
|
|
||||||
String[] addr = target[0].Split('-');
|
|
||||||
if (addr.Length == 3 || addr.Length == 4) {
|
|
||||||
Int32 deviceid = Int32.Parse(addr[0]);
|
|
||||||
Int32 instanceid = Int32.Parse(addr[1]);
|
|
||||||
Int32 classid = Int32.Parse(addr[2]);
|
|
||||||
ICommandClass c;
|
|
||||||
if (addr.Length == 4) {
|
|
||||||
Int32 subcid = Int32.Parse(addr[3]);
|
|
||||||
c = this.zw.GetCommandClassSub(deviceid, instanceid, classid, subcid);
|
|
||||||
} else {
|
|
||||||
c = this.zw.GetCommandClass(deviceid, instanceid, classid);
|
|
||||||
}
|
|
||||||
if (c != null) {
|
|
||||||
String target_value;
|
|
||||||
if (Helper.HasProperty(c, target[1])) {
|
|
||||||
target_value = Helper.GetProperty(c, target[1]).ToString();
|
|
||||||
if (target_value != source_value) {
|
|
||||||
Helper.SetProperty(c, target[1], source_value);
|
|
||||||
this.Update?.Invoke(this, new OvertakerEvent(target[0], target[1], source_value));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
+89
-21
@@ -1,39 +1,107 @@
|
|||||||
using System;
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Reflection;
|
||||||
using BlubbFish.IoT.Zway;
|
using BlubbFish.IoT.Zway;
|
||||||
using BlubbFish.Utils;
|
using BlubbFish.Utils;
|
||||||
|
|
||||||
namespace ZwayBot {
|
namespace ZwayBot {
|
||||||
class Program {
|
class Program {
|
||||||
static void Main(String[] args) {
|
static void Main(String[] args) => new Program(args);
|
||||||
ZwayController zw = new ZwayController(InIReader.GetInstance("settings.ini").GetSection("zway"), InIReader.GetInstance("names.ini").GetSection("names"), false);
|
|
||||||
zw.Update += ZwayDataUpate;
|
private readonly ZwayController zw;
|
||||||
CronJob cron = new CronJob(zw);
|
private readonly Dictionary<String, AModul> moduls = new Dictionary<String, AModul>();
|
||||||
cron.Update += Cron_Update;
|
private Boolean RunningProcess = true;
|
||||||
Overtaker over = new Overtaker(zw);
|
private System.Threading.Thread sig_thread;
|
||||||
over.Update += Over_Update;
|
private readonly ProgramLogger logger = new ProgramLogger();
|
||||||
|
|
||||||
|
public Program(String[] args) {
|
||||||
|
InIReader.SetSearchPath(new List<String>() { "/etc/zwaybot", Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\zwaybot" });
|
||||||
|
Dictionary<String, String> names;
|
||||||
|
if(InIReader.ConfigExist("names")) {
|
||||||
|
names = InIReader.GetInstance("names").GetSection("names");
|
||||||
|
} else {
|
||||||
|
names = new Dictionary<String, String>();
|
||||||
|
}
|
||||||
|
if(!InIReader.ConfigExist("settings")) {
|
||||||
|
Helper.WriteError("No settings.ini found. Abord!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this.logger.SetPath(InIReader.GetInstance("settings").GetValue("logging", "path"));
|
||||||
|
this.zw = new ZwayController(InIReader.GetInstance("settings").GetSection("zway"), names, false);
|
||||||
|
this.zw.Update += this.ZwayDataUpate;
|
||||||
|
this.ModulLoader();
|
||||||
|
this.ModulInterconnect();
|
||||||
|
this.ModulEvents();
|
||||||
|
this.WaitForShutdown();
|
||||||
|
this.ModulDispose();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ModulInterconnect() {
|
||||||
|
foreach (KeyValuePair<String, AModul> item in this.moduls) {
|
||||||
|
item.Value.Interconnect(this.moduls);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void WaitForShutdown() {
|
||||||
|
this.sig_thread = new System.Threading.Thread(delegate() {
|
||||||
|
Mono.Unix.UnixSignal[] signals = new Mono.Unix.UnixSignal[] {
|
||||||
|
new Mono.Unix.UnixSignal(Mono.Unix.Native.Signum.SIGTERM),
|
||||||
|
new Mono.Unix.UnixSignal(Mono.Unix.Native.Signum.SIGINT)
|
||||||
|
};
|
||||||
while (true) {
|
while (true) {
|
||||||
|
Int32 i = Mono.Unix.UnixSignal.WaitAny(signals, -1);
|
||||||
|
this.RunningProcess = false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
Console.CancelKeyPress += new ConsoleCancelEventHandler(this.SetupShutdown);
|
||||||
|
while (this.RunningProcess) {
|
||||||
System.Threading.Thread.Sleep(100);
|
System.Threading.Thread.Sleep(100);
|
||||||
if (Console.KeyAvailable) {
|
|
||||||
ConsoleKeyInfo key = Console.ReadKey(false);
|
|
||||||
if (key.Key == ConsoleKey.Escape) {
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
cron.Dispose();
|
|
||||||
zw.Dispose();
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void Over_Update(Object sender, OvertakerEvent e) {
|
private void SetupShutdown(Object sender, ConsoleCancelEventArgs e) {
|
||||||
Console.WriteLine("OVERTAKE: " + e.Address + " set " + e.Property + " to " + e.Value);
|
e.Cancel = true;
|
||||||
|
this.RunningProcess = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void Cron_Update(Object sender, CronEvent e) {
|
private void ModulDispose() {
|
||||||
Console.WriteLine("CRON: " + e.Address + " set " + e.Property + " to " + e.Value);
|
foreach (KeyValuePair<String, AModul> item in this.moduls) {
|
||||||
|
item.Value.Dispose();
|
||||||
|
Console.WriteLine("Modul entladen: " + item.Key);
|
||||||
|
}
|
||||||
|
this.zw.Dispose();
|
||||||
|
this.sig_thread.Abort();
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void ZwayDataUpate(Object sender, BlubbFish.IoT.Zway.Events.DeviceUpdateEvent e) {
|
private void ModulEvents() {
|
||||||
Console.WriteLine("-> ZW [" + e.UpdateTime + "]: " + sender.ToString());
|
foreach (KeyValuePair<String, AModul> item in this.moduls) {
|
||||||
|
item.Value.Update += this.ModulUpdate;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ModulUpdate(Object sender, ModulEventArgs e) {
|
||||||
|
Console.WriteLine(e.ToString());
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ModulLoader() {
|
||||||
|
Assembly asm = Assembly.GetExecutingAssembly();
|
||||||
|
foreach (Type item in asm.GetTypes()) {
|
||||||
|
if(item.Namespace == "ZwayBot.Moduls") {
|
||||||
|
Type t = item;
|
||||||
|
String name = t.Name;
|
||||||
|
if (InIReader.ConfigExist(name.ToLower())) {
|
||||||
|
this.moduls.Add(name, (AModul)t.GetConstructor(new Type[] { typeof(ZwayController), typeof(InIReader) }).Invoke(new Object[] { this.zw, InIReader.GetInstance(name.ToLower()) }));
|
||||||
|
Console.WriteLine("Load Modul " + name);
|
||||||
|
} else if(t.HasInterface("IForceLoad")) {
|
||||||
|
this.moduls.Add(name, (AModul)t.GetConstructor(new Type[] { typeof(ZwayController), typeof(InIReader) }).Invoke(new Object[] { this.zw, null }));
|
||||||
|
Console.WriteLine("Load Modul Forced " + name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ZwayDataUpate(Object sender, BlubbFish.IoT.Zway.Events.DeviceUpdateEvent e) {
|
||||||
|
Console.WriteLine("-> ZW [" + e.UpdateTime + "]: " + e.Parent.ToString());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,17 +1,17 @@
|
|||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using System.Runtime.CompilerServices;
|
using System.Resources;
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
// Allgemeine Informationen über eine Assembly werden über die folgenden
|
// Allgemeine Informationen über eine Assembly werden über die folgenden
|
||||||
// Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern,
|
// Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern,
|
||||||
// die einer Assembly zugeordnet sind.
|
// die einer Assembly zugeordnet sind.
|
||||||
[assembly: AssemblyTitle("Zway-Bot")]
|
[assembly: AssemblyTitle("Zway-Bot")]
|
||||||
[assembly: AssemblyDescription("")]
|
[assembly: AssemblyDescription("Is a Bot for Zwave Devices")]
|
||||||
[assembly: AssemblyConfiguration("")]
|
[assembly: AssemblyConfiguration("")]
|
||||||
[assembly: AssemblyCompany("")]
|
[assembly: AssemblyCompany("BlubbFish")]
|
||||||
[assembly: AssemblyProduct("Zway-Bot")]
|
[assembly: AssemblyProduct("Zway-Bot")]
|
||||||
[assembly: AssemblyCopyright("Copyright © 2017")]
|
[assembly: AssemblyCopyright("Copyright © 2017 - 15.05.2018")]
|
||||||
[assembly: AssemblyTrademark("")]
|
[assembly: AssemblyTrademark("BlubbFish")]
|
||||||
[assembly: AssemblyCulture("")]
|
[assembly: AssemblyCulture("")]
|
||||||
|
|
||||||
// Durch Festlegen von ComVisible auf FALSE werden die Typen in dieser Assembly
|
// Durch Festlegen von ComVisible auf FALSE werden die Typen in dieser Assembly
|
||||||
@@ -27,10 +27,12 @@ using System.Runtime.InteropServices;
|
|||||||
// Hauptversion
|
// Hauptversion
|
||||||
// Nebenversion
|
// Nebenversion
|
||||||
// Buildnummer
|
// Buildnummer
|
||||||
// Revision
|
|
||||||
//
|
//
|
||||||
// Sie können alle Werte angeben oder Standardwerte für die Build- und Revisionsnummern verwenden,
|
// Sie können alle Werte angeben oder Standardwerte für die Build- und Revisionsnummern verwenden,
|
||||||
// übernehmen, indem Sie "*" eingeben:
|
// übernehmen, indem Sie "*" eingeben:
|
||||||
// [assembly: AssemblyVersion("1.0.*")]
|
// [assembly: AssemblyVersion("1.0.*")]
|
||||||
[assembly: AssemblyVersion("1.0.0.0")]
|
[assembly: AssemblyVersion("1.4.3")]
|
||||||
[assembly: AssemblyFileVersion("1.0.0.0")]
|
[assembly: AssemblyFileVersion("1.4.3")]
|
||||||
|
[assembly: NeutralResourcesLanguage("de-DE")]
|
||||||
|
|
||||||
|
// “Internet Of Things” icon by By Michael Wohlwend, US, from thenounproject.com.
|
||||||
|
|||||||
+73
@@ -0,0 +1,73 @@
|
|||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// <auto-generated>
|
||||||
|
// Dieser Code wurde von einem Tool generiert.
|
||||||
|
// Laufzeitversion:4.0.30319.42000
|
||||||
|
//
|
||||||
|
// Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn
|
||||||
|
// der Code erneut generiert wird.
|
||||||
|
// </auto-generated>
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
namespace ZwayBot.Properties {
|
||||||
|
using System;
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Eine stark typisierte Ressourcenklasse zum Suchen von lokalisierten Zeichenfolgen usw.
|
||||||
|
/// </summary>
|
||||||
|
// Diese Klasse wurde von der StronglyTypedResourceBuilder automatisch generiert
|
||||||
|
// -Klasse über ein Tool wie ResGen oder Visual Studio automatisch generiert.
|
||||||
|
// Um einen Member hinzuzufügen oder zu entfernen, bearbeiten Sie die .ResX-Datei und führen dann ResGen
|
||||||
|
// mit der /str-Option erneut aus, oder Sie erstellen Ihr VS-Projekt neu.
|
||||||
|
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")]
|
||||||
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||||
|
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||||
|
public class Resources {
|
||||||
|
|
||||||
|
private static global::System.Resources.ResourceManager resourceMan;
|
||||||
|
|
||||||
|
private static global::System.Globalization.CultureInfo resourceCulture;
|
||||||
|
|
||||||
|
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
|
||||||
|
internal Resources() {
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gibt die zwischengespeicherte ResourceManager-Instanz zurück, die von dieser Klasse verwendet wird.
|
||||||
|
/// </summary>
|
||||||
|
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
||||||
|
public static global::System.Resources.ResourceManager ResourceManager {
|
||||||
|
get {
|
||||||
|
if (object.ReferenceEquals(resourceMan, null)) {
|
||||||
|
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("ZwayBot.Properties.Resources", typeof(Resources).Assembly);
|
||||||
|
resourceMan = temp;
|
||||||
|
}
|
||||||
|
return resourceMan;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Überschreibt die CurrentUICulture-Eigenschaft des aktuellen Threads für alle
|
||||||
|
/// Ressourcenzuordnungen, die diese stark typisierte Ressourcenklasse verwenden.
|
||||||
|
/// </summary>
|
||||||
|
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
||||||
|
public static global::System.Globalization.CultureInfo Culture {
|
||||||
|
get {
|
||||||
|
return resourceCulture;
|
||||||
|
}
|
||||||
|
set {
|
||||||
|
resourceCulture = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Icon ähnlich wie (Symbol).
|
||||||
|
/// </summary>
|
||||||
|
public static System.Drawing.Icon Icon {
|
||||||
|
get {
|
||||||
|
object obj = ResourceManager.GetObject("Icon", resourceCulture);
|
||||||
|
return ((System.Drawing.Icon)(obj));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,124 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<root>
|
||||||
|
<!--
|
||||||
|
Microsoft ResX Schema
|
||||||
|
|
||||||
|
Version 2.0
|
||||||
|
|
||||||
|
The primary goals of this format is to allow a simple XML format
|
||||||
|
that is mostly human readable. The generation and parsing of the
|
||||||
|
various data types are done through the TypeConverter classes
|
||||||
|
associated with the data types.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
... ado.net/XML headers & schema ...
|
||||||
|
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||||
|
<resheader name="version">2.0</resheader>
|
||||||
|
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||||
|
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||||
|
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||||
|
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||||
|
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||||
|
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||||
|
</data>
|
||||||
|
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
|
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||||
|
<comment>This is a comment</comment>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
There are any number of "resheader" rows that contain simple
|
||||||
|
name/value pairs.
|
||||||
|
|
||||||
|
Each data row contains a name, and value. The row also contains a
|
||||||
|
type or mimetype. Type corresponds to a .NET class that support
|
||||||
|
text/value conversion through the TypeConverter architecture.
|
||||||
|
Classes that don't support this are serialized and stored with the
|
||||||
|
mimetype set.
|
||||||
|
|
||||||
|
The mimetype is used for serialized objects, and tells the
|
||||||
|
ResXResourceReader how to depersist the object. This is currently not
|
||||||
|
extensible. For a given mimetype the value must be set accordingly:
|
||||||
|
|
||||||
|
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||||
|
that the ResXResourceWriter will generate, however the reader can
|
||||||
|
read any of the formats listed below.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.binary.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.soap.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||||
|
value : The object must be serialized into a byte array
|
||||||
|
: using a System.ComponentModel.TypeConverter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
-->
|
||||||
|
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||||
|
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||||
|
<xsd:element name="root" msdata:IsDataSet="true">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:choice maxOccurs="unbounded">
|
||||||
|
<xsd:element name="metadata">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="assembly">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:attribute name="alias" type="xsd:string" />
|
||||||
|
<xsd:attribute name="name" type="xsd:string" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="data">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="resheader">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:choice>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:schema>
|
||||||
|
<resheader name="resmimetype">
|
||||||
|
<value>text/microsoft-resx</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="version">
|
||||||
|
<value>2.0</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="reader">
|
||||||
|
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="writer">
|
||||||
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||||
|
<data name="Icon" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||||
|
<value>..\Resources\Icon.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||||
|
</data>
|
||||||
|
</root>
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 3.4 KiB |
@@ -0,0 +1 @@
|
|||||||
|
<svg width='200' height='200' fill="#000000" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" x="0px" y="0px" viewBox="0 0 100 100" enable-background="new 0 0 100 100" xml:space="preserve"><path d="M21,57.9v-6.5c0-2.9,2.4-5.3,5.3-5.3H41v-6.1c0-1.1,0.9-2,2-2s2,0.9,2,2v14.7c0,0.7,0.6,1.3,1.3,1.3h15.8c1.1,0,2,0.9,2,2 s-0.9,2-2,2H46.3c-2.9,0-5.3-2.4-5.3-5.3V50H26.3c-0.7,0-1.3,0.6-1.3,1.3v6.5c0,1.1-0.9,2-2,2S21,59,21,57.9z M79.8,72.9 c-1.1,0-2,0.9-2,2v1.7c0,0.7-0.6,1.3-1.3,1.3H62.2c-0.7,0-1.3-0.6-1.3-1.3c0-3.1-3.3-5.7-6.1-5.7H42.3c-1.1,0-2,0.9-2,2s0.9,2,2,2 h12.5c0.9,0,2.1,1.1,2.1,1.7c0,2.9,2.4,5.3,5.3,5.3h14.3c2.9,0,5.3-2.4,5.3-5.3v-1.7C81.8,73.8,80.9,72.9,79.8,72.9z M36,70.1 C36,70.1,36,70.1,36,70.1l0,14.4c0,0.8-0.4,1.4-1.1,1.8l-11,5.5c-0.1,0-0.2,0.1-0.2,0.1c-0.1,0-0.1,0-0.2,0.1C23.3,92,23.2,92,23,92 c0,0,0,0,0,0c-0.2,0-0.3,0-0.5-0.1c-0.1,0-0.1,0-0.2-0.1c-0.1,0-0.2,0-0.2-0.1l-11-5.5c-0.7-0.3-1.1-1-1.1-1.8V70.2c0,0,0-0.1,0-0.1 c0-0.1,0-0.2,0-0.3c0,0,0-0.1,0-0.1c0.1-0.3,0.2-0.6,0.4-0.8c0,0,0.1-0.1,0.1-0.1c0.1-0.1,0.2-0.2,0.3-0.2c0,0,0,0,0.1-0.1 c0,0,0,0,0.1,0c0,0,0.1,0,0.1-0.1l11-5.5c0.6-0.3,1.2-0.3,1.8,0l11,5.5c0,0,0.1,0,0.1,0.1c0,0,0,0,0.1,0c0,0,0,0,0.1,0.1 c0.1,0.1,0.2,0.1,0.3,0.2c0,0,0.1,0.1,0.1,0.1c0.2,0.2,0.4,0.5,0.4,0.8c0,0,0,0.1,0,0.1C36,69.9,36,70,36,70.1z M16.4,70.2l6.6,3.3 l6.6-3.3L23,66.9L16.4,70.2z M21,76.9l-7-3.5v9.8l7,3.5V76.9z M32,73.4l-7,3.5v9.8l7-3.5V73.4z M90.3,57.5c0,6.2-5.1,11.3-11.3,11.3 s-11.3-5.1-11.3-11.3S72.8,46.2,79,46.2S90.3,51.3,90.3,57.5z M86.3,57.5c0-4-3.3-7.3-7.3-7.3s-7.3,3.3-7.3,7.3s3.3,7.3,7.3,7.3 S86.3,61.5,86.3,57.5z M29.1,26.5c-0.1-0.6,0-1.2,0.3-1.6l12-17.1c0-0.1,0.1-0.1,0.2-0.2c0.1-0.1,0.1-0.1,0.2-0.2 C42,7.1,42.5,6.9,43,6.9c0,0,0,0,0,0s0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0s0,0,0,0c0.5,0,1,0.2,1.3,0.5c0.1,0.1,0.1,0.1,0.2,0.2 c0.1,0.1,0.1,0.1,0.2,0.2l12,17.1c0.3,0.5,0.4,1.1,0.3,1.6c-0.1,0.6-0.5,1-1,1.3l-12,6c-0.1,0-0.1,0.1-0.2,0.1 c-0.1,0-0.2,0.1-0.3,0.1C43.3,34,43.2,34,43,34c-0.3,0-0.6-0.1-0.8-0.2c0,0,0,0,0,0c0,0-0.1,0-0.1,0l-12-6 C29.6,27.5,29.2,27.1,29.1,26.5z M45,28.8l7-3.5l-7-10V28.8z M34,25.2l7,3.5V15.2L34,25.2z M78.2,51.6c-2.5,0.3-4.5,2.1-4.9,4.6 c-0.2,1.1,0.5,2.1,1.6,2.3c0.1,0,0.2,0,0.4,0c0.9,0,1.8-0.7,2-1.6c0.1-0.7,0.7-1.3,1.4-1.3c1.1-0.1,1.9-1.1,1.8-2.2 C80.3,52.3,79.2,51.5,78.2,51.6z M92.9,34.5c-3.8-3.8-8.8-5.8-14.1-5.8s-10.3,2.1-14.1,5.8c-0.8,0.8-0.8,2,0,2.8 c0.8,0.8,2,0.8,2.8,0c3-3,7-4.7,11.3-4.7s8.3,1.7,11.3,4.7c0.4,0.4,0.9,0.6,1.4,0.6s1-0.2,1.4-0.6C93.7,36.5,93.7,35.3,92.9,34.5z M73.1,42.8c1.5-1.5,3.6-2.4,5.8-2.4c2.2,0,4.2,0.8,5.8,2.4c0.4,0.4,0.9,0.6,1.4,0.6s1-0.2,1.4-0.6c0.8-0.8,0.8-2,0-2.8 c-2.3-2.3-5.3-3.6-8.6-3.6c-3.2,0-6.3,1.3-8.6,3.6c-0.8,0.8-0.8,2,0,2.8C71,43.6,72.3,43.6,73.1,42.8z"/></svg>
|
||||||
|
After Width: | Height: | Size: 2.7 KiB |
+114
-3
@@ -8,9 +8,12 @@
|
|||||||
<OutputType>Exe</OutputType>
|
<OutputType>Exe</OutputType>
|
||||||
<RootNamespace>ZwayBot</RootNamespace>
|
<RootNamespace>ZwayBot</RootNamespace>
|
||||||
<AssemblyName>Zway-Bot</AssemblyName>
|
<AssemblyName>Zway-Bot</AssemblyName>
|
||||||
<TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
|
<TargetFrameworkVersion>v4.7.1</TargetFrameworkVersion>
|
||||||
<FileAlignment>512</FileAlignment>
|
<FileAlignment>512</FileAlignment>
|
||||||
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
|
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
|
||||||
|
<TargetFrameworkProfile />
|
||||||
|
<NuGetPackageImportStamp>
|
||||||
|
</NuGetPackageImportStamp>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||||
<PlatformTarget>AnyCPU</PlatformTarget>
|
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||||
@@ -31,9 +34,16 @@
|
|||||||
<ErrorReport>prompt</ErrorReport>
|
<ErrorReport>prompt</ErrorReport>
|
||||||
<WarningLevel>4</WarningLevel>
|
<WarningLevel>4</WarningLevel>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
<PropertyGroup>
|
||||||
|
<StartupObject>ZwayBot.Program</StartupObject>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup>
|
||||||
|
<ApplicationIcon>Resources\Icon.ico</ApplicationIcon>
|
||||||
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Reference Include="System" />
|
<Reference Include="System" />
|
||||||
<Reference Include="System.Core" />
|
<Reference Include="System.Core" />
|
||||||
|
<Reference Include="System.Drawing" />
|
||||||
<Reference Include="System.Xml.Linq" />
|
<Reference Include="System.Xml.Linq" />
|
||||||
<Reference Include="System.Data.DataSetExtensions" />
|
<Reference Include="System.Data.DataSetExtensions" />
|
||||||
<Reference Include="Microsoft.CSharp" />
|
<Reference Include="Microsoft.CSharp" />
|
||||||
@@ -42,14 +52,42 @@
|
|||||||
<Reference Include="System.Xml" />
|
<Reference Include="System.Xml" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<None Include="dpkg\preinst" />
|
||||||
|
<None Include="dpkg\postinst" />
|
||||||
<Compile Include="Events.cs" />
|
<Compile Include="Events.cs" />
|
||||||
<Compile Include="CronJob.cs" />
|
<Compile Include="Interfaces\IForceLoad.cs" />
|
||||||
|
<Compile Include="Moduls\AModul.cs" />
|
||||||
|
<Compile Include="Moduls\CronJob.cs" />
|
||||||
<Compile Include="Helper.cs" />
|
<Compile Include="Helper.cs" />
|
||||||
<Compile Include="Overtaker.cs" />
|
<Compile Include="Moduls\Mqtt.cs" />
|
||||||
|
<Compile Include="Moduls\Overtaker.cs" />
|
||||||
|
<Compile Include="Moduls\Senml.cs" />
|
||||||
|
<Compile Include="Moduls\StatusPolling.cs" />
|
||||||
<Compile Include="Program.cs" />
|
<Compile Include="Program.cs" />
|
||||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||||
|
<Compile Include="Properties\Resources.Designer.cs">
|
||||||
|
<AutoGen>True</AutoGen>
|
||||||
|
<DesignTime>True</DesignTime>
|
||||||
|
<DependentUpon>Resources.resx</DependentUpon>
|
||||||
|
</Compile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\..\Librarys\litjson\litjson\litjson_4.7.1.csproj">
|
||||||
|
<Project>{91a14cd2-2940-4500-8193-56d37edddbaa}</Project>
|
||||||
|
<Name>litjson_4.7.1</Name>
|
||||||
|
</ProjectReference>
|
||||||
|
<ProjectReference Include="..\..\Utils\IoT\Connector\Data\Mqtt\ConnectorDataMqtt.csproj">
|
||||||
|
<Project>{ee6c8f68-ed46-4c1c-abdd-cfcdf75104f2}</Project>
|
||||||
|
<Name>ConnectorDataMqtt</Name>
|
||||||
|
</ProjectReference>
|
||||||
|
<ProjectReference Include="..\..\Utils\IoT\Interfaces\Iot-Interfaces.csproj">
|
||||||
|
<Project>{4daada29-c600-4cf3-8ad3-9c97c8d7f632}</Project>
|
||||||
|
<Name>Iot-Interfaces</Name>
|
||||||
|
</ProjectReference>
|
||||||
|
<ProjectReference Include="..\..\Utils\IoT\Utils-IoT.csproj">
|
||||||
|
<Project>{b870e4d5-6806-4a0b-b233-8907eedc5afc}</Project>
|
||||||
|
<Name>Utils-IoT</Name>
|
||||||
|
</ProjectReference>
|
||||||
<ProjectReference Include="..\..\Utils\Utils\Utils.csproj">
|
<ProjectReference Include="..\..\Utils\Utils\Utils.csproj">
|
||||||
<Project>{fac8ce64-bf13-4ece-8097-aeb5dd060098}</Project>
|
<Project>{fac8ce64-bf13-4ece-8097-aeb5dd060098}</Project>
|
||||||
<Name>Utils</Name>
|
<Name>Utils</Name>
|
||||||
@@ -59,5 +97,78 @@
|
|||||||
<Name>Zway</Name>
|
<Name>Zway</Name>
|
||||||
</ProjectReference>
|
</ProjectReference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<None Include="control\control.sh">
|
||||||
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
|
</None>
|
||||||
|
<None Include="control\join.sh">
|
||||||
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
|
</None>
|
||||||
|
<None Include="control\loop.sh">
|
||||||
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
|
</None>
|
||||||
|
<None Include="control\restart.sh">
|
||||||
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
|
</None>
|
||||||
|
<None Include="control\settings.cfg">
|
||||||
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
|
</None>
|
||||||
|
<None Include="control\start.sh">
|
||||||
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
|
</None>
|
||||||
|
<None Include="control\stop.sh">
|
||||||
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
|
</None>
|
||||||
|
<None Include="control\stuff.sh">
|
||||||
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
|
</None>
|
||||||
|
<None Include="control\view.sh">
|
||||||
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
|
</None>
|
||||||
|
<None Include="config-example\cronjob.conf.example">
|
||||||
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
|
</None>
|
||||||
|
<None Include="config-example\names.conf.example">
|
||||||
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
|
</None>
|
||||||
|
<None Include="config-example\senml.conf.example">
|
||||||
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
|
</None>
|
||||||
|
<None Include="config-example\settings.conf.example">
|
||||||
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
|
</None>
|
||||||
|
<None Include="config-example\statuspolling.conf.example">
|
||||||
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
|
</None>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<None Include="config-example\mqtt.conf.example">
|
||||||
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
|
</None>
|
||||||
|
<None Include="config-example\overtaker.conf.example">
|
||||||
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
|
</None>
|
||||||
|
<None Include="dpkg\control" />
|
||||||
|
<None Include="dpkg\create-Builds.bat" />
|
||||||
|
<None Include="dpkg\make-deb.sh" />
|
||||||
|
<None Include="dpkg\prerm" />
|
||||||
|
<None Include="dpkg\zwaybot.service" />
|
||||||
|
<None Include="packages.config" />
|
||||||
|
<None Include="Resources\Icon.ico" />
|
||||||
|
<Content Include="Resources\icon.svg" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<EmbeddedResource Include="Properties\Resources.resx">
|
||||||
|
<Generator>PublicResXFileCodeGenerator</Generator>
|
||||||
|
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
|
||||||
|
</EmbeddedResource>
|
||||||
|
</ItemGroup>
|
||||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||||
|
<Import Project="..\packages\Mono.Posix.5.4.0.201\build\net45\Mono.Posix.targets" Condition="Exists('..\packages\Mono.Posix.5.4.0.201\build\net45\Mono.Posix.targets')" />
|
||||||
|
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
||||||
|
<PropertyGroup>
|
||||||
|
<ErrorText>Dieses Projekt verweist auf mindestens ein NuGet-Paket, das auf diesem Computer fehlt. Verwenden Sie die Wiederherstellung von NuGet-Paketen, um die fehlenden Dateien herunterzuladen. Weitere Informationen finden Sie unter "http://go.microsoft.com/fwlink/?LinkID=322105". Die fehlende Datei ist "{0}".</ErrorText>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Error Condition="!Exists('..\packages\Mono.Posix.5.4.0.201\build\net45\Mono.Posix.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Mono.Posix.5.4.0.201\build\net45\Mono.Posix.targets'))" />
|
||||||
|
</Target>
|
||||||
</Project>
|
</Project>
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,10 @@
|
|||||||
|
[modul]
|
||||||
|
config=public
|
||||||
|
|
||||||
|
[cold]
|
||||||
|
cron=0 23 * * 0-4
|
||||||
|
set=7-0-67-2:Level-19;7-0-112-8:Level-2
|
||||||
|
|
||||||
|
[hot]
|
||||||
|
cron=0 16 * * 1-5
|
||||||
|
set=7-0-67-1:Level-22;7-0-112-8:Level-1
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
[modul]
|
||||||
|
config=private
|
||||||
|
|
||||||
|
[settings]
|
||||||
|
type=mqtt
|
||||||
|
server=localhost
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
[names]
|
||||||
|
2-0-37=Kühlschrank Schalter
|
||||||
|
2-0-49-4=Kühlschrank Leistung
|
||||||
|
2-0-50-0=Kühlschrank Verbrauch [kWh]
|
||||||
|
2-0-50-2=Kühlschrank Verbrauch [Wh]
|
||||||
|
2-0-112-1=Kühlschrank Config (Immer AN)
|
||||||
|
2-0-112-16=Kühlschrank Config (Zurück zu altem Status nach Stromausfall)
|
||||||
|
2-0-112-34=Kühlschrank Config (Reaktion auf Alarm)
|
||||||
|
2-0-112-35=Kühlschrank Config (Antwort auf Alarmmeldung)
|
||||||
|
2-0-112-39=Kühlschrank Config (Alarm Dauer)
|
||||||
|
2-0-112-40=Kühlschrank Config (Sofortiger Bericht über Stromverbrauch)
|
||||||
|
2-0-112-42=Kühlschrank Config (Änderung der Leistung zum Generieren eines Reports)
|
||||||
|
2-0-112-43=Kühlschrank Config (Regelmäßiges Senden eines Reports über die Stromaufnahme)
|
||||||
|
2-0-112-45=Kühlschrank Config (Automatisches Senden eines Reportes über Stromverbrauch bei Verbrauchsänderung)
|
||||||
|
2-0-112-47=Kühlschrank Config (Zeitinterval zum Senden eines Reportes ohne Änderung im Verbrauch)
|
||||||
|
2-0-112-49=Kühlschrank Config (Messen des Eigenstromverbrauches)
|
||||||
|
2-0-112-50=Kühlschrank Config (unterer Leistungsschwellwert)
|
||||||
|
2-0-112-51=Kühlschrank Config (oberer Leistungsschwellwert)
|
||||||
|
2-0-112-52=Kühlschrank Config (Aktion bei Erreichen des definierten Schwellwertes (Parameter 50/51))
|
||||||
|
2-0-112-60=Kühlschrank Config (Leistungsschwellwert für violettes Blinken)
|
||||||
|
2-0-112-61=Kühlschrank Config (LED Ring Farbe im Einschaltzustand)
|
||||||
|
2-0-112-62=Kühlschrank Config (LED Ring Farbe im Ausschaltzustand)
|
||||||
|
2-0-112-63=Kühlschrank Config (LED Ring Farbe bei Z-Wave Alarmmeldungen)
|
||||||
|
2-0-112-70=Kühlschrank Config (Überlastabschaltung)
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
[hot]
|
||||||
|
from=7-0-67-1:Level
|
||||||
|
to=8-0-67-1:Level;9-0-67-1:Level
|
||||||
|
|
||||||
|
[cold]
|
||||||
|
from=7-0-67-2:Level
|
||||||
|
to=8-0-67-11:Level;9-0-67-11:Level
|
||||||
|
|
||||||
|
[mode]
|
||||||
|
from=7-0-112-8:Level
|
||||||
|
to=8-0-64:Level;9-0-64:Level
|
||||||
|
convert=1-1;2-11
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
[modul]
|
||||||
|
config=private
|
||||||
|
|
||||||
|
[settings]
|
||||||
|
type=mqtt
|
||||||
|
server=localhost
|
||||||
|
guid=linksmart-zwaybot
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
[zway]
|
||||||
|
server=localhost
|
||||||
|
user=admin
|
||||||
|
pass=pass
|
||||||
|
|
||||||
|
[logging]
|
||||||
|
path=/var/log/zwaybot.log
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
[temp]
|
||||||
|
cron=30 * * * *
|
||||||
|
devices=7-0-49-1,8-0-49-1,9-0-49-1,10-0-49-1,11-0-49-1
|
||||||
Executable
+92
@@ -0,0 +1,92 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Read Settings
|
||||||
|
DIR=`dirname $0`
|
||||||
|
source $DIR/settings.cfg
|
||||||
|
cd $control_root
|
||||||
|
|
||||||
|
|
||||||
|
for(( ; ; ))
|
||||||
|
do
|
||||||
|
# Test for Running Servers
|
||||||
|
servers=$(./view.sh | grep $screen_name)
|
||||||
|
|
||||||
|
clear
|
||||||
|
|
||||||
|
if [[ -z $servers ]];
|
||||||
|
then
|
||||||
|
echo "Zway-Bot not Running!"
|
||||||
|
echo ""
|
||||||
|
echo "1) Start Zway-Bot"
|
||||||
|
|
||||||
|
else
|
||||||
|
echo "Zway-Bot is Running :)"
|
||||||
|
echo ""
|
||||||
|
echo "2) Stop Zway-Bot"
|
||||||
|
echo "3) Restart Zway-Bot"
|
||||||
|
echo "4) Attach to Servers Screen-Session"
|
||||||
|
echo "5) Put Command to Zway-Bot"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "q) Quit"
|
||||||
|
echo ""
|
||||||
|
read -p "Choice: " choice
|
||||||
|
|
||||||
|
case "$choice" in
|
||||||
|
q) #Quit
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
1) #Start Server
|
||||||
|
if [[ -z $servers ]];
|
||||||
|
then
|
||||||
|
echo "Starting Zway-Bot..."
|
||||||
|
./start.sh
|
||||||
|
else
|
||||||
|
echo "Zway-Bot Allready started!"
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
|
||||||
|
2) #Stop Server
|
||||||
|
if [[ -z $servers ]];
|
||||||
|
then
|
||||||
|
echo "Zway-Bot is not Running!"
|
||||||
|
else
|
||||||
|
echo "Stopping Zway-Bot..."
|
||||||
|
./stop.sh
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
|
||||||
|
3) #Restart Server
|
||||||
|
if [[ -z $servers ]];
|
||||||
|
then
|
||||||
|
echo "Zway-Bot is not Running!"
|
||||||
|
else
|
||||||
|
echo "Restarting Zway-Bot..."
|
||||||
|
./restart.sh
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
|
||||||
|
4) #Attach to Screen
|
||||||
|
if [[ -z $servers ]];
|
||||||
|
then
|
||||||
|
echo "Zway-Bot is not Running!"
|
||||||
|
else
|
||||||
|
./join.sh
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
|
||||||
|
5) #Put Command to Server
|
||||||
|
if [[ -z $servers ]];
|
||||||
|
then
|
||||||
|
echo "Zway-Bot is not Running!"
|
||||||
|
else
|
||||||
|
read -p "Please enter Zway-Bot-Command: " mc_cmd
|
||||||
|
./stuff.sh "$mc_cmd"
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
|
||||||
|
*) #Invalid Selection
|
||||||
|
echo "Wrong Selection!"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
Executable
+10
@@ -0,0 +1,10 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Read Settings
|
||||||
|
DIR=`dirname $0`
|
||||||
|
source $DIR/settings.cfg
|
||||||
|
|
||||||
|
echo Press STRG+A then D to detach from Console
|
||||||
|
read -p "Press [Enter] to continue..."
|
||||||
|
|
||||||
|
screen -R $screen_name
|
||||||
Executable
+21
@@ -0,0 +1,21 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Read Settings
|
||||||
|
DIR=`dirname $0`
|
||||||
|
source $DIR/settings.cfg
|
||||||
|
|
||||||
|
rm $control_root/stop_server.info
|
||||||
|
|
||||||
|
for(( ; ; ))
|
||||||
|
do
|
||||||
|
if [ ! -e $control_root/stop_server.info ];
|
||||||
|
then
|
||||||
|
cd $mc_root
|
||||||
|
$mc_cmd
|
||||||
|
else
|
||||||
|
echo "Stopped Server!"
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
rm $control_root/stop_server.info
|
||||||
Executable
+28
@@ -0,0 +1,28 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Read Settings
|
||||||
|
DIR=`dirname $0`
|
||||||
|
source $DIR/settings.cfg
|
||||||
|
cd $control_root
|
||||||
|
|
||||||
|
# Be Shure theere is no Stop-Info
|
||||||
|
rm $control_root/stop_server.info
|
||||||
|
|
||||||
|
echo "Server will be restarted in 5 Seconds..."
|
||||||
|
./stuff.sh "/say ReStarting Server in 5 seconds!"
|
||||||
|
sleep 1
|
||||||
|
echo "4..."
|
||||||
|
./stuff.sh "/say 4..."
|
||||||
|
sleep 1
|
||||||
|
echo "3..."
|
||||||
|
./stuff.sh "/say 3..."
|
||||||
|
sleep 1
|
||||||
|
echo "2..."
|
||||||
|
./stuff.sh "/say 2..."
|
||||||
|
sleep 1
|
||||||
|
echo "1..."
|
||||||
|
./stuff.sh "/say 1..."
|
||||||
|
sleep 1
|
||||||
|
echo "Restarting Server..."
|
||||||
|
./stuff.sh "/say Restart Now!"
|
||||||
|
./stuff.sh "stop"
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Minecraft Control-Scripts Config-File
|
||||||
|
|
||||||
|
# (please remember that there are no spaces allowed around the =-Sign
|
||||||
|
# in the config-lines)
|
||||||
|
|
||||||
|
# Minecraft-Dir & JAR
|
||||||
|
|
||||||
|
# Directory where minecraft is in
|
||||||
|
mc_root="/home/pi/Zway-Bot"
|
||||||
|
|
||||||
|
# Root of Control-Scripts
|
||||||
|
control_root="$mc_root/control"
|
||||||
|
|
||||||
|
|
||||||
|
# MC-Server-Jar (will be executed in mc_root)
|
||||||
|
mc_jar="$mc_root/Zway-Bot.exe"
|
||||||
|
|
||||||
|
# MC-Server Start-Command
|
||||||
|
mc_cmd="mono $mc_jar"
|
||||||
|
|
||||||
|
# Screen
|
||||||
|
screen_name="Zway-Bot"
|
||||||
Executable
+14
@@ -0,0 +1,14 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Read Settings
|
||||||
|
DIR=`dirname $0`
|
||||||
|
source $DIR/settings.cfg
|
||||||
|
|
||||||
|
# Start Loop in Screen
|
||||||
|
screen -A -m -d -S $screen_name $control_root/loop.sh
|
||||||
|
|
||||||
|
# Allow other users to control this screen-Session!
|
||||||
|
screen -r $screen_name -X multiuser on
|
||||||
|
screen -r $screen_name -X addacl www-data
|
||||||
|
screen -r $screen_name -X addacl mc
|
||||||
|
screen -r $screen_name -X addacl mw
|
||||||
Executable
+13
@@ -0,0 +1,13 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Read Settings
|
||||||
|
DIR=`dirname $0`
|
||||||
|
source $DIR/settings.cfg
|
||||||
|
cd $control_root
|
||||||
|
|
||||||
|
# Create Stop-Info!
|
||||||
|
touch $control_root/stop_server.info
|
||||||
|
|
||||||
|
echo "Shuting Down Server..."
|
||||||
|
./stuff.sh "/exit"
|
||||||
|
screen -R $screen_name
|
||||||
Executable
+10
@@ -0,0 +1,10 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Read Settings
|
||||||
|
DIR=`dirname $0`
|
||||||
|
source $DIR/settings.cfg
|
||||||
|
|
||||||
|
# screen -r $screen_name -X stuff "$1\n"
|
||||||
|
|
||||||
|
screen -p 0 -S $screen_name -X eval "stuff '$1'\015"
|
||||||
|
# as_user "screen -p 0 -S minecraft -X eval 'stuff \"$command\"\015'"
|
||||||
Executable
+3
@@ -0,0 +1,3 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
screen -ls
|
||||||
Binary file not shown.
@@ -0,0 +1,10 @@
|
|||||||
|
[modul]
|
||||||
|
config=public
|
||||||
|
|
||||||
|
[cold]
|
||||||
|
cron=0 23 * * 0-4
|
||||||
|
set=7-0-67-2:Level-19;7-0-112-8:Level-2
|
||||||
|
|
||||||
|
[hot]
|
||||||
|
cron=0 16 * * 1-5
|
||||||
|
set=7-0-67-1:Level-22;7-0-112-8:Level-1
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
[modul]
|
||||||
|
config=private
|
||||||
|
|
||||||
|
[settings]
|
||||||
|
type=mqtt
|
||||||
|
server=localhost
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
[names]
|
||||||
|
2-0-37=Kühlschrank Schalter
|
||||||
|
2-0-49-4=Kühlschrank Leistung
|
||||||
|
2-0-50-0=Kühlschrank Verbrauch [kWh]
|
||||||
|
2-0-50-2=Kühlschrank Verbrauch [Wh]
|
||||||
|
2-0-112-1=Kühlschrank Config (Immer AN)
|
||||||
|
2-0-112-16=Kühlschrank Config (Zurück zu altem Status nach Stromausfall)
|
||||||
|
2-0-112-34=Kühlschrank Config (Reaktion auf Alarm)
|
||||||
|
2-0-112-35=Kühlschrank Config (Antwort auf Alarmmeldung)
|
||||||
|
2-0-112-39=Kühlschrank Config (Alarm Dauer)
|
||||||
|
2-0-112-40=Kühlschrank Config (Sofortiger Bericht über Stromverbrauch)
|
||||||
|
2-0-112-42=Kühlschrank Config (Änderung der Leistung zum Generieren eines Reports)
|
||||||
|
2-0-112-43=Kühlschrank Config (Regelmäßiges Senden eines Reports über die Stromaufnahme)
|
||||||
|
2-0-112-45=Kühlschrank Config (Automatisches Senden eines Reportes über Stromverbrauch bei Verbrauchsänderung)
|
||||||
|
2-0-112-47=Kühlschrank Config (Zeitinterval zum Senden eines Reportes ohne Änderung im Verbrauch)
|
||||||
|
2-0-112-49=Kühlschrank Config (Messen des Eigenstromverbrauches)
|
||||||
|
2-0-112-50=Kühlschrank Config (unterer Leistungsschwellwert)
|
||||||
|
2-0-112-51=Kühlschrank Config (oberer Leistungsschwellwert)
|
||||||
|
2-0-112-52=Kühlschrank Config (Aktion bei Erreichen des definierten Schwellwertes (Parameter 50/51))
|
||||||
|
2-0-112-60=Kühlschrank Config (Leistungsschwellwert für violettes Blinken)
|
||||||
|
2-0-112-61=Kühlschrank Config (LED Ring Farbe im Einschaltzustand)
|
||||||
|
2-0-112-62=Kühlschrank Config (LED Ring Farbe im Ausschaltzustand)
|
||||||
|
2-0-112-63=Kühlschrank Config (LED Ring Farbe bei Z-Wave Alarmmeldungen)
|
||||||
|
2-0-112-70=Kühlschrank Config (Überlastabschaltung)
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
[hot]
|
||||||
|
from=7-0-67-1:Level
|
||||||
|
to=8-0-67-1:Level;9-0-67-1:Level
|
||||||
|
|
||||||
|
[cold]
|
||||||
|
from=7-0-67-2:Level
|
||||||
|
to=8-0-67-11:Level;9-0-67-11:Level
|
||||||
|
|
||||||
|
[mode]
|
||||||
|
from=7-0-112-8:Level
|
||||||
|
to=8-0-64:Level;9-0-64:Level
|
||||||
|
convert=1-1;2-11
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
[modul]
|
||||||
|
config=private
|
||||||
|
|
||||||
|
[settings]
|
||||||
|
type=mqtt
|
||||||
|
server=localhost
|
||||||
|
guid=linksmart-zwaybot
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
[zway]
|
||||||
|
server=localhost
|
||||||
|
user=admin
|
||||||
|
pass=pass
|
||||||
|
|
||||||
|
[logging]
|
||||||
|
path=/var/log/zwaybot.log
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
[temp]
|
||||||
|
cron=30 * * * *
|
||||||
|
devices=7-0-49-1,8-0-49-1,9-0-49-1,10-0-49-1,11-0-49-1
|
||||||
@@ -0,0 +1,92 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Read Settings
|
||||||
|
DIR=`dirname $0`
|
||||||
|
source $DIR/settings.cfg
|
||||||
|
cd $control_root
|
||||||
|
|
||||||
|
|
||||||
|
for(( ; ; ))
|
||||||
|
do
|
||||||
|
# Test for Running Servers
|
||||||
|
servers=$(./view.sh | grep $screen_name)
|
||||||
|
|
||||||
|
clear
|
||||||
|
|
||||||
|
if [[ -z $servers ]];
|
||||||
|
then
|
||||||
|
echo "Zway-Bot not Running!"
|
||||||
|
echo ""
|
||||||
|
echo "1) Start Zway-Bot"
|
||||||
|
|
||||||
|
else
|
||||||
|
echo "Zway-Bot is Running :)"
|
||||||
|
echo ""
|
||||||
|
echo "2) Stop Zway-Bot"
|
||||||
|
echo "3) Restart Zway-Bot"
|
||||||
|
echo "4) Attach to Servers Screen-Session"
|
||||||
|
echo "5) Put Command to Zway-Bot"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "q) Quit"
|
||||||
|
echo ""
|
||||||
|
read -p "Choice: " choice
|
||||||
|
|
||||||
|
case "$choice" in
|
||||||
|
q) #Quit
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
1) #Start Server
|
||||||
|
if [[ -z $servers ]];
|
||||||
|
then
|
||||||
|
echo "Starting Zway-Bot..."
|
||||||
|
./start.sh
|
||||||
|
else
|
||||||
|
echo "Zway-Bot Allready started!"
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
|
||||||
|
2) #Stop Server
|
||||||
|
if [[ -z $servers ]];
|
||||||
|
then
|
||||||
|
echo "Zway-Bot is not Running!"
|
||||||
|
else
|
||||||
|
echo "Stopping Zway-Bot..."
|
||||||
|
./stop.sh
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
|
||||||
|
3) #Restart Server
|
||||||
|
if [[ -z $servers ]];
|
||||||
|
then
|
||||||
|
echo "Zway-Bot is not Running!"
|
||||||
|
else
|
||||||
|
echo "Restarting Zway-Bot..."
|
||||||
|
./restart.sh
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
|
||||||
|
4) #Attach to Screen
|
||||||
|
if [[ -z $servers ]];
|
||||||
|
then
|
||||||
|
echo "Zway-Bot is not Running!"
|
||||||
|
else
|
||||||
|
./join.sh
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
|
||||||
|
5) #Put Command to Server
|
||||||
|
if [[ -z $servers ]];
|
||||||
|
then
|
||||||
|
echo "Zway-Bot is not Running!"
|
||||||
|
else
|
||||||
|
read -p "Please enter Zway-Bot-Command: " mc_cmd
|
||||||
|
./stuff.sh "$mc_cmd"
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
|
||||||
|
*) #Invalid Selection
|
||||||
|
echo "Wrong Selection!"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Read Settings
|
||||||
|
DIR=`dirname $0`
|
||||||
|
source $DIR/settings.cfg
|
||||||
|
|
||||||
|
echo Press STRG+A then D to detach from Console
|
||||||
|
read -p "Press [Enter] to continue..."
|
||||||
|
|
||||||
|
screen -R $screen_name
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Read Settings
|
||||||
|
DIR=`dirname $0`
|
||||||
|
source $DIR/settings.cfg
|
||||||
|
|
||||||
|
rm $control_root/stop_server.info
|
||||||
|
|
||||||
|
for(( ; ; ))
|
||||||
|
do
|
||||||
|
if [ ! -e $control_root/stop_server.info ];
|
||||||
|
then
|
||||||
|
cd $mc_root
|
||||||
|
$mc_cmd
|
||||||
|
else
|
||||||
|
echo "Stopped Server!"
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
rm $control_root/stop_server.info
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Read Settings
|
||||||
|
DIR=`dirname $0`
|
||||||
|
source $DIR/settings.cfg
|
||||||
|
cd $control_root
|
||||||
|
|
||||||
|
# Be Shure theere is no Stop-Info
|
||||||
|
rm $control_root/stop_server.info
|
||||||
|
|
||||||
|
echo "Server will be restarted in 5 Seconds..."
|
||||||
|
./stuff.sh "/say ReStarting Server in 5 seconds!"
|
||||||
|
sleep 1
|
||||||
|
echo "4..."
|
||||||
|
./stuff.sh "/say 4..."
|
||||||
|
sleep 1
|
||||||
|
echo "3..."
|
||||||
|
./stuff.sh "/say 3..."
|
||||||
|
sleep 1
|
||||||
|
echo "2..."
|
||||||
|
./stuff.sh "/say 2..."
|
||||||
|
sleep 1
|
||||||
|
echo "1..."
|
||||||
|
./stuff.sh "/say 1..."
|
||||||
|
sleep 1
|
||||||
|
echo "Restarting Server..."
|
||||||
|
./stuff.sh "/say Restart Now!"
|
||||||
|
./stuff.sh "stop"
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Minecraft Control-Scripts Config-File
|
||||||
|
|
||||||
|
# (please remember that there are no spaces allowed around the =-Sign
|
||||||
|
# in the config-lines)
|
||||||
|
|
||||||
|
# Minecraft-Dir & JAR
|
||||||
|
|
||||||
|
# Directory where minecraft is in
|
||||||
|
mc_root="/home/pi/Zway-Bot"
|
||||||
|
|
||||||
|
# Root of Control-Scripts
|
||||||
|
control_root="$mc_root/control"
|
||||||
|
|
||||||
|
|
||||||
|
# MC-Server-Jar (will be executed in mc_root)
|
||||||
|
mc_jar="$mc_root/Zway-Bot.exe"
|
||||||
|
|
||||||
|
# MC-Server Start-Command
|
||||||
|
mc_cmd="mono $mc_jar"
|
||||||
|
|
||||||
|
# Screen
|
||||||
|
screen_name="Zway-Bot"
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Read Settings
|
||||||
|
DIR=`dirname $0`
|
||||||
|
source $DIR/settings.cfg
|
||||||
|
|
||||||
|
# Start Loop in Screen
|
||||||
|
screen -A -m -d -S $screen_name $control_root/loop.sh
|
||||||
|
|
||||||
|
# Allow other users to control this screen-Session!
|
||||||
|
screen -r $screen_name -X multiuser on
|
||||||
|
screen -r $screen_name -X addacl www-data
|
||||||
|
screen -r $screen_name -X addacl mc
|
||||||
|
screen -r $screen_name -X addacl mw
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Read Settings
|
||||||
|
DIR=`dirname $0`
|
||||||
|
source $DIR/settings.cfg
|
||||||
|
cd $control_root
|
||||||
|
|
||||||
|
# Create Stop-Info!
|
||||||
|
touch $control_root/stop_server.info
|
||||||
|
|
||||||
|
echo "Shuting Down Server..."
|
||||||
|
./stuff.sh "/exit"
|
||||||
|
screen -R $screen_name
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Read Settings
|
||||||
|
DIR=`dirname $0`
|
||||||
|
source $DIR/settings.cfg
|
||||||
|
|
||||||
|
# screen -r $screen_name -X stuff "$1\n"
|
||||||
|
|
||||||
|
screen -p 0 -S $screen_name -X eval "stuff '$1'\015"
|
||||||
|
# as_user "screen -p 0 -S minecraft -X eval 'stuff \"$command\"\015'"
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
screen -ls
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
Package: zwaybot
|
||||||
|
Version: x.x-x
|
||||||
|
Section: base
|
||||||
|
Priority: optional
|
||||||
|
Architecture: any
|
||||||
|
Depends: mono-complete (>= 5.4.1.6)
|
||||||
|
Maintainer: BlubbFish <dev@blubbfish.net>
|
||||||
|
Description: Zway-Bot
|
||||||
|
Zway-Bot manage a Zwave.me installation
|
||||||
|
so that it has more features
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
set /P maj=Enter Major Version:
|
||||||
|
set /P min=Enter Minor Version:
|
||||||
|
set /P bui=Enter Build Version:
|
||||||
|
|
||||||
|
bash.exe -c "./make-deb.sh %maj% %min% %bui% armhf"
|
||||||
|
pause
|
||||||
@@ -0,0 +1,37 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
WORKDIR="/home/blubb"
|
||||||
|
ROOT="$WORKDIR/deb"
|
||||||
|
OUTPUT="../bin/Release"
|
||||||
|
EXEC="$ROOT/usr/local/bin/zwaybot"
|
||||||
|
CONFIG="$ROOT/etc/zwaybot"
|
||||||
|
SYSTEMD="$ROOT/etc/systemd/system"
|
||||||
|
DEBIAN="$ROOT/DEBIAN"
|
||||||
|
VMAJOR=$1
|
||||||
|
VMINOR=$2
|
||||||
|
VBUILD=$3
|
||||||
|
ARCHT=$4
|
||||||
|
|
||||||
|
mkdir -p $EXEC
|
||||||
|
mkdir -p $CONFIG
|
||||||
|
mkdir -p $DEBIAN
|
||||||
|
mkdir -p $SYSTEMD
|
||||||
|
|
||||||
|
cp control $DEBIAN
|
||||||
|
cp preinst $DEBIAN
|
||||||
|
cp postinst $DEBIAN
|
||||||
|
cp prerm $DEBIAN
|
||||||
|
sed -i s/Version:\ x\.x-x/"Version: $VMAJOR.$VMINOR-$VBUILD"/ $DEBIAN/control
|
||||||
|
sed -i s/Architecture:\ any/"Architecture: $ARCHT"/ $DEBIAN/control
|
||||||
|
chmod 755 $DEBIAN -R
|
||||||
|
|
||||||
|
cp zwaybot.service $SYSTEMD
|
||||||
|
chmod 755 $SYSTEMD -R
|
||||||
|
|
||||||
|
cp $OUTPUT/*.exe $EXEC/
|
||||||
|
cp $OUTPUT/*.dll $EXEC/
|
||||||
|
cp $OUTPUT/config-example/* $CONFIG
|
||||||
|
cp $OUTPUT/control $EXEC/ -r
|
||||||
|
|
||||||
|
dpkg-deb --build $ROOT
|
||||||
|
mv $WORKDIR/deb.deb ../bin/Builds/$ARCHT/"zwaybot_$VMAJOR.$VMINOR-$VBUILD.deb"
|
||||||
|
rm $WORKDIR/deb -r
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
Name "Example1"
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
service zwaybot start
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
service zwaybot stop
|
||||||
|
addgroup zwaybot
|
||||||
|
adduser --system --no-create-home --disabled-login --ingroup zwaybot zwaybot
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
service zwaybot stop
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
# If you modify this, please also make sure to edit init.sh
|
||||||
|
|
||||||
|
[Unit]
|
||||||
|
Description=Zway-Bot manage a Zwave.me installation so that it has more features
|
||||||
|
After=network-online.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
User=zwaybot
|
||||||
|
Group=zwaybot
|
||||||
|
WorkingDirectory=/usr/local/bin/zwaybot
|
||||||
|
ExecStart=/usr/bin/mono /usr/local/bin/zwaybot/Zway-Bot.exe
|
||||||
|
KillMode=control-group
|
||||||
|
Restart=on-failure
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
Alias=zwaybot.service
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<packages>
|
||||||
|
<package id="Mono.Posix" version="5.4.0.201" targetFramework="net471" />
|
||||||
|
</packages>
|
||||||
Reference in New Issue
Block a user