Exemplo n.º 1
0
 def setUp(self):
     super().setUp()
     base.SetInitialGPIOState()
     with GPIO.write_context():
         GPIO.output(REED_LOWER, REED_CLOSED)  # Kontakt oben offen
         GPIO.output(REED_UPPER, REED_OPENED)  # Kontakt unten geschlossen
     self.controller = controlserver.Controller(start_jobs=False)
Exemplo n.º 2
0
 def test_OutdoorLight(self):
     # --- Aussenbeleuchtung ---
     self.assertFalse(self.board.IsOutdoorLightOn(), "Outdoor light should be initially off.")
     with GPIO.write_context():
         self.assertEqual(GPIO.input(LIGHT_OUTDOOR), RELAIS_OFF, "Outdoor light pin is not off.")
     self.board.SwitchOutdoorLight(False)
     self.assertFalse(self.board.IsOutdoorLightOn(), "Outdoor light should be off.")
     with GPIO.write_context():
         self.assertEqual(GPIO.input(LIGHT_OUTDOOR), RELAIS_OFF, "Outdoor light pin is not off.")
     self.board.SwitchOutdoorLight(True)
     self.assertTrue(self.board.IsOutdoorLightOn(), "Outdoor light should be on.")
     with GPIO.write_context():
         self.assertEqual(GPIO.input(LIGHT_OUTDOOR), RELAIS_ON, "Outdoor light pin is not on.")
     self.board.SwitchOutdoorLight(False)
     self.assertFalse(self.board.IsOutdoorLightOn(), "Outdoor light should be off.")
     with GPIO.write_context():
         self.assertEqual(GPIO.input(LIGHT_OUTDOOR), RELAIS_OFF, "Outdoor light pin is not off.")
Exemplo n.º 3
0
    def test_DoorClose(self):
        # Tür auf "Offen" setzen:
        self.board.door_state = DOOR_OPEN
        with GPIO.write_context():
            GPIO.output(REED_UPPER, REED_CLOSED)
            GPIO.output(REED_LOWER, REED_OPENED)

        ftr = base.Future(self.board.CloseDoor)
        self.assertTrue(ftr.WaitForExectionStart(1.0), "Future starts within time.")

        self.assertFalse(
            ftr.HasResult(),
            "Calling CloseDoor() when door is open should be possible"
        )

        self.assertFalse(
            self.board.CloseDoor(),
            "Calling CloseDoor() while door is moving should not be possible"
        )

        with GPIO.write_context():
            GPIO.output(REED_UPPER, REED_OPENED) # oben kein Signal mehr

        self.assertFalse(
            self.board.IsDoorOpen(),
            "Door should not be opened when upper reed is HIGH"
        )

        with GPIO.write_context():
            GPIO.output(REED_LOWER, REED_CLOSED) # unten auf LOW

        ftr.WaitForResult(0.5 + LOWER_REED_OFFSET) # anderen Thread ranlassen

        self.assertTrue(ftr.HasResult(), "CloseDoor() is finished.")

        self.assertTrue(_GetSaveState(), "Board state has been saved.")
        self.assertTrue(self.board.IsDoorClosed(), "Door should be closed when lower reed is LOW")
        self.assertFalse(self.board.IsDoorOpen(), "Door should not be open when upper reed is HIGH")
        self.assertTrue(ftr.WaitForResult(), "CloseDoor() succeeded.")

        self.assertFalse(
            self.board.CloseDoor(),
            "Calling CloseDoor() while door is open shouldn't be possible."
        )
        self.assertFalse(_GetSaveState(), "Board state not saved when operation fails.")
Exemplo n.º 4
0
    def test_CloseDoorByContact(self):
        ftr = self.CloseDoorTest()
        with GPIO.write_context():
            GPIO.output(REED_LOWER, REED_CLOSED)  # Kontakt oben offen
            GPIO.output(REED_UPPER, REED_OPENED)  # Kontakt unten geschlossen

        self.assertTrue(ftr.WaitForResult(), "Door is closed.")

        self.assertLess(
            ftr.GetRuntime(), DOOR_MOVE_UP_TIME,
            "Door close duration has not been reached due to contact.")
Exemplo n.º 5
0
def SetInitialGPIOState():
    """
    Setzt den initialen GPIO-Status für die Tests.
    """
    if not hasattr(GPIO, 'allow_write'):
        raise RuntimeError("Need GPIO dummy for setting initial board state!")

    with GPIO.write_context():
        GPIO.setmode(GPIO.BOARD)
        GPIO.output(REED_UPPER, REED_OPENED)
        GPIO.output(REED_LOWER, REED_CLOSED)  # Tür geschlossen
        GPIO.output(SHUTDOWN_BUTTON, 1)
