// Send settings as JSON string void PiLink::sendControlSettings(void){ char tempString[12]; printResponse('S'); ControlSettings& cs = tempControl.cs; sendJsonPair(JSONKEY_mode, cs.mode); sendJsonPair(JSONKEY_beerSetting, cs.beerSetting.toTempString(tempString, 2, 12, tempControl.cc.tempFormat, true)); sendJsonPair(JSONKEY_fridgeSetting, cs.fridgeSetting.toTempString(tempString, 2, 12, tempControl.cc.tempFormat, true)); sendJsonClose(); }
// Send settings as JSON string void PiLink::sendControlSettings(void){ char tempString[12]; print_P(PSTR("S:{")); sendJsonPair(jsonKeys.mode, tempControl.cs.mode); sendJsonPair(jsonKeys.beerSetting, tempToString(tempString, tempControl.cs.beerSetting, 2, 12)); sendJsonPair(jsonKeys.fridgeSetting, tempToString(tempString, tempControl.cs.fridgeSetting, 2, 12)); sendJsonPair(jsonKeys.heatEstimator, fixedPointToString(tempString, tempControl.cs.heatEstimator, 3, 12)); // last one 'manually' to have no trailing comma print_P(PSTR("\"%s\":%s}\n"), jsonKeys.coolEstimator, fixedPointToString(tempString, tempControl.cs.coolEstimator, 3, 12)); }
void PiLink::printTemperaturesJSON(char * beerAnnotation, char * fridgeAnnotation){ printResponse('T'); temp_t t; t = tempControl.getBeerTemp(); if (changed(beerTemp, t)) sendJsonTemp(PSTR(JSON_BEER_TEMP), t); t = tempControl.getBeerSetting(); if (changed(beerSet,t)) sendJsonTemp(PSTR(JSON_BEER_SET), t); if (changed(beerAnn, beerAnnotation)) sendJsonAnnotation(PSTR(JSON_BEER_ANN), beerAnnotation); t = tempControl.getFridgeTemp(); if (changed(fridgeTemp, t)) sendJsonTemp(PSTR(JSON_FRIDGE_TEMP), t); t = tempControl.getFridgeSetting(); if (changed(fridgeSet, t)) sendJsonTemp(PSTR(JSON_FRIDGE_SET), t); if (changed(fridgeAnn, fridgeAnnotation)) sendJsonAnnotation(PSTR(JSON_FRIDGE_ANN), fridgeAnnotation); t = tempControl.getRoomTemp(); if (changed(roomTemp, t)) sendJsonTemp(PSTR(JSON_ROOM_TEMP), tempControl.getRoomTemp()); if (changed(state, tempControl.getState())) sendJsonPair(PSTR(JSON_STATE), (uint8_t)tempControl.getState()); #if BREWPI_SIMULATE printJsonName(PSTR(JSON_TIME)); print_P(PSTR("%lu"), ticks.millis()/1000); #endif sendJsonClose(); }
void PiLink::sendJsonPair(const char * name, uint8_t val) { sendJsonPair(name, (uint16_t)val); }
// Send all control variables. Useful for debugging and choosing parameters void PiLink::sendControlVariables(void){ char tempString[12]; print_P(PSTR("V:{")); sendJsonPair(jsonKeys.beerDiff, tempDiffToString(tempString, tempControl.cv.beerDiff, 3, 12)); sendJsonPair(jsonKeys.diffIntegral, tempDiffToString(tempString, tempControl.cv.diffIntegral, 3, 12)); sendJsonPair(jsonKeys.beerSlope, tempDiffToString(tempString, tempControl.cv.beerSlope, 3, 12)); sendJsonPair(jsonKeys.p, fixedPointToString(tempString, tempControl.cv.p, 3, 12)); sendJsonPair(jsonKeys.i, fixedPointToString(tempString, tempControl.cv.i, 3, 12)); sendJsonPair(jsonKeys.d, fixedPointToString(tempString, tempControl.cv.d, 3, 12)); sendJsonPair(jsonKeys.Kp, fixedPointToString(tempString, tempControl.cv.Kp, 3, 12)); sendJsonPair(jsonKeys.Kd, fixedPointToString(tempString, tempControl.cv.Kd, 3, 12)); sendJsonPair(jsonKeys.estimatedPeak, tempToString(tempString, tempControl.cv.estimatedPeak, 3, 12)); sendJsonPair(jsonKeys.negPeakSetting, tempToString(tempString, tempControl.cv.negPeakSetting, 3, 12)); sendJsonPair(jsonKeys.posPeakSetting, tempToString(tempString, tempControl.cv.posPeakSetting, 3, 12)); sendJsonPair(jsonKeys.negPeak, tempToString(tempString, tempControl.cv.negPeak, 3, 12)); print_P(PSTR("\"%s\":%s}\n"), jsonKeys.posPeak, tempToString(tempString, tempControl.cv.posPeak, 3, 12)); }
// Send control constants as JSON string. Might contain spaces between minus sign and number. Python will have to strip these void PiLink::sendControlConstants(void){ char tempString[12]; print_P(PSTR("C:{")); sendJsonPair(jsonKeys.tempFormat, tempControl.cc.tempFormat); sendJsonPair(jsonKeys.tempSettingMin, tempToString(tempString, tempControl.cc.tempSettingMin, 1, 12)); sendJsonPair(jsonKeys.tempSettingMax, tempToString(tempString, tempControl.cc.tempSettingMax, 1, 12)); sendJsonPair(jsonKeys.KpHeat, fixedPointToString(tempString, tempControl.cc.KpHeat, 3, 12)); sendJsonPair(jsonKeys.KpCool, fixedPointToString(tempString, tempControl.cc.KpCool, 3, 12)); sendJsonPair(jsonKeys.Ki, fixedPointToString(tempString, tempControl.cc.Ki, 3, 12)); sendJsonPair(jsonKeys.KdCool, fixedPointToString(tempString, tempControl.cc.KdCool, 3, 12)); sendJsonPair(jsonKeys.KdHeat, fixedPointToString(tempString, tempControl.cc.KdHeat, 3, 12)); sendJsonPair(jsonKeys.iMaxError, tempDiffToString(tempString, tempControl.cc.iMaxError, 3, 12)); sendJsonPair(jsonKeys.iMaxSlope, tempDiffToString(tempString, tempControl.cc.iMaxSlope, 3, 12)); sendJsonPair(jsonKeys.iMinSlope, tempDiffToString(tempString, tempControl.cc.iMinSlope, 3, 12)); sendJsonPair(jsonKeys.idleRangeHigh, tempDiffToString(tempString, tempControl.cc.idleRangeHigh, 3, 12)); sendJsonPair(jsonKeys.idleRangeLow, tempDiffToString(tempString, tempControl.cc.idleRangeLow, 3, 12)); sendJsonPair(jsonKeys.heatingTargetUpper, tempDiffToString(tempString, tempControl.cc.heatingTargetUpper, 3, 12)); sendJsonPair(jsonKeys.heatingTargetLower, tempDiffToString(tempString, tempControl.cc.heatingTargetLower, 3, 12)); sendJsonPair(jsonKeys.coolingTargetUpper, tempDiffToString(tempString, tempControl.cc.coolingTargetUpper, 3, 12)); sendJsonPair(jsonKeys.coolingTargetLower, tempDiffToString(tempString, tempControl.cc.coolingTargetLower, 3, 12)); sendJsonPair(jsonKeys.maxHeatTimeForEstimate, tempControl.cc.maxHeatTimeForEstimate); sendJsonPair(jsonKeys.maxCoolTimeForEstimate, tempControl.cc.maxCoolTimeForEstimate); sendJsonPair(jsonKeys.fridgeFastFilter, tempControl.cc.fridgeFastFilter); sendJsonPair(jsonKeys.fridgeSlowFilter, tempControl.cc.fridgeSlowFilter); sendJsonPair(jsonKeys.fridgeSlopeFilter, tempControl.cc.fridgeSlopeFilter); sendJsonPair(jsonKeys.beerFastFilter, tempControl.cc.beerFastFilter); sendJsonPair(jsonKeys.beerSlowFilter, tempControl.cc.beerSlowFilter); // last one 'manually' to have no trailing comma print_P(PSTR("\"%s\":%u}\n"), jsonKeys.beerSlopeFilter, tempControl.cc.beerSlopeFilter); }