Repository navigation
feat: add Cosori Pro II 5.8 Qt (CS358-AF) air fryer - #557
Open
ScribleSean wants to merge 3 commits into
Open
ScribleSean wants to merge 3 commits into
ScribleSean wants to merge 3 commits into
Conversation
Map the CS358-AF to VeSyncTurboBlazeFryer and add cook_from_preheat to that class using the preheatCook payload method. All values in the map entry and the new method were confirmed on a physical US unit. Refs webdjoe#526.
This was referenced Oct 11, 2026
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Adds the Cosori Pro II 5.8 Qt (
CS358-AF, US) on top of the air fryer refactor. Refs #526.The model speaks the same bypassV2 protocol as the TurboBlaze, so
VeSyncTurboBlazeFryerdrives it. The change is oneAirFryerMapentry, acook_from_preheatimplementation for that class, and tests.What changed
device_map.py: newAirFryerMapentry forCS358-AF.const.py:BACON,SHRIMPandTOASTadded toAirFryerCookModes.vesynckitchen.py:VeSyncTurboBlazeFryer.cook_from_preheat(), which sends thepreheatCookpayload method with empty data. It requires thePREHEATfeature and apreheatEndstatus.test_fryer_preheat.pyfor the new method and the temperature range.Tested on a physical unit
I have a CS358-AF (configModule
WiFiBTOnboarding_AirFryer_CS358-AF_US, Fahrenheit) and ran this branch against it. Every row below was observed on the device through this code.update()getAirfryerStatusreturns the same fields asFryerTurboBlazeDetailResult, plusappointLastTimeset_mode(cook_time, cook_temp)startCookstarts cooking from the cloud, no button press on the unitset_mode(..., preheat_time=...)stepArrayfor the whole preheatcook_from_preheat()atpreheatEndpreheatCookstarts the queued cook step at the same temperature and timecook_from_preheat()after pulling and returning the basket atpreheatEndpreheatEnd,pullOut,preheatEnd, thencookingend()while preheating and while cookingendCookreturns the unit tostandbyStatuses observed, all included in the
status_map:standbyreadyheatingpreheatStoppreheatEndcookingcookStopcookEndpullOutkeepingOther things read off the unit:
The unit picks its own preheat duration from the target temperature: 3 minutes at 170 F and 4 minutes at 350 F. The value passed as
preheat_timeonly switches preheat on.A manual program reports mode
Custom, which matchesAirFryerPresets.custom.The unit reports nothing for a preset until it is started. Starting each preset button on the unit gave these mode strings, each with its own recipe ID:
moderecipeIdSteakChickenSeafoodBaconFrozenFrench friesVegetablesShrimpBakeToastOnly the mode strings are in the map. The Shake button on the unit sets
shakeTimein the step to about half the cook time, and back to 0 when turned off.Temperature moves in 10 F steps on the unit. The manual gives 170 to 400 F and 77 to 204 C. I set the Celsius range to 80 to 200 so both ends sit on the 5 C step and can be set. I only ran the unit in Fahrenheit.
Things to flag
cook_from_preheatonly reaches the API on the CS358-AF. The CAF-DC601S declaresPREHEATbut has no status that maps toPREHEAT_END, and the Dual Blaze entries do not declarePREHEAT, so both returnFalsebefore any request.currentTempwas 0 in every state on my unit, including while cooking. With the Celsius conversion inget_details()that surfaces as 32 F. I left the shared code alone, but the reading is not useful on this model.French fries, with a space and a lower-case f, where the Dual Blaze usesFrenchFries.Customonly.RESUMABLEis not claimed.Existing behaviour in the shared class that this model runs into
I did not change any of these here, to keep the diff to the new model. The first two are fixed separately in #560.
set_mode_from_recipesets the local status toCOOKINGeven when preheat was requested, socook_from_preheat()needs anupdate()first to seepreheatEnd.get_detailspassespreheatSetTimethrough as0, notNone.FryerState.is_in_preheat_modetests forNone, so apullOutduring a cook reads as preheat.set_statereturns early forCOOK_STOPandPREHEAT_STOP, so a first poll inready,cookStoporpreheatStophas no cook temperature, mode or remaining time.Checks
pytest src/tests: 407 passed, 3 skipped. The test workflow does not run for pull requests against this branch, so that is a local result.ruff checkandruff format --checkare clean.mypyreports two errors invesyncthermostat.py, the same as on the base branch.I can run further captures or test changes against the unit if that helps.