diff --git a/src/power/p-http-api.c b/src/power/p-http-api.c
index fc58279..986df3a 100644
--- a/src/power/p-http-api.c
+++ b/src/power/p-http-api.c
@@ -517,7 +517,7 @@ power_off:
/*
* OK this is it, schedule it to happen
*/
- lws_sul_schedule(lws_ss_from_user(g), 0,
+ lws_sul_schedule(lws_ss_get_context(lws_ss_from_user(g)), 0,
&pc->sul_delay_off,
saip_sul_action_power_off,
SAI_POWERDOWN_HOLDOFF_US);
diff --git a/src/power/p-private.h b/src/power/p-private.h
index 63013bc..40d5742 100644
--- a/src/power/p-private.h
+++ b/src/power/p-private.h
@@ -187,6 +187,9 @@ saip_queue_stay_info(saip_server_t *sps);
saip_pcon_t *
saip_pcon_by_name(struct sai_power *power, const char *name);
+saip_pcon_t *
+saip_pcon_create(struct sai_power *power, const char *name);
+
int
saip_parse_tasmota_status(tasmota_parse_t *tp);
diff --git a/src/power/p-utils.c b/src/power/p-utils.c
index 6846dc8..b4d3480 100644
--- a/src/power/p-utils.c
+++ b/src/power/p-utils.c
@@ -39,3 +39,22 @@ saip_pcon_by_name(struct sai_power *power, const char *name)
return NULL;
}
+
+saip_pcon_t *
+saip_pcon_create(struct sai_power *power, const char *name)
+{
+ saip_pcon_t *pc = lwsac_use_zero(&power->ac_conf_head, sizeof(*pc), 4096);
+ if (!pc)
+ return NULL;
+
+ pc->name = lwsac_use(&power->ac_conf_head, strlen(name) + 1, 512);
+ if (!pc->name)
+ return NULL;
+ strcpy((char *)pc->name, name);
+
+ lws_dll2_add_tail(&pc->list, &power->sai_pcon_owner);
+
+ lwsl_notice("%s: Created dynamic PCON '%s'\n", __func__, name);
+
+ return pc;
+}