This manifesto doesn't exclude IoT (Internet of Things) devices, but it has some rules. Let's consider the class of devices to include: Flood monitors, Stove usage monitors, Motion detectors and Entry/Exit monitors.
- If you don't run off of AC, your nominal battery life should be 5 years. Assume 2 years of worst case (power consumption-wise) performance. Do you check/change your smoke alarm batteries religiously every year? Maybe not. If you can't guarantee 2 years of performance (and you are a critical monitor) then you should run off of house current (AC).
- If you need to run when power is loss, then you should have backup batteries that last at least a couple of days. This is particularly important for Flood monitors, etc.
- If you can't automatically recover from a power failure, use backup batteries to keep the system running or use persistent memory to snapshot states.
- Your device should have some "local" alert capability and not rely 100% on the Internet for notification. If I am in the house, there should be an audible alarm and not reliance on my smart phone being notified via the Internet.
- If Internet notification is critical, don't trust Wi-Fi. Let's use an analogy: Your car's critical systems (engines, steering, braking, locks, etc) should, by design, run on a separate network than your Entertainment system (radio, etc). Your IoT device probably should follow that same rule. Wi-Fi can get congested, it can have password changes, it is a common target for attack. But what can you use instead of Wi-Fi? Consider ZigBee, XBee or other more robust protocol (no, not Bluetooth!) as the delivery transport to the home router. All home routers still feature Ethernet ports so your transport receiver can be plugged in there. You still rely on the monitor but you are not affected by all the issues with Wi-Fi. Now, of course, you should consider encryption and authentication too when using a non-Wi-Fi protocol...
- Don't design for over the air software/firmware updates. This is a HUGE security hole and although you may have thoroughly thought it through -- you haven't. Get your software as correct as possible and consider doing updates through a computer or smartphone "directly" and "physically". Things that can be controlled through the Internet will be a nice fat target for people who want to control your stuff through the Internet. Don't advertise your house as hackable!
- No SD cards. Nope. SD cards are not designed for reliability or longevity. Use persistent memory that has at least a 10 year retention.
- No rechargeable batteries. How long do you really get on a L-ion/poly? Two years? Five years?
- Avoid LCD/button interfaces as much as possible. What is this, the 1990s? If you need a way to silence an alarm or (temporarily) disable a sensor use touch or tap and a simple indicator.
- No disabling or critical manipulation through the Internet. Sorry, see #6.
- Know thy hardware. Don't just choose a Raspberry Pi or Arduino unless you know exactly how each critical component is rated (e.g. environmentals, write duration, etc).
- Know thy software. Don't just load up a Linux and go. Are there processes running you don't understand? Update software maybe?
I try and to design to these tenets. I am surprised how many commercial IoT devices seem to ignore them.