1 Brewpi Controlling nicely, one missing targets

I have 2 brewpi Spark 2 units. Both are configured exactly the same, both controlling identical 7 gallon SS Brewtech fermenters. The heat on one is consistently failing to meet target. On my last brew, it was missing by about a degree. At first I thought it might be the heating pad but its able to maintain higher temps, it just never actually meets target. The one thing I noticed is that the Duty Cycle on Heater 1 is 0 on the “good” one and 36.something on the bad, but there’s no setting for this. Any suggestions on troubleshooting?

Here’s a beer I’m brewing right now. Very tightly controlled. Not sure what caused that drop, but it might have been because I reused an old profile and moved some dates around. Also, yes, I did some manual edits to the html to put labels on the log probes. And yes, my basement gets that cold.

And this is just 5 gallons of Starsan I’m playing with. As you can see its obviously able to hit higher temps than it was maintaining before the ramp.

This is the good control algorithm

{
  "kind": "Control",
  "pids": [
    {
      "kind": "Pid",
      "name": "heater1pid",
      "enabled": true,
      "input": {
        "kind": "SensorSetPointPair",
        "sensor": {
          "kind": "TempSensorFallback",
          "onBackupSensor": true,
          "sensor": {
            "kind": "TempSensorDelegate",
            "name": "beer1",
            "delegate": {
              "kind": "OneWireTempSensor",
              "value": 16.75,
              "connected": true,
              "address": "28D1FB030900003D",
              "settings.calibrationOffset": 0
            }
          }
        },
        "setPoint": {
          "kind": "SetPointSimple",
          "name": "fridgeset",
          "value": 16.668
        }
      },
      "output": {
        "kind": "ActuatorPwm",
        "dutySetting": 0,
        "period": 4,
        "minVal": 0,
        "maxVal": 100,
        "target": {
          "kind": "ActuatorMutexDriver",
          "mutexGroup": {
            "kind": "ActuatorMutexGroup",
            "deadTime": 1800000,
            "waitTime": 1016134
          },
          "target": {
            "kind": "ActuatorDigitalDelegate",
            "name": "heater1",
            "delegate": {
              "state": 0,
              "kind": "ActuatorPin",
              "pin": 25,
              "invert": false
            }
          }
        }
      },
      "inputError": 0.0508,
      "Kp": 60,
      "Ti": 3600,
      "Td": 120,
      "p": -3.0469,
      "i": 0,
      "d": -0.2344,
      "actuatorIsNegative": false
    },
    {
      "kind": "Pid",
      "name": "heater2pid",
      "enabled": true,
      "input": {
        "kind": "SensorSetPointPair",
        "sensor": {
          "kind": "TempSensorDelegate",
          "name": "beer2",
          "delegate": {
            "kind": "TempSensorDisconnected",
            "value": null,
            "connected": false
          }
        },
        "setPoint": {
          "kind": "SetPointSimple",
          "name": "beer2set",
          "value": null
        }
      },
      "output": {
        "kind": "ActuatorPwm",
        "dutySetting": 0,
        "period": 4,
        "minVal": 0,
        "maxVal": 100,
        "target": {
          "kind": "ActuatorMutexDriver",
          "mutexGroup": {
            "kind": "ActuatorMutexGroup",
            "deadTime": 1800000,
            "waitTime": 1016131
          },
          "target": {
            "kind": "ActuatorDigitalDelegate",
            "name": "heater2",
            "delegate": {
              "kind": "ActuatorNop",
              "state": 0
            }
          }
        }
      },
      "inputError": null,
      "Kp": 10,
      "Ti": 600,
      "Td": 60,
      "p": 0,
      "i": 0,
      "d": 0,
      "actuatorIsNegative": false
    },
    {
      "kind": "Pid",
      "name": "coolerpid",
      "enabled": true,
      "input": {
        "kind": "SensorSetPointPair",
        "sensor": {
          "kind": "TempSensorFallback",
          "onBackupSensor": true,
          "sensor": {
            "kind": "TempSensorDelegate",
            "name": "beer1",
            "delegate": {
              "kind": "OneWireTempSensor",
              "value": 16.75,
              "connected": true,
              "address": "28D1FB030900003D",
              "settings.calibrationOffset": 0
            }
          }
        },
        "setPoint": {
          "kind": "SetPointSimple",
          "name": "fridgeset",
          "value": 16.668
        }
      },
      "output": {
        "kind": "ActuatorPwm",
        "dutySetting": 1.1641,
        "period": 120,
        "minVal": 0,
        "maxVal": 100,
        "target": {
          "kind": "ActuatorMutexDriver",
          "mutexGroup": {
            "kind": "ActuatorMutexGroup",
            "deadTime": 1800000,
            "waitTime": 1016127
          },
          "target": {
            "kind": "ActuatorTimeLimited",
            "minOnTime": 10,
            "minOffTime": 0,
            "maxOnTime": 65535,
            "state": 0,
            "target": {
              "kind": "ActuatorDigitalDelegate",
              "name": "cooler",
              "delegate": {
                "state": 0,
                "kind": "ActuatorPin",
                "pin": 24,
                "invert": false
              }
            }
          }
        }
      },
      "inputError": 0.0508,
      "Kp": 10,
      "Ti": 3600,
      "Td": 120,
      "p": -0.5078,
      "i": -0.6172,
      "d": -0.0391,
      "actuatorIsNegative": true
    },
    {
      "kind": "Pid",
      "name": "beer2fridgepid",
      "enabled": true,
      "input": {
        "kind": "SensorSetPointPair",
        "sensor": {
          "kind": "TempSensorDelegate",
          "name": "beer1",
          "delegate": {
            "kind": "OneWireTempSensor",
            "value": 16.75,
            "connected": true,
            "address": "28D1FB030900003D",
            "settings.calibrationOffset": 0
          }
        },
        "setPoint": {
          "kind": "SetPointSimple",
          "name": "beer1set",
          "value": 16.668
        }
      },
      "output": {
        "kind": "ActuatorOffset",
        "target": {
          "kind": "SensorSetPointPair",
          "sensor": {
            "kind": "TempSensorFallback",
            "onBackupSensor": true,
            "sensor": {
              "kind": "TempSensorDelegate",
              "name": "beer1",
              "delegate": {
                "kind": "OneWireTempSensor",
                "value": 16.75,
                "connected": true,
                "address": "28D1FB030900003D",
                "settings.calibrationOffset": 0
              }
            }
          },
          "setPoint": {
            "kind": "SetPointSimple",
            "name": "fridgeset",
            "value": 16.668
          }
        },
        "reference": {
          "kind": "SensorSetPointPair",
          "sensor": {
            "kind": "TempSensorDelegate",
            "name": "beer1",
            "delegate": {
              "kind": "OneWireTempSensor",
              "value": 16.75,
              "connected": true,
              "address": "28D1FB030900003D",
              "settings.calibrationOffset": 0
            }
          },
          "setPoint": {
            "kind": "SetPointSimple",
            "name": "beer1set",
            "value": 16.668
          }
        },
        "useReferenceValue": false,
        "setting": 0,
        "achieved": 0.082,
        "minimum": 0,
        "maximum": 0
      },
      "inputError": 0.0508,
      "Kp": 0,
      "Ti": 0,
      "Td": 0,
      "p": 0,
      "i": 0,
      "d": 0,
      "actuatorIsNegative": false
    }
  ]
}

