Using an Arduino and particle sensor I’ve built a smoke detector and packed it into the case from an expired Nest thermostat. The microcontroller is a Sparkfun ESP32 C powered by a 3000mAh LiPo battery. The particle sensor is a Sparkfun MAX30101. When smoke is detected it sounds an alarm through a connecteverything.com buzzer and sends a message to a local MQTT server. Software running on my Linux server listens to that queue. When it hears a message from the smoke detector it sends me an email and a text message.
This has passed a battery of tests in the Doomsday Brunch research labs by responding to cigar smoke blown in its general direction. This seems good enough for a backup smoke detector and was fun to build.