@@ -319,7 +319,8 @@ export class LCARdSHelperManager extends BaseService {
319319
320320 for ( const helper of allHelpers ) {
321321 try {
322- const result = await ensureHelper ( this . hass , helper ) ;
322+ // Delegate to this.ensureHelper so default values are set on creation
323+ const result = await this . ensureHelper ( helper . key ) ;
323324
324325 if ( result . exists ) {
325326 results . existing ++ ;
@@ -358,7 +359,76 @@ export class LCARdSHelperManager extends BaseService {
358359 throw new Error ( `[HelperManager] Helper not found in registry: ${ key } ` ) ;
359360 }
360361
361- return await ensureHelper ( this . hass , definition ) ;
362+ // Helpers with ws_create_params === null cannot be created via the API
363+ // (e.g. template sensors — must be configured manually in configuration.yaml)
364+ if ( definition . ws_create_params === null ) {
365+ lcardsLog . debug ( `[HelperManager] Skipping non-creatable helper: ${ key } (${ definition . entity_id } )` ) ;
366+ return {
367+ exists : apiHelperExists ( this . hass , definition . entity_id ) ,
368+ created : false ,
369+ skipped : true ,
370+ entity_id : definition . entity_id
371+ } ;
372+ }
373+
374+ const result = await ensureHelper ( this . hass , definition ) ;
375+
376+ // Set the registry default_value whenever a helper is freshly created
377+ if ( result . created && definition . default_value !== undefined && definition . default_value !== null ) {
378+ try {
379+ // Small delay to let HA register the entity before we write to it
380+ await new Promise ( resolve => setTimeout ( resolve , 300 ) ) ;
381+ await apiSetHelperValue ( this . hass , definition . entity_id , definition . default_value ) ;
382+ lcardsLog . info ( `[HelperManager] Set default value for new helper ${ key } : ${ definition . default_value } ` ) ;
383+ } catch ( error ) {
384+ lcardsLog . warn ( `[HelperManager] Could not set default value for ${ key } :` , error ) ;
385+ }
386+ }
387+
388+ return result ;
389+ }
390+
391+ /**
392+ * Reset all helpers in a category (or all helpers) to their registry default values.
393+ * Only affects helpers that already exist in Home Assistant.
394+ *
395+ * @param {string|null } category - Category name, or null to reset all
396+ * @returns {Promise<{success: number, failed: number, skipped: number}> }
397+ */
398+ async resetCategoryToDefaults ( category = null ) {
399+ if ( ! this . hass ) {
400+ throw new Error ( '[HelperManager] Cannot reset helpers - HASS not available' ) ;
401+ }
402+
403+ const helpers = category ? getHelpersByCategory ( category ) : getAllHelpers ( ) ;
404+ const results = { success : 0 , failed : 0 , skipped : 0 } ;
405+
406+ for ( const helper of helpers ) {
407+ // Skip helpers that don't exist yet
408+ if ( ! apiHelperExists ( this . hass , helper . entity_id ) ) {
409+ results . skipped ++ ;
410+ continue ;
411+ }
412+
413+ // Skip helpers with no defined default
414+ if ( helper . default_value === undefined || helper . default_value === null ) {
415+ results . skipped ++ ;
416+ continue ;
417+ }
418+
419+ try {
420+ await apiSetHelperValue ( this . hass , helper . entity_id , helper . default_value ) ;
421+ this . _valueCache . set ( helper . key , helper . default_value ) ;
422+ lcardsLog . debug ( `[HelperManager] Reset ${ helper . key } -> ${ helper . default_value } ` ) ;
423+ results . success ++ ;
424+ } catch ( error ) {
425+ lcardsLog . error ( `[HelperManager] Failed to reset ${ helper . key } :` , error ) ;
426+ results . failed ++ ;
427+ }
428+ }
429+
430+ lcardsLog . info ( `[HelperManager] Reset complete: ${ results . success } reset, ${ results . skipped } skipped, ${ results . failed } failed` ) ;
431+ return results ;
362432 }
363433
364434 // ===== PUBLIC API: STATE ACCESS =====
0 commit comments