Exemplo n.º 6
0
    def test_DoorOpen(self):
        ftr = base.Future(self.board.OpenDoor)
        self.assertTrue(ftr.WaitForExectionStart(1.0), "Future starts within time.")
        self.assertFalse(
            self.board.OpenDoor(),
            "Calling OpenDoor() while door is moving should not be possible!"
        )
        self.assertFalse(ftr.HasResult(), "OpenDoor() is running.")

        with GPIO.write_context():
            GPIO.output(REED_LOWER, REED_OPENED) # unten kein Signal mehr

        self.assertFalse(
            self.board.IsDoorClosed(),
            "Door should not be closed when lower reed is HIGH"
        )

        with GPIO.write_context():
            GPIO.output(REED_UPPER, REED_CLOSED) # oben auf LOW

        ftr.WaitForResult(0.5 + UPPER_REED_OFFSET)

        self.assertTrue(ftr.HasResult(), "OpenDoor() is finished.")
        self.assertTrue(_GetSaveState(), "Board state has been saved.")
        self.assertTrue(self.board.IsDoorOpen(), "Door should be opened when upper reed is LOW")
        self.assertFalse(
            self.board.IsDoorClosed(),
            "Door should not be closed when lower reed is HIGH"
        )

        self.assertTrue(ftr.WaitForResult(), "OpenDoor() succeeded.")
        self.assertFalse(
            self.board.OpenDoor(),
            "Calling OpenDoor() while door is opened shouldn't be possible"
        )
        self.assertFalse(_GetSaveState(), "Board state not saved when operation fails.")
Exemplo n.º 7
0
    def CloseDoorTest(self):
        ctrl = self.controller
        ctrl.board.door_state = DOOR_OPEN
        with GPIO.write_context():
            GPIO.output(REED_UPPER, REED_CLOSED)  # Kontakt oben geschlossen
            GPIO.output(REED_LOWER, REED_OPENED)  # Kontakt unten offen

        ftr = base.Future(ctrl.CloseDoor)
        self.assertTrue(ftr.WaitForExectionStart(0.5),
                        "Door close command is running.")

        with self.assertRaises(TimeoutError):
            ftr.WaitForResult(2)

        with GPIO.write_context():
            motor_on = GPIO.input(MOTOR_ON)
            move_dir = GPIO.input(MOVE_DIR)

        self.assertEqual(ctrl.automatic, DOOR_AUTO_OFF,
                         "Door automatic is temporary disabled.")
        self.assertEqual(motor_on, RELAIS_ON, "Motor is running.")
        self.assertEqual(move_dir, MOVE_DOWN, "Door is moving down.")
        self.assertTrue(ctrl.board.IsDoorMoving(), "Door state is 'moving'.")
        return ftr
Exemplo n.º 8
0
    def test_OpenDoorByContact(self):
        #ctrl.board.door_state = DOOR_CLOSED
        #with GPIO.write_context():
        #    GPIO.output(REED_LOWER, REED_CLOSED)
        ftr = self.OpenDoorTest()

        with GPIO.write_context():
            GPIO.output(REED_LOWER, REED_OPENED)  # Kontakt unten offen
            GPIO.output(REED_UPPER, REED_CLOSED)  # Kontakt oben geschlossen

        self.assertTrue(ftr.WaitForResult(), "Door is open.")

        self.assertLess(
            ftr.GetRuntime(), DOOR_MOVE_UP_TIME,
            "Door open duration has not been reached due to contact.")
Exemplo n.º 9
0
    def OpenDoorTest(self):
        ctrl = self.controller
        ftr = base.Future(ctrl.OpenDoor)
        self.assertTrue(ftr.WaitForExectionStart(0.5),
                        "Door open command is running.")

        with self.assertRaises(TimeoutError):
            ftr.WaitForResult(0.5)

        with GPIO.write_context():
            motor_on = GPIO.input(MOTOR_ON)
            move_dir = GPIO.input(MOVE_DIR)

        self.assertEqual(ctrl.automatic, DOOR_AUTO_OFF,
                         "Door automatic is temporary disabled.")
        self.assertEqual(motor_on, RELAIS_ON, "Motor is running.")
        self.assertEqual(move_dir, MOVE_UP, "Door is moving up.")
        self.assertTrue(ctrl.board.IsDoorMoving(), "Door state is 'moving'.")
        return ftr