Updated with self-test. (DOES NOT HAVE AN ALARM TEST)