Beispiel #1
0
 def send_onoff(self, transport, on):
     """ Send an 'On' or 'Off' command using the given transport """
     if self.packettype == 0x10:  # Lighting1
         pkt = lowlevel.Lighting1()
         pkt.set_transmit(self.subtype, 0, self.housecode, self.unitcode,
                          on and 0x01 or 0x00)
         transport.send(pkt.data)
     elif self.packettype == 0x11:  # Lighting2
         pkt = lowlevel.Lighting2()
         pkt.set_transmit(self.subtype, 0, self.id_combined, self.unitcode,
                          on and 0x01 or 0x00, 0x00)
         transport.send(pkt.data)
     elif self.packettype == 0x12:  # Lighting3
         pkt = lowlevel.Lighting3()
         pkt.set_transmit(self.subtype, 0, self.system, self.channel,
                          on and 0x10 or 0x1a)
         transport.send(pkt.data)
     elif self.packettype == 0x14:  # Lighting5
         pkt = lowlevel.Lighting5()
         pkt.set_transmit(self.subtype, 0, self.id_combined, self.unitcode,
                          on and 0x01 or 0x00, 0x00)
         transport.send(pkt.data)
     elif self.packettype == 0x15:  # Lighting6
         pkt = lowlevel.Lighting6()
         pkt.set_transmit(self.subtype, 0, self.id_combined, self.groupcode,
                          self.unitcode, not on and 0x01 or 0x00,
                          self.cmndseqnbr)
         self.cmndseqnbr = (self.cmndseqnbr + 1) % 5
         transport.send(pkt.data)
     else:
         raise ValueError("Unsupported packettype")
Beispiel #2
0
def get_device(packettype, subtype, id_string):
    """ Return a device base on its identifying values """
    if packettype == 0x10:  # Lighting1
        pkt = lowlevel.Lighting1()
        pkt.parse_id(subtype, id_string)
        return LightingDevice(pkt)
    elif packettype == 0x11:  # Lighting2
        pkt = lowlevel.Lighting2()
        pkt.parse_id(subtype, id_string)
        return LightingDevice(pkt)
    elif packettype == 0x12:  # Lighting3
        pkt = lowlevel.Lighting3()
        pkt.parse_id(subtype, id_string)
        return LightingDevice(pkt)
    elif packettype == 0x14:  # Lighting5
        pkt = lowlevel.Lighting5()
        pkt.parse_id(subtype, id_string)
        return LightingDevice(pkt)
    elif packettype == 0x15:  # Lighting6
        pkt = lowlevel.Lighting6()
        pkt.parse_id(subtype, id_string)
        return LightingDevice(pkt)
    else:
        raise ValueError("Unsupported packettype")
Beispiel #3
0
 def send_dim(self, transport, level):
     """ Send a 'Dim' command with the given level using the given
         transport
     """
     if self.packettype == 0x10:  # Lighting1
         raise ValueError("Dim level unsupported for Lighting1")
         # Supporting a dim level for X10 directly is not possible because
         # RFXtrx does not support sending extended commands
     elif self.packettype == 0x11:  # Lighting2
         if level == 0:
             self.send_off(transport)
         else:
             pkt = lowlevel.Lighting2()
             pkt.set_transmit(self.subtype, 0, self.id_combined,
                              self.unitcode, 0x02,
                              ((level + 6) * 16 // 100) - 1)
             transport.send(pkt.data)
     elif self.packettype == 0x12:  # Lighting3
         raise ValueError("Dim level unsupported for Lighting3")
         # Should not be too hard to add dim level support for Lighting3
         # (Ikea Koppla) due to the availability of the level 1 .. level 9
         # commands. I just need someone to help me with defining a mapping
         # between a percentage and a level
     elif self.packettype == 0x14:  # Lighting5
         if level == 0:
             self.send_off(transport)
         else:
             pkt = lowlevel.Lighting5()
             pkt.set_transmit(self.subtype, 0, self.id_combined,
                              self.unitcode, 0x10,
                              ((level + 3) * 32 // 100) - 1)
             transport.send(pkt.data)
     elif self.packettype == 0x15:  # Lighting6
         raise ValueError("Dim level unsupported for Lighting6")
     else:
         raise ValueError("Unsupported packettype")
Beispiel #4
0
    def test_Lighting2(self):
        x = lowlevel.Lighting2()
        self.assertIsNone(x.subtype)
        self.assertIsNone(x.seqnbr)
        self.assertIsNone(x.id_string)
        self.assertIsNone(x.cmnd)
        self.assertIsNone(x.rssi)
 
        x.load_receive(bytearray([0x0b, 0x11, 0x00, 0x2a, 0x01, 0x23, 0x45, 0x67, 0x05, 0x02, 0x08, 0x70]))
        self.assertEqual(x.seqnbr, 42)
        self.assertEqual(x.id_string,"1234567:5")
        self.assertEqual(list(x.data), [11, 17, 0, 42, 1, 35, 69, 103, 5, 2, 8, 112])
        self.assertEqual(x.packetlength,11)
        self.assertEqual(x.packettype,17)
        self.assertEqual(x.subtype,0)
        self.assertEqual(x.type_string,"AC")
        self.assertEqual(x.seqnbr,42)
        self.assertEqual(x.unitcode,5)
        self.assertEqual(x.id1,1)
        self.assertEqual(x.id2,35)
        self.assertEqual(x.id3,69)
        self.assertEqual(x.id4,103)
        self.assertEqual(x.id_combined,19088743)
        self.assertEqual(x.cmnd,2)
        self.assertEqual(x.cmnd_string,"Set level")
        self.assertEqual(x.rssi_byte,112)
        self.assertEqual(x.rssi,7)
        self.assertEqual(x.__str__(),'Lighting2 [subtype=AC, seqnbr=42, id=1234567:5, cmnd=Set level, level=8, rssi=7]')
 
        x = lowlevel.Lighting2()
        x.set_transmit(0x00, 0x2a, 0x1234567, 0x05, 0x02, 0x08)
        self.assertEqual(x.seqnbr, 42)
        self.assertEqual(list(x.data), [11, 17, 0, 42, 1, 35, 69, 103, 5, 2, 8, 0])
        self.assertEqual(x.packetlength,11)
        self.assertEqual(x.packettype,17)
        self.assertEqual(x.subtype,0)
        self.assertEqual(x.type_string,"AC")
        self.assertEqual(x.seqnbr,42)
        self.assertEqual(x.id1,1)
        self.assertEqual(x.id2,35)
        self.assertEqual(x.id3,69)
        self.assertEqual(x.id4,103)
        self.assertEqual(x.id_combined,19088743)
        self.assertEqual(x.unitcode,5)
        self.assertEqual(x.id_string,"1234567:5")
        self.assertEqual(x.cmnd,2)
        self.assertEqual(x.cmnd_string,"Set level")
        self.assertEqual(x.rssi_byte,0)
        self.assertEqual(x.rssi,0)

        x = lowlevel.Lighting2()
        x.parse_id(0, "1234567:5")
        self.assertEqual(x.id1,1)
        self.assertEqual(x.id2,35)
        self.assertEqual(x.id3,69)
        self.assertEqual(x.id4,103)
        self.assertEqual(x.id_combined,19088743)
        self.assertEqual(x.unitcode,5)

       
        self.assertRaises(ValueError, x.parse_id,0, "12345678:5")
        self.assertRaises(ValueError, x.parse_id,0, "123456:54")
        self.assertRaises(ValueError, x.parse_id,0, "123456785")