What I had done previously was to make a pcb that allowed me to feed resistance to my pre-made temperature controller which is a pitmaster iq 110. This fooled the pitmaster iq 110 into thinking that it had a wired probe plugged in to it, when in reality it was just a wire coming from my pi hat.
Since then, I ended up making a new pcb hat for the pi that can directly control the pwm fan I have. The pi hat takes in 12v to power the PWM fan and then drops a line down to 5v to power the pi so you don't need multiple power cables. You would have to build one of those and have a pwm fan, and an attachment to connect that fan up to your smoker. I made it using a pi 4 with 4GB of ram, but I've tested it and primarily use it now with a pi zero w.
I am a software developer by trade but PID tuning is not something I know a lot about. I was able to figure out enough to make it work, but there is definitely room for improvement on the PID tuning side of the code. For example, there is an unaccounted for time difference in my code's reaction to the current circumstances and the natural behavior of smokers rising and falling in temperature. It works well enough for me because I don't constantly open my smoker lid, but for someone that constantly opens the lid to their smoker this could be an issue.
I am not sure it's ready to be shared but I have considered it.