310 likes | 576 Views
H.A.C.S. The Home Appliance Control System. Presented by The Awesome Group. Presented by The Awesome Group. What is HACS?.
E N D
H.A.C.S. The Home Appliance Control System Presented by The Awesome Group Presented by The Awesome Group
What is HACS? A home appliance control system which uses a remote system such as a mobile phone or PDA to monitor, control, and coordinate home appliances such as your security system, oven, TV, etc.
Assumptions and Dependencies • Infallibility • No Power Failures • No Network Failures • Each Appliance has Sufficient Power and a Dedicated CPU • Wireless Network is the same as LAN • HACS has an Internet Connection • Perfect Cellular Reception • Sufficient Hardware
Requirements • HACS should • Allow users to check the status of their appliances, even when not at home • Activate and deactivate appliances • Alert users and emergency departments to critical malfunctions • Be able to accept any HACS compatible appliance
Requirements List • (1) Appliance Control – Appliances, devices such as an oven, microwave, air conditioner, or sprinkler, can be controlled by a home owner in a remote location. That is the user may set the different attributes (e.g. oven temp, AC fan speed, sprinkler settings etc.) for each appliance from a wireless device • (2) Adaptability/Detection – The system will be able to detect changes within the home and maintain the user settings. • (3) Manually Adaptable – The user can set system set the status of different appliances manually and user commands have precedence over automatic commands. • (4) Communication – HACS should be able to communicate with all appliances. • (5) Safety – HACS should maintain the safety of the user’s home and person at all times. Devices should be maintained in non-hazardous states.
The Big Picture User Interface HACS User
Bad! Use Case Diagrams(for traceability)
Use Case Diagram: Over All Use Case Diagram for Hacs Register Wireless <<extends>> Add Appliance <<extends>> Register Appliance <<uses>> Remove Appliance User Login <<uses>> Get Status <<extends>> <<extends>> PoliceDept Set Status Manage Status Appliance FireDept Emergency Alert
Use Case: Log In • HACS must be secure! • Nobody other than the owner should be able to modify an appliance’s status • What if your neighbor down the street decided to “play a joke” and turn on your oven!
Sequence Diagrams: Log In :UserInterface :HACS :UserRecord User : User issuesCommand connect(id) verify(id) returnVerification
Use Case: Get Status Manage Status <<extends>> User Appliance GetStatus • Is the garage door open? • Did you leave the oven on? • The user wants to know how the appliances are operating at any given time!
:UserInterface :HACS :Appliance User: User selectApp getStatus(app,uid) Login getStatus() returnStatus returnStatus displayStatus Sequence Diagrams: Get Status In general, this should represent a simple sequence of events
Sequence Diagrams: Get Status But what if access is denied?
Use Case: Set Status Manage Status <<extends>> User Appliance Set Status • Now that you know what the appliance is up to, don’t you want to change what it is doing?
Sequence Diagrams: Set Status :UserInterface :HACS :Appliance : User selectApp setStatus(app,uid,attribute, value) Login setStatus(attribute,value) returnStatus returnStatus displayStatus
Use Case: Register Appliance Add Appliance Register Appliance <<extends>> <<extends>> Appliance Remove Appliance User • Register Appliance is extended by Add/Remove appliance use cases to handle registration interactions within the HACS system.
Sequence Diagram: Add Appliance :Interface :HACS xyz:Appliance User : User setup appliance provide appliance identification details configure appliance settings detect appliance provide ACK add appliance provide response set range limits store range limits
Sequence Diagram: Remove Appliance :appliance :UserInterface :Hacs User : User request remove appliance request remove appliance remove appliance notify Send new status notify
Use Case: Register Wireless register wireless Wireless User • The user registers a wireless device with HACS.
Sequence Diagram: Register Wireless :HACS xyz:Appliance User : User add user provide identification details add device send confirmation
Use Case: Emergency Alert notify Fire_Department Intruder_Detector Alert_controller Emergency_Dept Fire_Detector • Reuse! Police_Department
Use Case: Evolved Emergency Alert PoliceDept Emergency Alert Appliance FireDept
Sequence Diagram: Alert System abc:Alert_contr emergency: :Police :Fire :Hacs :Device_interfac oller Emergency_dept e create_sockets() Here it is assumed devices communicate on start_threads() sockets start_sensing() Hacs notified on socket forward request on socket Demultiplex_request() Hacs notified on socket connect to data base connect to data base Notify_request() will use some api or sockets for communication wid specific department
CRC Cards: Appliance Appliance Object • Interface between HACS and specific appliances • HACS
CRC Cards: Oven Oven Appliance • Report Exceptions • Change Temperature • Change Mode • Set Timer • Turn On/Off • HACS • Alert Controller
CRC Cards: Garage Door Garage Door Appliance • Open • Close • Report Exceptions • HACS • Alert Controller
CRC Cards: Light Light Appliance • On • Off • Set Intensity • Report Exceptions • HACS • Alert Controller
CRC Cards: Alert Controller Alert Controller Object • Control Alerts • Pass Exceptions to HACS • Alert Emergency Departments • HACS • Appliance • Appliance subclasses • Emergency Department
Class Diagram: HACS System Note hid will contain perhaps an internet address for the Hacs system HACS hid UserInterface userRecords currentWindow apps uid EMservices UserRecord hid connections user_id Connect(uid) displayWindow(window) getStatus() setId(user_id) getStatus(hid, appliance) setStatus() getId() setStatus(hid, appliance, attribute, value) addAppliance() getAppliances(hid) delAppliance() notify() Login() <<actor>> appliance appId attributes hid get(attribute) set(attribute, value) alert(hid) lights Windows GarageDoor FireAlarm open() on() setSecurity(on_off) close() detect() off() detectMotion() setIntensity(value)
The END! • Questions? • Comments? • Praise for our greatness?