AutomationDataset/KerballOne/description-ready.json

218 lines
14 KiB
JSON

[
{
"id": "'1745383146738'",
"automation": "- id: '1745383146738'\n alias: Demand Following\n description: ''\n triggers:\n - trigger: state\n entity_id:\n - sensor.power_demand_mw\n - trigger: state\n entity_id:\n - sensor.total_power_output_mw\n conditions:\n - condition: numeric_state\n entity_id: sensor.power_demand_mw\n above: 0\n - condition: numeric_state\n entity_id: sensor.total_power_output_mw\n above: 0\n actions:\n - variables:\n loop: '{{ states(''input_select.loop'')|string }}'\n flow_ratio: '{{ (states(''sensor.COOLANT_SEC_CIRCULATION_PUMP''+loop+''SPEED'')\n | int / 100 * states(''sensor.coolant_sec_circulation_pump''+loop+''capacity'')\n | int) / (states(''sensor.COOLANT_CORE_CIRCULATION_PUMP''+loop+''SPEED'')\n | int / 100 * states(''sensor.coolant_core_circulation_pump''+loop+''capacity'')\n | int) }}'\n - if:\n - condition: or\n conditions:\n - condition: numeric_state\n entity_id: sensor.total_power_output_mw\n below: sensor.demand_lowerlimit\n - condition: numeric_state\n entity_id: sensor.total_power_output_mw\n above: sensor.demand_upperlimit\n alias: Power Output not within Demand Limits\n then:\n - alias: Adjust Primary-only or Steam Valve and all pumps\n if:\n - condition: numeric_state\n entity_id: sensor.demand_delta\n above: -6\n below: 6\n - alias: Sec/Pri Flow Ratio is within bounds\n condition: template\n value_template: \"{{ (states('sensor.demand_delta') | int > 0 and flow_ratio\\\n \\ >= 3.0) or \\n(states('sensor.demand_delta') | int < 0 and flow_ratio <=\\\n \\ 4.0) }}\"\n enabled: true\n then:\n - action: rest_command.nucleares_webserver_set\n data:\n var: COOLANT_CORE_CIRCULATION_PUMP{{loop}}ORDERED_SPEED\n val: '{{ states(''sensor.coolant_core_circulation_pump''+loop+''speed'')\n | int + (states(''sensor.demand_delta'') | int | abs) / (states(''sensor.demand_delta'')\n | int) }}'\n alias: Adjust Primary Pump Speed +/- 1\n - delay:\n hours: 0\n minutes: 0\n seconds: '{{ 3 / states(''sensor.game_sim_speed'') | int }}'\n milliseconds: 0\n alias: Wait for (3 / simspeed) seconds\n - alias: NOTIFICATION\n action: persistent_notification.create\n data:\n message: 'Demand: {{ states(''sensor.power_demand_mw'') }} <br> Output:\n {{ states(''sensor.total_power_output_mw'') | float }} <br> Delta = {{\n states(''sensor.demand_delta'') | round(2) }} <br><br> Loop: {{loop}}\n ==> PRIMARY PUMP speed adjustment <br> Primary = {{ states(''sensor.COOLANT_CORE_CIRCULATION_PUMP''+loop+''SPEED'')\n | int }}% -> {{ states(''sensor.COOLANT_CORE_CIRCULATION_PUMP''+loop+''SPEED'')\n | int / 100 * states(''sensor.coolant_core_circulation_pump''+loop+''capacity'')\n | int }} L/m of {{ states(''sensor.coolant_core_circulation_pump''+loop+''capacity'')\n | int }} L/m <br> Secondary = {{ states(''sensor.COOLANT_SEC_CIRCULATION_PUMP''+loop+''SPEED'')\n | int }}% -> {{ states(''sensor.COOLANT_SEC_CIRCULATION_PUMP''+loop+''SPEED'')\n | int / 100 * states(''sensor.coolant_sec_circulation_pump''+loop+''capacity'')\n | int }} L/m of {{ states(''sensor.coolant_sec_circulation_pump''+loop+''capacity'')\n | int }} L/m <br> MSCV = {{ states(''sensor.mscv''+loop+''opening_actual'')\n }}% {{ states(''sensor.mscv''+loop+''opening_actual'') | int * 100\n }} L/m <br> Flow Ratio = {{ flow_ratio | round(3) }} <br> New Primary\n Pump speed: {{ max(states(''sensor.coolant_core_circulation_pump''+loop+''speed'')\n | int + states(''sensor.demand_delta'') | int,6) }}%'\n notification_id: PrimaryPump\n enabled: true\n else:\n - variables:\n target_mscv: '{{ max(min(states(''sensor.mscv''+loop+''opening_actual'')\n | int + (states(''sensor.demand_delta'') | int / 6) | int,40),2) }}'\n alias: target MSCV = current mscv + (demand_delta / 6)\n - alias: Match Secondary Pump Speed to Target MSCV\n action: rest_command.nucleares_webserver_set\n data:\n var: COOLANT_SEC_CIRCULATION_PUMP{{loop}}ORDERED_SPEED\n val: '{{ (target_mscv | int * 1000 / states(''sensor.coolant_sec_circulation_pump''+loop+''capacity'')\n | int) | round(1) }}'\n - alias: Match Primary Pump Speed to Target MSCV\n action: rest_command.nucleares_webserver_set\n data:\n var: COOLANT_CORE_CIRCULATION_PUMP{{loop}}ORDERED_SPEED\n val: '{{ (target_mscv | int * 300 / states(''sensor.coolant_core_circulation_pump''+loop+''capacity'')\n | int) | round(1) }}'\n - alias: If MSCV not at Target, adjust MSCV +/- 1\n if:\n - condition: template\n value_template: '{{ states(''sensor.mscv''+loop+''opening_actual'') | int\n != target_mscv }}'\n alias: Is MSCV not at Target?\n then:\n - action: rest_command.nucleares_webserver_set\n data:\n var: MSCV{{loop}}OPENING_ORDERED\n val: '{{ states(''sensor.mscv''+loop+''opening_actual'') | int + (states(''sensor.demand_delta'')\n | int | abs) / (states(''sensor.demand_delta'') | int) }}'\n alias: Adjust Main Steam Control Valve +/- 1\n - alias: NOTIFICATION\n action: persistent_notification.create\n data:\n message: \"Demand: {{ states('sensor.power_demand_mw') }} <br> Output: {{\\\n \\ states('sensor.total_power_output_mw') }} <br> Delta = {{ states('sensor.demand_delta')\\\n \\ | round(2) }} <br><br> Loop: {{loop}} ==> STEAM VALVE adjustment <br>MSCV\\\n \\ = {{ target_mscv }} <br> New Primary = {{\\n (target_mscv | int * 300\\\n \\ / states('sensor.coolant_core_circulation_pump'+loop+'capacity') |\\n\\\n int) | int }} <br> New Secondary = {{ (target_mscv | int * 1000 / states('sensor.coolant_sec_circulation_pump'+loop+'capacity')\\\n \\ | int) | int }}<br> Ratio:{{flow_ratio | round(4)}}\"\n notification_id: SteamValve\n enabled: true\n - delay:\n hours: 0\n minutes: 0\n seconds: '{{ 10 / states(''sensor.game_sim_speed'') | int }}'\n milliseconds: 0\n alias: Wait for (10 / simspeed) seconds\n - delay:\n hours: 0\n minutes: 0\n seconds: 1\n milliseconds: 0\n mode: single",
"config": [
{
"name": "power demand mw sensor",
"room": null,
"type": "sensor",
"id": {
"entity_id": "sensor.power_demand_mw",
"device_id": null
}
},
{
"name": "total power output mw sensor",
"room": null,
"type": "sensor",
"id": {
"entity_id": "sensor.total_power_output_mw",
"device_id": null
}
},
{
"name": "loop input select",
"room": null,
"type": "input_select",
"id": {
"entity_id": "input_select.loop",
"device_id": null
}
},
{
"name": "demand lowerlimit sensor",
"room": null,
"type": "sensor",
"id": {
"entity_id": "sensor.demand_lowerlimit",
"device_id": null
}
},
{
"name": "demand upperlimit sensor",
"room": null,
"type": "sensor",
"id": {
"entity_id": "sensor.demand_upperlimit",
"device_id": null
}
},
{
"name": "demand delta sensor",
"room": null,
"type": "sensor",
"id": {
"entity_id": "sensor.demand_delta",
"device_id": null
}
},
{
"name": "game sim speed sensor",
"room": null,
"type": "sensor",
"id": {
"entity_id": "sensor.game_sim_speed",
"device_id": null
}
},
{
"name": "nucleares webserver set rest command",
"room": null,
"type": "rest_command",
"id": {
"entity_id": "rest_command.nucleares_webserver_set",
"device_id": null
}
},
{
"name": "persistent notification create service",
"room": null,
"type": "persistent_notification",
"id": {
"entity_id": "persistent_notification.create",
"device_id": null
}
},
{
"name": "Coolant Core Circulation Pump",
"room": null,
"type": "sensor",
"id": {
"entity_id": "sensor.coolant_core_circulation_pump",
"device_id": null
}
},
{
"name": "Coolant Secondary Circulation Pump",
"room": null,
"type": "sensor",
"id": {
"entity_id": "sensor.coolant_sec_circulation_pump",
"device_id": null
}
},
{
"name": "Main Steam Control Valve",
"room": null,
"type": "sensor",
"id": {
"entity_id": "sensor.mscv",
"device_id": null
}
}
]
},
{
"id": "'1746027130216'",
"automation": "- id: '1746027130216'\n alias: Core Target Temp\n description: ''\n triggers:\n - trigger: state\n entity_id:\n - sensor.core_state_criticality\n - sensor.core_temp\n - sensor.rods_pos_actual\n for:\n hours: 0\n minutes: 0\n seconds: 5\n conditions:\n - condition: numeric_state\n entity_id: sensor.core_state_criticality\n above: -5\n below: 5\n actions:\n - variables:\n tgt_reactivity: '{{ min(((states(''input_number.target_core_temp'') | float\n - states(''sensor.core_temp'') | float) / states(''input_number.target_core_temp'')\n | float) | round(3) * 10 | float,2) }}'\n - alias: Target ROD Position different than Actual Position\n if:\n - condition: template\n value_template: \"{{ (states('sensor.rods_pos_actual') | float + max(states('sensor.core_state_criticality')\\\n \\ | float - tgt_reactivity,-2)) \\n | float | round(1) != states('sensor.rods_pos_actual')\\\n \\ | float | round(1) }}\\n\"\n then:\n - action: notify.persistent_notification\n metadata: {}\n data:\n message: \"SET RODS to {{(states('sensor.rods_pos_actual') | float + max(states('sensor.core_state_criticality')\\\n \\ | float - tgt_reactivity,-2)) \\n | float | round(2) }}\"\n data:\n notification_id: rods\n - action: rest_command.nucleares_webserver_set\n data:\n var: RODS_ALL_POS_ORDERED\n val: '{{ states(''sensor.rods_pos_actual'') | float + max(states(''sensor.core_state_criticality'')\n | float - tgt_reactivity,-2) }}'\n alias: Adjust Control Rods\n - delay:\n hours: 0\n minutes: 0\n seconds: '{{ (states(''sensor.core_temp'') | int - states(''input_number.target_core_temp'')\n | int) | abs / 10 / states(''sensor.game_sim_speed'') | int + 1 }}'\n milliseconds: 0\n mode: single",
"config": [
{
"name": "game sim speed sensor",
"room": null,
"type": "sensor",
"id": {
"entity_id": "sensor.game_sim_speed",
"device_id": null
}
},
{
"name": "core state criticality sensor",
"room": null,
"type": "sensor",
"id": {
"entity_id": "sensor.core_state_criticality",
"device_id": null
}
},
{
"name": "core temp sensor",
"room": null,
"type": "sensor",
"id": {
"entity_id": "sensor.core_temp",
"device_id": null
}
},
{
"name": "rods pos actual sensor",
"room": null,
"type": "sensor",
"id": {
"entity_id": "sensor.rods_pos_actual",
"device_id": null
}
},
{
"name": "target core temp input number",
"room": null,
"type": "input_number",
"id": {
"entity_id": "input_number.target_core_temp",
"device_id": null
}
},
{
"name": "nucleares webserver set rest command",
"room": null,
"type": "rest_command",
"id": {
"entity_id": "rest_command.nucleares_webserver_set",
"device_id": null
}
},
{
"name": "persistent notification notify service",
"room": null,
"type": "persistent_notification",
"id": {
"entity_id": "notify.persistent_notification",
"device_id": null
}
}
]
},
{
"id": "'1746249037975'",
"automation": "- id: '1746249037975'\n alias: Hourly Timestamp\n description: ''\n triggers:\n - trigger: template\n value_template: '{{ states(''sensor.time'').split(\":\")[1] | int == 0 }}'\n enabled: true\n conditions: []\n actions:\n - action: input_number.set_value\n metadata: {}\n data:\n value: 10000\n target:\n entity_id:\n - input_number.timestamp\n - action: input_number.set_value\n metadata: {}\n data:\n value: 0\n target:\n entity_id:\n - input_number.timestamp\n mode: single",
"config": [
{
"name": "time sensor",
"room": null,
"type": "sensor",
"id": {
"entity_id": "sensor.time",
"device_id": null
}
},
{
"name": "timestamp input number",
"room": null,
"type": "input_number",
"id": {
"entity_id": "input_number.timestamp",
"device_id": null
}
},
{
"name": "input number set value service",
"room": null,
"type": "input_number",
"id": {
"entity_id": "input_number.set_value",
"device_id": null
}
}
]
}
]