{% set dict_output_type = ({ "on_off": "On/Off", "pwm": "PWM", "value": "Value", "volume": "Volume" }) %} {%- for each_pid in pid if each_pid.unique_id == order -%}
{{form_mod_pid_base.csrf_token}} {{form_mod_pid_base.function_id(value=each_pid.unique_id)}} {{form_mod_pid_base.function_type(class_='form-control', value='pid')}}
{{form_mod_pid_base.name(class_='form-control', value=each_pid.name, **{'title': dict_translation['name']['phrase']})}}
{%- if each_pid.is_activated %}
{{form_mod_pid_base.pid_deactivate(class_='form-control btn btn-primary btn-sm')}}
{%- if each_pid.is_paused or each_pid.is_held %}
{{form_mod_pid_base.pid_resume(class_='form-control btn btn-primary btn-sm')}}
{%- else %}
{{form_mod_pid_base.pid_pause(class_='form-control btn btn-primary btn-sm')}}
{{form_mod_pid_base.pid_hold(class_='form-control btn btn-primary btn-sm')}}
{%- endif -%} {%- else %}
{{form_mod_pid_base.pid_activate(class_='form-control btn btn-primary btn-sm')}}
{%- endif -%}
{{form_mod_pid_base.pid_mod(class_='form-control btn btn-primary btn-sm')}}
{{form_mod_pid_base.pid_delete(class_='form-control btn btn-primary btn-sm',**{'onclick':'return confirm("Are you sure you want to delete this?")'})}}
{{form_mod_pid_base.order_up(class_='form-control btn btn-primary btn-sm')}}
{{form_mod_pid_base.order_down(class_='form-control btn btn-primary btn-sm')}}
After selecting the Raise and/or Lower Outputs, additional options will appear for each Output and will need to be configured. What options appear will be determined by the type of output that's selected. Therefore, review all settings after saving to ensure the PID controller has been fully-configured prior to activating it.
{% if each_pid.is_activated %}
{{_('Status')}}
{% endif %}
{{form_mod_pid_base.measurement.label(class_='control-label')}}
{{form_mod_pid_base.direction.label(class_='control-label')}}
{{form_mod_pid_base.period.label(class_='control-label')}}
{{form_mod_pid_base.period(class_='form-control', value=each_pid.period, **{'title': dict_translation['period']['phrase']})}}
{{form_mod_pid_base.start_offset.label(class_='control-label')}}
{{form_mod_pid_base.start_offset(class_='form-control', value=each_pid.start_offset, **{'title': dict_translation['start_offset']['phrase']})}}
{{form_mod_pid_base.max_measure_age.label(class_='control-label')}}
{{form_mod_pid_base.max_measure_age(class_='form-control', value=each_pid.max_measure_age, **{'title': dict_translation['max_age']['phrase']})}}
{{form_mod_pid_base.log_level_debug.label(class_='control-label')}}
{{form_mod_pid_base.setpoint.label(class_='control-label')}}
{{form_mod_pid_base.setpoint(class_='form-control', value=each_pid.setpoint, **{'title':_('This is the desired state of a perticular environmental condition. For instance, this could be the desired temperature in Celsius.')})}}
{{form_mod_pid_base.band.label(class_='control-label')}}
{{form_mod_pid_base.band(class_='form-control', value=each_pid.band, **{'title':_('The control hysteresis surounding the setpoint, with a band that is the setpoint plus and minus the band value. 0 is disabled.')})}}
{{form_mod_pid_base.send_lower_as_negative.label(class_='control-label')}}
{{form_mod_pid_base.store_lower_as_negative.label(class_='control-label')}}
{{form_mod_pid_base.k_p.label(class_='control-label')}}
{{form_mod_pid_base.k_p(class_='form-control', value=each_pid.p, **{'title':_('Proportional gain')})}}
{{form_mod_pid_base.k_i.label(class_='control-label')}}
{{form_mod_pid_base.k_i(class_='form-control', value=each_pid.i, **{'title':_('Integral gain')})}}
{{form_mod_pid_base.k_d.label(class_='control-label')}}
{{form_mod_pid_base.k_d(class_='form-control', value=each_pid.d, **{'title':_('Derivative gain')})}}
{{form_mod_pid_base.integrator_max.label(class_='control-label')}}
{{form_mod_pid_base.integrator_max(class_='form-control', value=each_pid.integrator_min, **{'title':_('Limit the integrator minimum, for calculating Ki_total: (Ki_total = Ki * integrator; and PID output = Kp_total + Ki_total + Kd_total)')})}}
{{form_mod_pid_base.integrator_min.label(class_='control-label')}}
{{form_mod_pid_base.integrator_min(class_='form-control', value=each_pid.integrator_max, **{'title':_('Limit the integrator maximum, for calculating Ki_total: (Ki_total = Ki * integrator; and PID output = Kp_total + Ki_total + Kd_total)')})}}
{{form_mod_pid_base.raise_output_id.label(class_='control-label')}}
{% for each_output in output if each_pid.raise_output_id and "," in each_pid.raise_output_id and each_pid.raise_output_id.split(",")[0] == each_output.unique_id %} {% if 'output_types' in dict_outputs[each_output.output_type] and dict_outputs[each_output.output_type]['output_types']|length > 1 %}
{{form_mod_pid_base.raise_output_type.label(class_='control-label')}}
{% else %}
{{form_mod_pid_base.raise_output_type.label(class_='control-label')}}
{% endif %} {% if each_pid.raise_output_type == 'pwm' %} {% include 'pages/function_options/pid_options/output_pwm_raise.html' %} {% elif each_pid.raise_output_type == 'on_off' %} {% include 'pages/function_options/pid_options/output_on_off_raise.html' %} {% elif each_pid.raise_output_type == 'value' %} {% include 'pages/function_options/pid_options/output_value_raise.html' %} {% elif each_pid.raise_output_type == 'volume' %} {% include 'pages/function_options/pid_options/output_volume_raise.html' %} {% endif %} {% endfor %}
{{form_mod_pid_base.lower_output_id.label(class_='control-label')}}
{% for each_output in output if each_pid.lower_output_id and "," in each_pid.lower_output_id and each_pid.lower_output_id.split(",")[0] == each_output.unique_id %} {% if 'output_types' in dict_outputs[each_output.output_type] and dict_outputs[each_output.output_type]['output_types']|length > 1 %}
{{form_mod_pid_base.lower_output_type.label(class_='control-label')}}
{% else %}
{{form_mod_pid_base.lower_output_type.label(class_='control-label')}}
{% endif %} {% if each_pid.lower_output_type == 'pwm' %} {% include 'pages/function_options/pid_options/output_pwm_lower.html' %} {% elif each_pid.lower_output_type == 'on_off' %} {% include 'pages/function_options/pid_options/output_on_off_lower.html' %} {% elif each_pid.lower_output_type == 'value' %} {% include 'pages/function_options/pid_options/output_value_lower.html' %} {% elif each_pid.lower_output_type == 'volume' %} {% include 'pages/function_options/pid_options/output_volume_lower.html' %} {% endif %} {% endfor %}
{{form_mod_pid_base.setpoint_tracking_type.label(class_='control-label')}}
{{form_mod_pid_base.setpoint_tracking_method_id.label(class_='control-label')}}
{{form_mod_pid_base.setpoint_tracking_input_math_id.label(class_='control-label')}}
{{form_mod_pid_base.setpoint_tracking_max_age.label(class_='control-label')}}
{{form_mod_pid_base.setpoint_tracking_max_age(class_='form-control', value=each_pid.setpoint_tracking_max_age, **{'title':_('Maximum allowable measurement age')})}}
{%- endfor -%}