Skip to content
This repository was archived by the owner on Oct 5, 2025. It is now read-only.

Commit 4f6df25

Browse files
committed
auto reconnect hwinfo
1 parent f1a406b commit 4f6df25

File tree

5 files changed

+76
-70
lines changed

5 files changed

+76
-70
lines changed

fipha/App.xaml.cs

Lines changed: 55 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -221,22 +221,6 @@ protected override void OnStartup(StartupEventArgs evtArgs)
221221
Log.Error("No Home Assistant Connection for Flight Instrument Panels");
222222
}
223223

224-
splashScreen.Dispatcher.Invoke(() =>
225-
splashScreen.ProgressText.Text = "Getting sensor data from HWInfo...");
226-
227-
HWInfo.ReadMem("HWINFO.INC");
228-
229-
if (HWInfo.SensorData.Any())
230-
{
231-
Log.Info($"Writing {HWInfo.SensorData.Count} HWINFO Sensors to hwinfo.json");
232-
233-
HWInfo.SaveDataToFile(@"Data\hwinfo.json");
234-
}
235-
else
236-
{
237-
Log.Error("No HWINFO Sensors Found");
238-
}
239-
240224
Dispatcher.Invoke(() =>
241225
{
242226
var window = Current.MainWindow = new MainWindow();
@@ -403,51 +387,64 @@ protected override void OnStartup(StartupEventArgs evtArgs)
403387

404388
MQTT.FillConfig();
405389

406-
if (File.Exists(Path.Combine(App.ExePath, "mqtt.config")) && HWInfo.SensorData.Any())
390+
var incPath = Path.Combine(App.ExePath, "HWINFO.INC");
391+
392+
var onlyOnce = true;
393+
394+
if (File.Exists(Path.Combine(App.ExePath, "mqtt.config")) && File.Exists(incPath))
407395
{
408396
HWInfoTask = Task.Run(async () =>
409397
{
410-
await MQTT.Connect();
398+
await MQTT.Connect();
411399

412400
Log.Info($"HWInfo task started, polling interval {MQTT.MqttPollingInterval} ms");
413401

414-
if (HWInfo.SensorData.Any())
402+
while (true)
415403
{
416-
foreach (var sensor in HWInfo.SensorData)
404+
if (hwInfoToken.IsCancellationRequested)
417405
{
418-
foreach (var element in sensor.Value.Elements)
419-
{
420-
var mqttValue = JsonConvert.SerializeObject(new HWInfo.MQTTDiscoveryObj
421-
{
422-
device_class = element.Value.DeviceClass,
423-
name = element.Value.Name,
424-
state_topic =
425-
$"homeassistant/{element.Value.Component}/{element.Value.Node}/state",
426-
unit_of_measurement = element.Value.Unit,
427-
value_template = "{{ value_json.value}}",
428-
unique_id = element.Value.Node,
429-
state_class = "measurement"
430-
}, new JsonSerializerSettings
431-
{
432-
NullValueHandling = NullValueHandling.Ignore
433-
});
434-
435-
await MQTT.Publish(
436-
$"homeassistant/{element.Value.Component}/{element.Value.Node}/config",
437-
mqttValue);
438-
439-
}
406+
hwInfoToken.ThrowIfCancellationRequested();
440407
}
441408

442-
while (true)
409+
HWInfo.ReadMem();
410+
411+
if (HWInfo.SensorData.Any())
443412
{
444-
if (hwInfoToken.IsCancellationRequested)
413+
if (onlyOnce)
445414
{
446-
hwInfoToken.ThrowIfCancellationRequested();
447-
}
415+
onlyOnce = false;
416+
417+
Log.Info($"HWINFO Sensors found, Writing all HWINFO Sensors to hwinfo.json");
418+
419+
HWInfo.SaveDataToFile(@"Data\hwinfo.json");
420+
421+
foreach (var sensor in HWInfo.SensorData)
422+
{
423+
foreach (var element in sensor.Value.Elements)
424+
{
425+
var mqttValue = JsonConvert.SerializeObject(new HWInfo.MQTTDiscoveryObj
426+
{
427+
device_class = element.Value.DeviceClass,
428+
name = element.Value.Name,
429+
state_topic =
430+
$"homeassistant/{element.Value.Component}/{element.Value.Node}/state",
431+
unit_of_measurement = element.Value.Unit,
432+
value_template = "{{ value_json.value}}",
433+
unique_id = element.Value.Node,
434+
state_class = "measurement"
435+
}, new JsonSerializerSettings
436+
{
437+
NullValueHandling = NullValueHandling.Ignore
438+
});
448439

449-
HWInfo.ReadMem("HWINFO.INC");
440+
await MQTT.Publish(
441+
$"homeassistant/{element.Value.Component}/{element.Value.Node}/config",
442+
mqttValue);
450443

444+
}
445+
}
446+
}
447+
451448
foreach (var sensor in HWInfo.SensorData)
452449
{
453450
foreach (var element in sensor.Value.Elements)
@@ -463,11 +460,20 @@ await MQTT.Publish(
463460
}
464461

465462
}
466-
463+
467464
//!!!FipHandler.RefreshHWInfoPages();
465+
}
466+
else
467+
{
468+
Log.Error("No HWINFO Sensors Found");
468469

469-
await Task.Delay(MQTT.MqttPollingInterval, _hwInfoTokenSource.Token); // repeat every 5 seconds
470+
onlyOnce = true;
471+
472+
Thread.Sleep(5000);
470473
}
474+
475+
await Task.Delay(MQTT.MqttPollingInterval,
476+
_hwInfoTokenSource.Token); // repeat every 5 seconds
471477
}
472478

473479
}, hwInfoToken);

fipha/HWInfo.cs

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -349,37 +349,37 @@ public static string DeviceClass(SENSOR_TYPE sensorType, string unit)
349349

350350
return deviceClass;
351351
}
352-
public static void ReadMem(string incPath)
352+
public static void ReadMem()
353353
{
354354
lock (RefreshHWInfoLock)
355355
{
356356
try
357357
{
358-
var mmf = MemoryMappedFile.OpenExisting(HWINFO_SHARED_MEM_FILE_NAME, MemoryMappedFileRights.Read);
359-
var accessor = mmf.CreateViewAccessor(0L, Marshal.SizeOf(typeof(_HWiNFO_SHARED_MEM)), MemoryMappedFileAccess.Read);
360-
358+
var mmf = MemoryMappedFile.OpenExisting(HWINFO_SHARED_MEM_FILE_NAME,
359+
MemoryMappedFileRights.Read);
360+
var accessor = mmf.CreateViewAccessor(0L, Marshal.SizeOf(typeof(_HWiNFO_SHARED_MEM)),
361+
MemoryMappedFileAccess.Read);
362+
361363
accessor.Read(0L, out _HWiNFO_SHARED_MEM hWiNFOMemory);
362-
364+
363365
ReadSensors(mmf, hWiNFOMemory);
364366

365367
if (IncData == null)
366368
{
367-
incPath = Path.Combine(App.ExePath, incPath);
369+
var parser = new FileIniDataParser();
368370

369-
if (File.Exists(incPath))
370-
{
371-
var parser = new FileIniDataParser();
371+
var incPath = Path.Combine(App.ExePath, "HWINFO.INC");
372372

373-
IncData = parser.ReadFile(incPath);
374-
}
373+
IncData = parser.ReadFile(incPath);
375374
}
376375

377376
ParseIncFile();
378-
377+
379378
}
380379
catch (Exception ex)
381380
{
382-
Log.Error("HWINFO Shared Memory Read Problem", ex);
381+
SensorData = new Dictionary<int, SensorObj>();
382+
Log.Error($"HWINFO Shared Memory Read Problem {HWINFO_SHARED_MEM_FILE_NAME}", ex);
383383
}
384384
}
385385
}

fipha/Properties/AssemblyInfo.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
// You can specify all the values or you can default the Build and Revision Numbers
3232
// by using the '*' as shown below:
3333
// [assembly: AssemblyVersion("1.0.*")]
34-
[assembly: AssemblyVersion("0.0.1.1")]
35-
[assembly: AssemblyFileVersion("0.0.1.1")]
34+
[assembly: AssemblyVersion("0.0.1.2")]
35+
[assembly: AssemblyFileVersion("0.0.1.2")]
3636

3737
[assembly: log4net.Config.XmlConfigurator(Watch = true)]

fipha/fipha.csproj

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -92,11 +92,11 @@
9292
<Reference Include="Microsoft.Win32.Registry, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
9393
<HintPath>..\packages\Microsoft.Win32.Registry.5.0.0\lib\net461\Microsoft.Win32.Registry.dll</HintPath>
9494
</Reference>
95-
<Reference Include="MQTTnet, Version=4.1.2.350, Culture=neutral, PublicKeyToken=fdb7629f2e364a63, processorArchitecture=MSIL">
96-
<HintPath>..\packages\MQTTnet.4.1.2.350\lib\net461\MQTTnet.dll</HintPath>
95+
<Reference Include="MQTTnet, Version=4.1.3.436, Culture=neutral, PublicKeyToken=fdb7629f2e364a63, processorArchitecture=MSIL">
96+
<HintPath>..\packages\MQTTnet.4.1.3.436\lib\net461\MQTTnet.dll</HintPath>
9797
</Reference>
98-
<Reference Include="MQTTnet.Extensions.ManagedClient, Version=4.1.2.350, Culture=neutral, PublicKeyToken=fdb7629f2e364a63, processorArchitecture=MSIL">
99-
<HintPath>..\packages\MQTTnet.Extensions.ManagedClient.4.1.2.350\lib\net461\MQTTnet.Extensions.ManagedClient.dll</HintPath>
98+
<Reference Include="MQTTnet.Extensions.ManagedClient, Version=4.1.3.436, Culture=neutral, PublicKeyToken=fdb7629f2e364a63, processorArchitecture=MSIL">
99+
<HintPath>..\packages\MQTTnet.Extensions.ManagedClient.4.1.3.436\lib\net461\MQTTnet.Extensions.ManagedClient.dll</HintPath>
100100
</Reference>
101101
<Reference Include="Newtonsoft.Json, Version=13.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
102102
<HintPath>..\packages\Newtonsoft.Json.13.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>

fipha/packages.config

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@
1010
<package id="Microsoft.Bcl.AsyncInterfaces" version="7.0.0" targetFramework="net48" />
1111
<package id="Microsoft.CSharp" version="4.7.0" targetFramework="net472" />
1212
<package id="Microsoft.Win32.Registry" version="5.0.0" targetFramework="net472" />
13-
<package id="MQTTnet" version="4.1.2.350" targetFramework="net48" />
14-
<package id="MQTTnet.Extensions.ManagedClient" version="4.1.2.350" targetFramework="net48" />
13+
<package id="MQTTnet" version="4.1.3.436" targetFramework="net48" />
14+
<package id="MQTTnet.Extensions.ManagedClient" version="4.1.3.436" targetFramework="net48" />
1515
<package id="Newtonsoft.Json" version="13.0.1" targetFramework="net472" />
1616
<package id="RazorEngine" version="3.10.0" targetFramework="net472" />
1717
<package id="SharpDX" version="4.2.0" targetFramework="net472" />

0 commit comments

Comments
 (0)