@@ -105,21 +105,30 @@ protected override void OnStartup(StartupEventArgs evtArgs)
105105
106106 log4net . Config . XmlConfigurator . Configure ( ) ;
107107
108-
109- if ( File . Exists ( Path . Combine ( ExePath , "appSettings.config" ) ) &&
110- ConfigurationManager . GetSection ( "appSettings" ) is NameValueCollection appSection )
108+ try
111109 {
112- HaUrl = appSection [ "haUrl" ] ;
113- HaToken = appSection [ "haToken" ] ;
114- ExcludePlayers = new HashSet < string > ( appSection [ "excludePlayers" ] . Split ( ',' ) . Select ( p => p . ToLower ( ) . Trim ( ) ) . ToList ( ) ) ;
115- }
116110
117- ClientFactory . Initialize ( $ "{ HaUrl } ", HaToken ) ;
111+ if ( File . Exists ( Path . Combine ( ExePath , "appSettings.config" ) ) &&
112+ ConfigurationManager . GetSection ( "appSettings" ) is NameValueCollection appSection )
113+ {
114+ HaUrl = appSection [ "haUrl" ] ;
115+ HaToken = appSection [ "haToken" ] ;
116+ ExcludePlayers = new HashSet < string > ( appSection [ "excludePlayers" ] . Split ( ',' )
117+ . Select ( p => p . ToLower ( ) . Trim ( ) ) . ToList ( ) ) ;
118+ }
118119
119- EntityClient = ClientFactory . GetClient < EntityClient > ( ) ;
120+ ClientFactory . Initialize ( $ "{ HaUrl } ", HaToken ) ;
121+
122+ EntityClient = ClientFactory . GetClient < EntityClient > ( ) ;
123+
124+ StatesClient = ClientFactory . GetClient < StatesClient > ( ) ;
125+
126+ }
127+ catch ( Exception ex )
128+ {
129+ Log . Error ( "Connecting to Home Assistant Failed" , ex ) ;
130+ }
120131
121- StatesClient = ClientFactory . GetClient < StatesClient > ( ) ;
122-
123132 //create the notifyicon (it's a resource declared in NotifyIconResources.xaml
124133 _notifyIcon = ( TaskbarIcon ) FindResource ( "NotifyIcon" ) ;
125134
@@ -160,12 +169,26 @@ protected override void OnStartup(StartupEventArgs evtArgs)
160169
161170 splashScreen . Dispatcher . Invoke ( ( ) => splashScreen . ProgressText . Text = "Getting data from HA..." ) ;
162171
172+ if ( EntityClient != null )
173+ {
163174
164- MediaPlayers = ( await EntityClient . GetEntities ( "media_player" ) ) . ToList ( ) ;
175+ try
176+ {
177+ MediaPlayers = ( await EntityClient . GetEntities ( "media_player" ) ) . ToList ( ) ;
165178
166- foreach ( var mediaPlayer in MediaPlayers )
179+ foreach ( var mediaPlayer in MediaPlayers )
180+ {
181+ Log . Info ( $ "{ mediaPlayer } ") ;
182+ }
183+ }
184+ catch ( Exception ex )
185+ {
186+ Log . Error ( "Finding Media Players" , ex ) ;
187+ }
188+ }
189+ else
167190 {
168- Log . Info ( $ " { mediaPlayer } ") ;
191+ Log . Error ( "No Home Assistant Media Players Found ") ;
169192 }
170193
171194 splashScreen . Dispatcher . Invoke ( ( ) => splashScreen . ProgressText . Text = "Getting sensor data from HWInfo..." ) ;
@@ -174,8 +197,14 @@ protected override void OnStartup(StartupEventArgs evtArgs)
174197
175198 if ( HWInfo . SensorData . Any ( ) )
176199 {
200+ Log . Info ( "Writing HWINFO Sensors to hwinfo.json" ) ;
201+
177202 HWInfo . SaveDataToFile ( @"Data\hwinfo.json" ) ;
178203 }
204+ else
205+ {
206+ Log . Error ( "No HWINFO Sensors Found" ) ;
207+ }
179208
180209 Dispatcher . Invoke ( ( ) =>
181210 {
@@ -202,120 +231,138 @@ protected override void OnStartup(StartupEventArgs evtArgs)
202231
203232 var haToken = _haTokenSource . Token ;
204233
205- HaTask = Task . Run ( async ( ) =>
206- {
207-
208- Log . Info ( "HA task started" ) ;
209234
210- while ( true )
235+ if ( MediaPlayers != null )
236+ {
237+ HaTask = Task . Run ( async ( ) =>
211238 {
212- if ( haToken . IsCancellationRequested )
213- {
214- haToken . ThrowIfCancellationRequested ( ) ;
215- }
216239
217- for ( var index = 0 ; index < App . MediaPlayers . Count ; index ++ )
218- {
219- var mediaPlayer = App . MediaPlayers [ index ] ;
240+ Log . Info ( "HA task started" ) ;
220241
221- var state = await App . StatesClient . GetState ( mediaPlayer ) ;
242+ while ( true )
243+ {
244+ if ( haToken . IsCancellationRequested )
245+ {
246+ haToken . ThrowIfCancellationRequested ( ) ;
247+ }
222248
223- if ( ! ExcludePlayers . Contains ( mediaPlayer ) && state != null && state . State != "off" && state . State != "standby" &&
224- state . State != "unavailable" && state . Attributes ? . Any ( ) == true /*&&
225- state.Attributes.ContainsKey("media_content_id") && state.Attributes["media_content_id"] is long*/ )
249+ for ( var index = 0 ; index < App . MediaPlayers . Count ; index ++ )
226250 {
227- if ( MediaPlayerStates . Contains ( mediaPlayer . ToLower ( ) ) )
251+ var mediaPlayer = App . MediaPlayers [ index ] ;
252+
253+ var state = await App . StatesClient . GetState ( mediaPlayer ) ;
254+
255+ if ( ! ExcludePlayers . Contains ( mediaPlayer ) && state != null && state . State != "off" &&
256+ state . State != "standby" &&
257+ state . State != "unavailable" && state . Attributes ? . Any ( ) == true /*&&
258+ state.Attributes.ContainsKey("media_content_id") && state.Attributes["media_content_id"] is long*/
259+ )
228260 {
229- MediaPlayerStates [ mediaPlayer ] = state ;
261+ if ( MediaPlayerStates . Contains ( mediaPlayer . ToLower ( ) ) )
262+ {
263+ MediaPlayerStates [ mediaPlayer ] = state ;
264+ }
265+ else
266+ {
267+ MediaPlayerStates . Add ( mediaPlayer , state ) ;
268+ }
230269 }
231270 else
232271 {
233- MediaPlayerStates . Add ( mediaPlayer , state ) ;
234- }
235- }
236- else
237- {
238- if ( MediaPlayerStates . Contains ( mediaPlayer ) )
239- {
240- MediaPlayerStates . Remove ( mediaPlayer ) ;
272+ if ( MediaPlayerStates . Contains ( mediaPlayer ) )
273+ {
274+ MediaPlayerStates . Remove ( mediaPlayer ) ;
275+ }
241276 }
242277 }
243- }
244278
245- FipHandler . RefreshHAPages ( ) ;
279+ FipHandler . RefreshHAPages ( ) ;
246280
247- await Task . Delay ( 1000 , _haTokenSource . Token ) ; // repeat every 2 seconds
248- }
281+ await Task . Delay ( 1000 , _haTokenSource . Token ) ; // repeat every 2 seconds
282+ }
249283
250- } , haToken ) ;
284+ } , haToken ) ;
285+ }
251286
252287 var hwInfoToken = _hwInfoTokenSource . Token ;
253288
254- if ( File . Exists ( Path . Combine ( App . ExePath , "mqtt.config" ) ) )
289+ if ( File . Exists ( Path . Combine ( App . ExePath , "mqtt.config" ) ) && HWInfo . SensorData . Any ( ) )
255290 {
256291
257292 HWInfoTask = Task . Run ( async ( ) =>
258293 {
259294 var result = await MQTT . Connect ( ) ;
295+ if ( ! result )
296+ {
297+ Log . Info ( "Failed to connect to MQTT server" ) ;
298+ }
299+ else
300+ {
260301
261- Log . Info ( "HWInfo task started" ) ;
262302
263- if ( HWInfo . SensorData . Any ( ) )
264- {
265303
266- foreach ( var sensor in HWInfo . SensorData )
304+ Log . Info ( "HWInfo task started" ) ;
305+
306+ if ( HWInfo . SensorData . Any ( ) )
267307 {
268- foreach ( var element in sensor . Value . Elements )
308+
309+ foreach ( var sensor in HWInfo . SensorData )
269310 {
270- var mqttValue = JsonConvert . SerializeObject ( new HWInfo . MQTTDiscoveryObj
271- {
272- device_class = element . Value . DeviceClass ,
273- name = element . Value . Name ,
274- state_topic =
275- $ "homeassistant/{ element . Value . Component } /{ element . Value . Node } /state",
276- unit_of_measurement = element . Value . Unit ,
277- value_template = "{{ value_json.value}}" ,
278- unique_id = element . Value . Node ,
279- state_class = "measurement"
280- } , new JsonSerializerSettings
311+ foreach ( var element in sensor . Value . Elements )
281312 {
282- NullValueHandling = NullValueHandling . Ignore
283- } ) ;
284-
285- var task = Task . Run < bool > ( async ( ) =>
286- await MQTT . Publish (
287- $ "homeassistant/{ element . Value . Component } /{ element . Value . Node } /config",
288- mqttValue ) ) ;
313+ var mqttValue = JsonConvert . SerializeObject ( new HWInfo . MQTTDiscoveryObj
314+ {
315+ device_class = element . Value . DeviceClass ,
316+ name = element . Value . Name ,
317+ state_topic =
318+ $ "homeassistant/{ element . Value . Component } /{ element . Value . Node } /state",
319+ unit_of_measurement = element . Value . Unit ,
320+ value_template = "{{ value_json.value}}" ,
321+ unique_id = element . Value . Node ,
322+ state_class = "measurement"
323+ } , new JsonSerializerSettings
324+ {
325+ NullValueHandling = NullValueHandling . Ignore
326+ } ) ;
327+
328+ var task = Task . Run < bool > ( async ( ) =>
329+ await MQTT . Publish (
330+ $ "homeassistant/{ element . Value . Component } /{ element . Value . Node } /config",
331+ mqttValue ) ) ;
289332
333+ }
290334 }
291- }
292335
293- while ( true )
294- {
295- if ( hwInfoToken . IsCancellationRequested )
336+ while ( true )
296337 {
297- hwInfoToken . ThrowIfCancellationRequested ( ) ;
298- }
338+ if ( hwInfoToken . IsCancellationRequested )
339+ {
340+ hwInfoToken . ThrowIfCancellationRequested ( ) ;
341+ }
299342
300- HWInfo . ReadMem ( "HWINFO.INC" ) ;
301-
302- foreach ( var sensor in HWInfo . SensorData )
303- {
304- foreach ( var element in sensor . Value . Elements )
343+ HWInfo . ReadMem ( "HWINFO.INC" ) ;
344+
345+ foreach ( var sensor in HWInfo . SensorData )
305346 {
306- var mqttValue = JsonConvert . SerializeObject ( new HWInfo . MQTTStateObj
347+ foreach ( var element in sensor . Value . Elements )
348+ {
349+ var mqttValue = JsonConvert . SerializeObject ( new HWInfo . MQTTStateObj
307350 {
308351 value = element . Value . NumericValue
309352 } ) ;
310353
311- var task = Task . Run < bool > ( async ( ) => await MQTT . Publish ( $ "homeassistant/{ element . Value . Component } /{ element . Value . Node } /state", mqttValue ) ) ;
312- }
354+ var task = Task . Run < bool > ( async ( ) =>
355+ await MQTT . Publish (
356+ $ "homeassistant/{ element . Value . Component } /{ element . Value . Node } /state",
357+ mqttValue ) ) ;
358+ }
313359
314- }
360+ }
315361
316- //!!!FipHandler.RefreshHWInfoPages();
362+ //!!!FipHandler.RefreshHWInfoPages();
317363
318- await Task . Delay ( 5 * 1000 , _hwInfoTokenSource . Token ) ; // repeat every 5 seconds
364+ await Task . Delay ( 5 * 1000 , _hwInfoTokenSource . Token ) ; // repeat every 5 seconds
365+ }
319366 }
320367 }
321368
0 commit comments