Сервер для сбора данных с термодатчиковых модулей
This commit is contained in:
@@ -0,0 +1,76 @@
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user