Agent abstractions for engineering IoT systems: A case study in smart healthcare