77 lines
2.3 KiB
C#
77 lines
2.3 KiB
C#
using System;
|
|
using System.CommandLine;
|
|
using System.CommandLine.Invocation;
|
|
using System.Globalization;
|
|
using System.IO;
|
|
using System.Reflection;
|
|
using System.Text;
|
|
using System.Text.Json;
|
|
using System.Threading;
|
|
|
|
namespace ESPServer
|
|
{
|
|
class Program
|
|
{
|
|
static JsonDocument config;
|
|
static UnitsDatabase db;
|
|
static RegistersContainer registers;
|
|
|
|
static void Main(string[] args)
|
|
{
|
|
CultureInfo.CurrentCulture = CultureInfo.InvariantCulture;
|
|
config = LoadConfig();
|
|
Logging.Setup();
|
|
db = new UnitsDatabase(config.RootElement.GetProperty("units"));
|
|
registers = new RegistersContainer();
|
|
var rootCommand = new RootCommand();
|
|
var runCommand = new Command("run")
|
|
{
|
|
};
|
|
runCommand.Handler = CommandHandler.Create<string>(RunService);
|
|
rootCommand.AddCommand(runCommand);
|
|
var openhabConfigCommand = new Command("openhab-config")
|
|
{
|
|
};
|
|
openhabConfigCommand.Handler = CommandHandler.Create<string>(GenerateOpenhabConfig);
|
|
rootCommand.AddCommand(openhabConfigCommand);
|
|
rootCommand.InvokeAsync(args).Wait();
|
|
}
|
|
|
|
private static void GenerateOpenhabConfig(string obj)
|
|
{
|
|
var root = config.RootElement;
|
|
StringBuilder thingsConfig = new StringBuilder();
|
|
StringBuilder itemsConfig = new StringBuilder();
|
|
thingsConfig.AppendFormat("Bridge modbus:tcp:{0} [ host=\"{1}\", port={2}, id=1 ] {{\n",
|
|
"esp_server",
|
|
root.GetProperty("IP").GetString(),
|
|
root.GetProperty("modbusPort").GetInt32());
|
|
//
|
|
db.GenerateThingsConfig(thingsConfig);
|
|
db.GenerateItemsConfig(itemsConfig);
|
|
//
|
|
thingsConfig.Append("}\n");
|
|
|
|
File.WriteAllText("esp_server.things", thingsConfig.ToString());
|
|
File.WriteAllText("esp_server.items", itemsConfig.ToString());
|
|
}
|
|
|
|
private static void RunService(string obj)
|
|
{
|
|
var unitReceiver = new UnitDataReceiver(config.RootElement.GetProperty("port").GetInt32(), db, registers);
|
|
unitReceiver.Start();
|
|
var modbusServer = new ModbusServer(registers);
|
|
modbusServer.Port = config.RootElement.GetProperty("modbusPort").GetInt32();
|
|
modbusServer.Run();
|
|
}
|
|
|
|
private static JsonDocument LoadConfig()
|
|
{
|
|
string assemblyFolder = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
|
|
var config = Path.Combine(assemblyFolder, "esp_server.json");
|
|
string configStr = File.ReadAllText(config);
|
|
return JsonDocument.Parse(configStr);
|
|
}
|
|
}
|
|
}
|