and the “bad”

{
  "kind": "Control",
  "pids": [
    {
      "kind": "Pid",
      "name": "heater1pid",
      "enabled": true,
      "input": {
        "kind": "SensorSetPointPair",
        "sensor": {
          "kind": "TempSensorFallback",
          "onBackupSensor": true,
          "sensor": {
            "kind": "TempSensorDelegate",
            "name": "beer1",
            "delegate": {
              "kind": "OneWireTempSensor",
              "value": 17.75,
              "connected": true,
              "address": "283836030900004C",
              "calibrationOffset": 0
            }
          }
        },
        "setPoint": {
          "kind": "SetPointSimple",
          "name": "fridgeset",
          "value": 18.332
        }
      },
      "output": {
        "kind": "ActuatorPwm",
        "dutySetting": 36.1094,
        "period": 4,
        "minVal": 0,
        "maxVal": 100,
        "target": {
          "kind": "ActuatorMutexDriver",
          "mutexGroup": {
            "kind": "ActuatorMutexGroup",
            "deadTime": 1800000,
            "waitTime": 1754748
          },
          "target": {
            "kind": "ActuatorDigitalDelegate",
            "name": "heater1",
            "delegate": {
              "kind": "ActuatorPin",
              "state": false,
              "pin": 25,
              "invert": false
            }
          }
        }
      },
      "inputError": -0.5664,
      "Kp": 60,
      "Ti": 3600,
      "Td": 120,
      "p": 33.9844,
      "i": 4,
      "d": -1.875,
      "actuatorIsNegative": false
    },
    {
      "kind": "Pid",
      "name": "heater2pid",
      "enabled": true,
      "input": {
        "kind": "SensorSetPointPair",
        "sensor": {
          "kind": "TempSensorDelegate",
          "name": "beer2",
          "delegate": {
            "kind": "TempSensorDisconnected",
            "value": null,
            "connected": false
          }
        },
        "setPoint": {
          "kind": "SetPointSimple",
          "name": "beer2set",
          "value": null
        }
      },
      "output": {
        "kind": "ActuatorPwm",
        "dutySetting": 0,
        "period": 4,
        "minVal": 0,
        "maxVal": 100,
        "target": {
          "kind": "ActuatorMutexDriver",
          "mutexGroup": {
            "kind": "ActuatorMutexGroup",
            "deadTime": 1800000,
            "waitTime": 1754745
          },
          "target": {
            "kind": "ActuatorDigitalDelegate",
            "name": "heater2",
            "delegate": {
              "kind": "ActuatorNop",
              "state": false
            }
          }
        }
      },
      "inputError": null,
      "Kp": 10,
      "Ti": 600,
      "Td": 0,
      "p": 0,
      "i": 0,
      "d": 0,
      "actuatorIsNegative": false
    },
    {
      "kind": "Pid",
      "name": "coolerpid",
      "enabled": true,
      "input": {
        "kind": "SensorSetPointPair",
        "sensor": {
          "kind": "TempSensorFallback",
          "onBackupSensor": true,
          "sensor": {
            "kind": "TempSensorDelegate",
            "name": "beer1",
            "delegate": {
              "kind": "OneWireTempSensor",
              "value": 17.75,
              "connected": true,
              "address": "283836030900004C",
              "calibrationOffset": 0
            }
          }
        },
        "setPoint": {
          "kind": "SetPointSimple",
          "name": "fridgeset",
          "value": 18.332
        }
      },
      "output": {
        "kind": "ActuatorPwm",
        "dutySetting": 0,
        "period": 120,
        "minVal": 0,
        "maxVal": 100,
        "target": {
          "kind": "ActuatorMutexDriver",
          "mutexGroup": {
            "kind": "ActuatorMutexGroup",
            "deadTime": 1800000,
            "waitTime": 1754742
          },
          "target": {
            "kind": "ActuatorTimeLimited",
            "minOnTime": 10,
            "minOffTime": 0,
            "maxOnTime": 65535,
            "state": false,
            "target": {
              "kind": "ActuatorDigitalDelegate",
              "name": "cooler",
              "delegate": {
                "kind": "ActuatorPin",
                "state": false,
                "pin": 24,
                "invert": false
              }
            }
          }
        }
      },
      "inputError": -0.5664,
      "Kp": 10,
      "Ti": 3600,
      "Td": 120,
      "p": 5.6641,
      "i": 0,
      "d": -0.3125,
      "actuatorIsNegative": true
    },
    {
      "kind": "Pid",
      "name": "beer2fridgepid",
      "enabled": true,
      "input": {
        "kind": "SensorSetPointPair",
        "sensor": {
          "kind": "TempSensorDelegate",
          "name": "beer1",
          "delegate": {
            "kind": "OneWireTempSensor",
            "value": 17.75,
            "connected": true,
            "address": "283836030900004C",
            "calibrationOffset": 0
          }
        },
        "setPoint": {
          "kind": "SetPointSimple",
          "name": "beer1set",
          "value": 18.332
        }
      },
      "output": {
        "kind": "ActuatorOffset",
        "target": {
          "kind": "SensorSetPointPair",
          "sensor": {
            "kind": "TempSensorFallback",
            "onBackupSensor": true,
            "sensor": {
              "kind": "TempSensorDelegate",
              "name": "beer1",
              "delegate": {
                "kind": "OneWireTempSensor",
                "value": 17.75,
                "connected": true,
                "address": "283836030900004C",
                "calibrationOffset": 0
              }
            }
          },
          "setPoint": {
            "kind": "SetPointSimple",
            "name": "fridgeset",
            "value": 18.332
          }
        },
        "reference": {
          "kind": "SensorSetPointPair",
          "sensor": {
            "kind": "TempSensorDelegate",
            "name": "beer1",
            "delegate": {
              "kind": "OneWireTempSensor",
              "value": 17.75,
              "connected": true,
              "address": "283836030900004C",
              "calibrationOffset": 0
            }
          },
          "setPoint": {
            "kind": "SetPointSimple",
            "name": "beer1set",
            "value": 18.332
          }
        },
        "useReferenceValue": false,
        "setting": 0,
        "achieved": -0.582,
        "minimum": 0,
        "maximum": 0
      },
      "inputError": -0.5664,
      "Kp": 0,
      "Ti": 0,
      "Td": 0,
      "p": 0,
      "i": 0,
      "d": 0,
      "actuatorIsNegative": false
    }
  ]
}