Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
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 | ||
|
|
925131a52b | ||
|
|
8cae908a22 |
+31
-1
@@ -1,7 +1,7 @@
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio 15
|
||||
VisualStudioVersion = 15.0.26730.16
|
||||
VisualStudioVersion = 15.0.27004.2010
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Zway-Bot", "Zway-Bot\Zway-Bot.csproj", "{AEF8059F-8AEF-45C7-85C4-318C8F797900}"
|
||||
EndProject
|
||||
@@ -9,6 +9,16 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Zway", "..\Zway\Zway\Zway.c
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Utils", "..\Utils\Utils\Utils.csproj", "{FAC8CE64-BF13-4ECE-8097-AEB5DD060098}"
|
||||
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
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
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}.Release|Any CPU.ActiveCfg = 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
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
|
||||
+56
-9
@@ -1,7 +1,7 @@
|
||||
using System;
|
||||
|
||||
namespace ZwayBot {
|
||||
public class CronEvent : EventArgs {
|
||||
public class CronEvent : ModulEventArgs {
|
||||
|
||||
public CronEvent() {
|
||||
}
|
||||
@@ -10,13 +10,10 @@ namespace ZwayBot {
|
||||
this.Address = addr;
|
||||
this.Property = prop;
|
||||
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() {
|
||||
}
|
||||
@@ -25,10 +22,60 @@ namespace ZwayBot {
|
||||
this.Address = addr;
|
||||
this.Property = prop;
|
||||
this.Value = value;
|
||||
this.Source = "Overtaker";
|
||||
}
|
||||
}
|
||||
|
||||
public String Address { get; }
|
||||
public String Property { get; }
|
||||
public String Value { get; }
|
||||
public class Flex4gridEvent : ModulEventArgs {
|
||||
public Flex4gridEvent() {
|
||||
}
|
||||
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;
|
||||
|
||||
namespace ZwayBot {
|
||||
class Helper {
|
||||
public static void SetProperty(Object o, String name, String value) {
|
||||
static class Helper {
|
||||
public static void SetProperty(this Object o, String name, String value) {
|
||||
PropertyInfo prop = o.GetType().GetProperty(name);
|
||||
if (prop.CanWrite) {
|
||||
if (prop.PropertyType == typeof(Boolean) && Boolean.TryParse(value, out Boolean vb)) {
|
||||
@@ -12,12 +12,15 @@ namespace ZwayBot {
|
||||
prop.SetValue(o, v32);
|
||||
} else if (prop.PropertyType == typeof(Single) && Single.TryParse(value, out Single 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)) {
|
||||
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();
|
||||
foreach (PropertyInfo item in t.GetProperties()) {
|
||||
if (item.Name == type) {
|
||||
@@ -27,7 +30,7 @@ namespace ZwayBot {
|
||||
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);
|
||||
if(prop.CanRead) {
|
||||
return prop.GetValue(o);
|
||||
@@ -35,14 +38,45 @@ namespace ZwayBot {
|
||||
return null;
|
||||
}
|
||||
|
||||
internal static Boolean HasInterface(Object o, String type) {
|
||||
Type t = o.GetType();
|
||||
foreach (Type item in t.GetInterfaces()) {
|
||||
internal static Boolean HasAbstract(this Object o, Type type) {
|
||||
if(o.GetType().BaseType == type) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
internal static Boolean HasInterface(this Type o, String type) {
|
||||
foreach (Type item in o.GetInterfaces()) {
|
||||
if(item.Name == type) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
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.Interfaces;
|
||||
using BlubbFish.Utils;
|
||||
using ZwayBot.Interfaces;
|
||||
|
||||
namespace ZwayBot {
|
||||
internal class CronJob : IDisposable {
|
||||
private ZwayController zw;
|
||||
private InIReader ini;
|
||||
namespace ZwayBot.Moduls {
|
||||
internal class CronJob : AModul, IDisposable, IForceLoad {
|
||||
private DateTime crontime;
|
||||
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 event CronRunned Update;
|
||||
public override event ModulEvent Update;
|
||||
|
||||
private Dictionary<String, String> cron_named = new Dictionary<String, String> {
|
||||
{ "@yearly", "0 0 1 1 *" },
|
||||
@@ -26,9 +25,7 @@ namespace ZwayBot {
|
||||
{ "@hourly", "0 * * * *" }
|
||||
};
|
||||
|
||||
public CronJob(ZwayController zw) {
|
||||
this.zw = zw;
|
||||
this.ini = InIReader.GetInstance("cron.ini");
|
||||
public CronJob(ZwayController zway, InIReader settings) : base(zway, settings) {
|
||||
this.crontime = DateTime.Now;
|
||||
this.thread = new Thread(this.Runner);
|
||||
this.thread.Start();
|
||||
@@ -37,11 +34,18 @@ namespace ZwayBot {
|
||||
private void Runner() {
|
||||
Thread.Sleep(DateTime.Now.AddMinutes(1).AddSeconds(DateTime.Now.Second * (-1)).AddMilliseconds(DateTime.Now.Millisecond * (-1)) - DateTime.Now);
|
||||
while (true) {
|
||||
if(this.crontime.Minute < DateTime.Now.Minute) {
|
||||
if(this.crontime.Minute != DateTime.Now.Minute) {
|
||||
this.crontime = DateTime.Now;
|
||||
foreach (String item in this.ini.GetSections()) {
|
||||
if(ParseCronString(this.ini.GetValue(item, "cron"))) {
|
||||
this.SetValues(this.ini.GetValue(item, "set"));
|
||||
if (this.config.Count != 0) {
|
||||
foreach (KeyValuePair<String, Dictionary<String, String>> item in this.config) {
|
||||
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(';')) {
|
||||
String[] items = item.Split(':');
|
||||
if(items.Length == 2) {
|
||||
String[] addr = items[0].Split('-');
|
||||
String[] values = items[1].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);
|
||||
}
|
||||
ACommandClass c = this.zw.GetCommandClass(items[0]);
|
||||
if (c != null && values.Length == 2) {
|
||||
if (Helper.HasProperty(c, values[0])) {
|
||||
Helper.SetProperty(c, values[0], values[1]);
|
||||
if (c.HasProperty(values[0])) {
|
||||
c.SetProperty(values[0], values[1]);
|
||||
this.Update?.Invoke(this, new CronEvent(items[0], values[0], values[1]));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private Boolean ParseCronString(String str) {
|
||||
str = str.Trim();
|
||||
@@ -161,8 +153,14 @@ namespace ZwayBot {
|
||||
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
|
||||
private Boolean disposedValue = false; // Dient zur Erkennung redundanter Aufrufe.
|
||||
private Boolean disposedValue = false;
|
||||
|
||||
protected virtual void Dispose(Boolean disposing) {
|
||||
if (!this.disposedValue) {
|
||||
@@ -181,7 +179,7 @@ namespace ZwayBot {
|
||||
Dispose(false);
|
||||
}
|
||||
|
||||
public void Dispose() {
|
||||
public override void Dispose() {
|
||||
Dispose(true);
|
||||
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));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+70
-17
@@ -1,39 +1,92 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Reflection;
|
||||
using BlubbFish.IoT.Zway;
|
||||
using BlubbFish.Utils;
|
||||
|
||||
namespace ZwayBot {
|
||||
class Program {
|
||||
static void Main(String[] args) {
|
||||
ZwayController zw = new ZwayController(InIReader.GetInstance("settings.ini").GetSection("zway"), InIReader.GetInstance("names.ini").GetSection("names"), false);
|
||||
zw.Update += ZwayDataUpate;
|
||||
CronJob cron = new CronJob(zw);
|
||||
cron.Update += Cron_Update;
|
||||
Overtaker over = new Overtaker(zw);
|
||||
over.Update += Over_Update;
|
||||
static void Main(String[] args) => new Program(args);
|
||||
|
||||
private ZwayController zw;
|
||||
private Dictionary<String, AModul> moduls = new Dictionary<String, AModul>();
|
||||
|
||||
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.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() {
|
||||
while (true) {
|
||||
System.Threading.Thread.Sleep(100);
|
||||
if (Console.KeyAvailable) {
|
||||
ConsoleKeyInfo key = Console.ReadKey(false);
|
||||
if (key.Key == ConsoleKey.Escape) {
|
||||
String a = Console.ReadLine();
|
||||
if (a.EndsWith("/exit")) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
cron.Dispose();
|
||||
zw.Dispose();
|
||||
}
|
||||
|
||||
private static void Over_Update(Object sender, OvertakerEvent e) {
|
||||
Console.WriteLine("OVERTAKE: " + e.Address + " set " + e.Property + " to " + e.Value);
|
||||
private void ModulDispose() {
|
||||
foreach (KeyValuePair<String, AModul> item in this.moduls) {
|
||||
item.Value.Dispose();
|
||||
Console.WriteLine("Modul entladen: " + item.Key);
|
||||
}
|
||||
this.zw.Dispose();
|
||||
}
|
||||
|
||||
private static void Cron_Update(Object sender, CronEvent e) {
|
||||
Console.WriteLine("CRON: " + e.Address + " set " + e.Property + " to " + e.Value);
|
||||
private void ModulEvents() {
|
||||
foreach (KeyValuePair<String, AModul> item in this.moduls) {
|
||||
item.Value.Update += this.ModulUpdate;
|
||||
}
|
||||
}
|
||||
|
||||
private static void ZwayDataUpate(Object sender, BlubbFish.IoT.Zway.Events.DeviceUpdateEvent e) {
|
||||
Console.WriteLine("-> ZW [" + e.UpdateTime + "]: " + sender.ToString());
|
||||
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.Runtime.CompilerServices;
|
||||
using System.Resources;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
// Allgemeine Informationen über eine Assembly werden über die folgenden
|
||||
// Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern,
|
||||
// die einer Assembly zugeordnet sind.
|
||||
[assembly: AssemblyTitle("Zway-Bot")]
|
||||
[assembly: AssemblyDescription("")]
|
||||
[assembly: AssemblyDescription("Is a Bot for Zwave Devices")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCompany("")]
|
||||
[assembly: AssemblyCompany("BlubbFish")]
|
||||
[assembly: AssemblyProduct("Zway-Bot")]
|
||||
[assembly: AssemblyCopyright("Copyright © 2017")]
|
||||
[assembly: AssemblyTrademark("")]
|
||||
[assembly: AssemblyCopyright("Copyright © 2017 - 08.05.2018")]
|
||||
[assembly: AssemblyTrademark("BlubbFish")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
|
||||
// Durch Festlegen von ComVisible auf FALSE werden die Typen in dieser Assembly
|
||||
@@ -27,10 +27,12 @@ using System.Runtime.InteropServices;
|
||||
// Hauptversion
|
||||
// Nebenversion
|
||||
// Buildnummer
|
||||
// Revision
|
||||
//
|
||||
// Sie können alle Werte angeben oder Standardwerte für die Build- und Revisionsnummern verwenden,
|
||||
// übernehmen, indem Sie "*" eingeben:
|
||||
// [assembly: AssemblyVersion("1.0.*")]
|
||||
[assembly: AssemblyVersion("1.0.0.0")]
|
||||
[assembly: AssemblyFileVersion("1.0.0.0")]
|
||||
[assembly: AssemblyVersion("1.3.2")]
|
||||
[assembly: AssemblyFileVersion("1.3.2")]
|
||||
[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 |
+100
-6
@@ -8,9 +8,10 @@
|
||||
<OutputType>Exe</OutputType>
|
||||
<RootNamespace>ZwayBot</RootNamespace>
|
||||
<AssemblyName>Zway-Bot</AssemblyName>
|
||||
<TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
|
||||
<TargetFrameworkVersion>v4.7.1</TargetFrameworkVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
|
||||
<TargetFrameworkProfile />
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||
@@ -31,9 +32,16 @@
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup>
|
||||
<StartupObject>ZwayBot.Program</StartupObject>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup>
|
||||
<ApplicationIcon>Resources\Icon.ico</ApplicationIcon>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Core" />
|
||||
<Reference Include="System.Drawing" />
|
||||
<Reference Include="System.Xml.Linq" />
|
||||
<Reference Include="System.Data.DataSetExtensions" />
|
||||
<Reference Include="Microsoft.CSharp" />
|
||||
@@ -43,16 +51,39 @@
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<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="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="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="Properties\Resources.Designer.cs">
|
||||
<AutoGen>True</AutoGen>
|
||||
<DesignTime>True</DesignTime>
|
||||
<DependentUpon>Resources.resx</DependentUpon>
|
||||
</Compile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="App.config" />
|
||||
</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">
|
||||
<Project>{fac8ce64-bf13-4ece-8097-aeb5dd060098}</Project>
|
||||
<Name>Utils</Name>
|
||||
@@ -62,5 +93,68 @@
|
||||
<Name>Zway</Name>
|
||||
</ProjectReference>
|
||||
</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-dkpg.bat" />
|
||||
<None Include="dpkg\make-deb.sh" />
|
||||
<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" />
|
||||
</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.
@@ -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,4 @@
|
||||
[zway]
|
||||
server=localhost
|
||||
user=admin
|
||||
pass=pass
|
||||
@@ -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.
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,4 @@
|
||||
[zway]
|
||||
server=localhost
|
||||
user=admin
|
||||
pass=pass
|
||||
@@ -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: i386
|
||||
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%"
|
||||
pause
|
||||
@@ -0,0 +1,26 @@
|
||||
#!/bin/bash
|
||||
WORKDIR="/home/blubb"
|
||||
ROOT="$WORKDIR/deb"
|
||||
OUTPUT="../bin/Release"
|
||||
EXEC="$ROOT/usr/local/bin/zwaybot"
|
||||
CONFIG="$ROOT/etc/zwaybot"
|
||||
DEBIAN="$ROOT/DEBIAN"
|
||||
VMAJOR=$1
|
||||
VMINOR=$2
|
||||
VBUILD=$3
|
||||
|
||||
mkdir -p $EXEC
|
||||
mkdir -p $CONFIG
|
||||
mkdir -p $DEBIAN
|
||||
|
||||
cp control $DEBIAN
|
||||
sed -i s/Version:\ x\.x-x/"Version: $VMAJOR.$VMINOR-$VBUILD"/ $DEBIAN/control
|
||||
chmod 755 $DEBIAN -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/"zwaybot_$VMAJOR.$VMINOR-$VBUILD.deb"
|
||||
rm $WORKDIR/deb -r
|
||||
Reference in New Issue
Block a user