{% set dict_output_type = ({ "on_off": "On/Off", "pwm": "PWM", "value": "Value", "volume": "Volume" }) %}
{{form_mod_pid_base.csrf_token}} {{form_mod_pid_base.function_id(value=each_function.unique_id)}} {{form_mod_pid_base.function_type(value='pid')}}
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.
{{_('Status')}}
{{form_mod_pid_base.name.label(class_='control-label')}}
{{form_mod_pid_base.name(class_='form-control', value=each_function.name, **{'title': dict_translation['name']['phrase']})}}
{{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_function.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_function.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_function.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_function.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_function.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_function.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_function.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_function.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_function.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_function.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_function.raise_output_id and "," in each_function.raise_output_id and each_function.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_function.raise_output_type == 'pwm' %} {% include 'pages/function_options/pid_options/output_pwm_raise.html' %} {% elif each_function.raise_output_type == 'on_off' %} {% include 'pages/function_options/pid_options/output_on_off_raise.html' %} {% elif each_function.raise_output_type == 'value' %} {% include 'pages/function_options/pid_options/output_value_raise.html' %} {% elif each_function.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_function.lower_output_id and "," in each_function.lower_output_id and each_function.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_function.lower_output_type == 'pwm' %} {% include 'pages/function_options/pid_options/output_pwm_lower.html' %} {% elif each_function.lower_output_type == 'on_off' %} {% include 'pages/function_options/pid_options/output_on_off_lower.html' %} {% elif each_function.lower_output_type == 'value' %} {% include 'pages/function_options/pid_options/output_value_lower.html' %} {% elif each_function.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_function.setpoint_tracking_max_age, **{'title':_('Maximum allowable measurement age')})}}