示例#1
0
文件: rooms.py 项目: rolaya/gateway
 def _get_or_create_room(eext_controller,
                         room_id,
                         rooms,
                         floors,
                         skip_empty=False):
     # type: (EepromExtension, int, Dict[int, Room], Dict[int, Floor], bool) -> Optional[Room]
     if room_id not in rooms:
         room = Room.get_or_none(number=room_id)
         if room is None:
             room_data = RoomsMigrator._read_eext_fields(
                 eext_controller, 'RoomConfiguration', room_id,
                 ['floor', 'name'])
             name = room_data.get('name', '')
             try:
                 floor_id = int(room_data.get('floor', 255))
             except ValueError:
                 floor_id = 255
             if skip_empty and name == '' and floor_id == 255:
                 return None
             room = Room(number=room_id, name=name)
             if floor_id != 255:
                 room.floor = RoomsMigrator._get_or_create_floor(
                     eext_controller, floor_id, floors)
             room.save()
             RoomsMigrator._delete_eext_fields(eext_controller,
                                               'RoomConfiguration', room_id,
                                               ['floor', 'name'])
         rooms[room_id] = room
     return rooms[room_id]
示例#2
0
    def test_save(self):
        temperatures = {}

        def _get_temperature(sensor_id):
            return temperatures[sensor_id]

        controller = GatewayThermostatMappingTests._create_controller(
            get_sensor_temperature_status=_get_temperature)

        room = Room(number=5)
        room.save()

        thermostat_group = ThermostatGroup(number=0, name='global')
        thermostat_group.save()
        thermostat = Thermostat(
            number=10,
            start=0,  # 0 is on a thursday
            name='thermostat',
            thermostat_group=thermostat_group)
        thermostat.save()

        heating_thermostats = controller.load_heating_thermostats()
        self.assertEqual(1, len(heating_thermostats))
        dto = heating_thermostats[0]  # type: ThermostatDTO

        default_schedule_dto = ThermostatScheduleDTO(temp_day_1=20.0,
                                                     start_day_1='07:00',
                                                     end_day_1='09:00',
                                                     temp_day_2=21.0,
                                                     start_day_2='17:00',
                                                     end_day_2='22:00',
                                                     temp_night=16.0)

        Sensor.create(number=15)

        dto.room = 5
        dto.sensor = 15
        dto.output0 = 5
        dto.name = 'changed'
        dto.auto_thu = ThermostatScheduleDTO(temp_night=10,
                                             temp_day_1=15,
                                             temp_day_2=30,
                                             start_day_1='08:00',
                                             end_day_1='10:30',
                                             start_day_2='16:00',
                                             end_day_2='18:45')

        temperatures[15] = 5.0
        controller.save_heating_thermostats([dto])

        heating_thermostats = controller.load_heating_thermostats()
        self.assertEqual(1, len(heating_thermostats))
        dto = heating_thermostats[0]  # type: ThermostatDTO

        self.assertEqual(
            ThermostatDTO(id=10,
                          name='changed',
                          setp3=16.0,
                          setp4=15.0,
                          setp5=22.0,
                          sensor=15,
                          pid_p=120.0,
                          pid_i=0.0,
                          pid_d=0.0,
                          room=5,
                          output0=5,
                          permanent_manual=True,
                          auto_mon=default_schedule_dto,
                          auto_tue=default_schedule_dto,
                          auto_wed=default_schedule_dto,
                          auto_thu=ThermostatScheduleDTO(temp_night=10.0,
                                                         temp_day_1=15.0,
                                                         temp_day_2=30.0,
                                                         start_day_1='08:00',
                                                         end_day_1='10:30',
                                                         start_day_2='16:00',
                                                         end_day_2='18:45'),
                          auto_fri=default_schedule_dto,
                          auto_sat=default_schedule_dto,
                          auto_sun=default_schedule_dto), dto)