Пример #1
0
 def getData(self):
     length = self.cc2538Spi.writeByte(self._SPI_MASTER_DUMMY)
     if length < MIN_TRIUMVI_PKT_LEN or length > MAX_TRIUMVI_PKT_LEN:
         dummy = self.cc2538Spi.write(
             [self._SPI_MASTER_GET_DATA, MAX_TRIUMVI_PKT_LEN - 1] +
             (MAX_TRIUMVI_PKT_LEN - 2) * [0])
         return
     self.blueLed.leds_on()
     #print('data length: {0}'.format(length))
     dataOut = [self._SPI_MASTER_GET_DATA, length - 1] + (length - 2) * [0]
     data = self.cc2538Spi.write(dataOut)
     #print("Data: {0}".format(data))
     timeStamp = datetime.now()
     # print('Time Stamp: {0}, {1:02d}/{2:02d}, {3:02d}:{4:02d}:{5:02d}'.\
     #     format(timeStamp.year, timeStamp.month, timeStamp.day,\
     #     timeStamp.hour, timeStamp.minute, timeStamp.second))
     #newPacket = triumviPacket(data)
     #if newPacket:
     #    self.callback(newPacket)
     #    self.blueLed.leds_off()
     #    self.resetCount = 0
     newPacket = packet(data)
     if newPacket.valid == True:
         # RSSI byte is not encrypted
         rssi = newPacket.dictionary['payload'].pop()
         rssi = rssi - 256 if rssi >= 128 else rssi
     if newPacket.valid == True and newPacket.dictionary['frame_type'] == 'Data' \
         and newPacket.dictionary['payload'][0] == TRIUMVI_PACKET_ID:
         decrypted_data = triumviDecrypt(
             KEY, newPacket.dictionary['src_address'],
             newPacket.dictionary['payload'])
         if decrypted_data:
             newPacketFormatted = triumviPacket(
                 [TRIUMVI_PACKET_ID] + newPacket.dictionary['src_address'] +
                 decrypted_data)
             newPacketFormatted.dictionary['RSSI'] = rssi
             self.callback(newPacketFormatted)
             self.resetCount = 0
     # calibration coefficients packet
     elif newPacket.valid == True and newPacket.dictionary['frame_type'] == 'Data' \
         and newPacket.dictionary['payload'][0] == TRIUMVI_CALIBRATION_ID0 \
         and newPacket.dictionary['payload'][1] == TRIUMVI_CALIBRATION_ID1 \
         and (len(newPacket.dictionary['payload'])-8) % 26 == 0:
         coef_packet = triumviCalCoefPacketFormatter(
             newPacket.dictionary['payload'],
             newPacket.dictionary['src_address'])
         skt = socket.socket()
         try:
             skt.connect(('141.212.11.247', 4911))
             skt.send(json.dumps(coef_packet.dictionary))
             skt.close()
         except:
             pass
         self.callback(coef_packet)
     # waveform packet
     elif newPacket.valid == True and newPacket.dictionary['frame_type'] == 'Data' \
         and newPacket.dictionary['payload'][0] == TRIUMVI_WAVEFORM_ID0 \
         and newPacket.dictionary['payload'][1] == TRIUMVI_WAVEFORM_ID1:
         self.waveform_packets.append(newPacket)
         if len(self.waveform_packets) == 2:
             waveformPacket = waveformPacketFormatter(
                 self.waveform_packets[0], self.waveform_packets[1])
             if waveformPacket.wdict['valid']:
                 packetString = json.dumps(waveformPacket.wdict)
                 skt = socket.socket()
                 try:
                     skt.connect(('141.212.11.247', 4910))
                     skt.send(packetString)
                     skt.close()
                 except:
                     pass
                 self.waveform_packets = []
             else:
                 self.waveform_packets.pop(0)
     # APS3B12 control packet
     elif newPacket.valid == True and newPacket.dictionary['frame_type'] == 'Data' \
         and newPacket.dictionary['payload'][0] == APS3B12_PACKET_ID \
         and len(newPacket.dictionary['payload'])==4:
         skt = socket.socket()
         try:
             if newPacket.dictionary['payload'][1] == APS3B12_ENABLE:
                 if myDevice.state == 'off' and newPacket.dictionary[
                         'payload'][2] == 1:
                     skt.connect((HOST, PORT))
                     skt.send('on')
                     myDevice.state = 'on'
                 elif myDevice.state == 'on' and newPacket.dictionary[
                         'payload'][2] == 0:
                     skt.connect((HOST, PORT))
                     skt.send('off')
                     myDevice.state = 'off'
             elif newPacket.dictionary['payload'][1] == APS3B12_SET_CURRENT:
                 currentVal = float(
                     int(newPacket.dictionary['payload'][2]) * 256 +
                     int(newPacket.dictionary['payload'][3])) / 1000
                 if currentVal > myDevice.currentVal or (
                         currentVal <
                     (myDevice.currentVal - 3.5)) or (
                         currentVal == CALIBRATION_START_SETTING
                         and abs(currentVal - myDevice.currentVal) > 0.01):
                     print("Set load current to: {:}".format(currentVal))
                     skt.connect((HOST, PORT))
                     skt.send('amp=' + str(currentVal))
                     myDevice.currentVal = currentVal
                     print("Flushing FIFO...")
                     self.flushCC2538TXFIFO()
             elif newPacket.dictionary['payload'][1] == APS3B12_READ:
                 if newPacket.dictionary['payload'][
                         2] == APS3B12_READ_CURRENT:
                     skt.connect((HOST, PORT))
                     skt.send('readI')
                     value = skt.recv(1024).strip()
                     try:
                         value = float(value)
                     except:
                         value = None
                     if value:
                         print('Read Current: {:}'.format(value))
                         myDevice.currentVal = value
                         value = int(value * 1000)
                         value_arr = []
                         for i in range(4):
                             value_arr.append(value % 256)
                             value /= 256
                         dataout = [
                             self._SPI_RF_PACKET_SEND, 7, APS3B12_PACKET_ID,
                             APS3B12_CURRENT_INFO
                         ] + value_arr[::-1]
                         dummy = self.cc2538Spi.write(dataout)
             skt.close()
         except:
             pass
     self.blueLed.leds_off()
from parsePacket import *
from triumviDecrypt import triumviDecrypt

KEY = ['0x46', '0xe2', '0xe5', '0x28', '0x9a', '0x65', '0x3c', '0xe9', '0x0', '0x2f', '0xc1', '0x6e', '0x65', '0xee', '0xc', '0x3e']

data = [65, 216, 98, 34, 0, 255, 255, 51, 0, 160, 82, 84, 229, 152, 192, 160, 164, 160, 119, 254, 135, 48, 140, 126, 239, 0, 58, 181, 236, 247, 157, 182, 191, 196, 189, 57, 242]

newpacket = packet(data)

if newpacket.dictionary['payload'][0] == 160:
    decrypted_data = triumviDecrypt(KEY, newpacket.dictionary['src_address'], newpacket.dictionary['payload'])
    if decrypted_data:
        print('decrypted data: {0}'.format(decrypted_data))
    
Пример #3
0
from parsePacket import *
from triumviDecrypt import triumviDecrypt

KEY = [
    '0x46', '0xe2', '0xe5', '0x28', '0x9a', '0x65', '0x3c', '0xe9', '0x0',
    '0x2f', '0xc1', '0x6e', '0x65', '0xee', '0xc', '0x3e'
]

data = [
    65, 216, 98, 34, 0, 255, 255, 51, 0, 160, 82, 84, 229, 152, 192, 160, 164,
    160, 119, 254, 135, 48, 140, 126, 239, 0, 58, 181, 236, 247, 157, 182, 191,
    196, 189, 57, 242
]

newpacket = packet(data)

if newpacket.dictionary['payload'][0] == 160:
    decrypted_data = triumviDecrypt(KEY, newpacket.dictionary['src_address'],
                                    newpacket.dictionary['payload'])
    if decrypted_data:
        print('decrypted data: {0}'.format(decrypted_data))
Пример #4
0
 def getData(self):
     length = self.cc2538Spi.writeByte(self._SPI_MASTER_DUMMY)
     if length < MIN_TRIUMVI_PKT_LEN or length > MAX_TRIUMVI_PKT_LEN:
         self.flushCC2538TXFIFO()
         return
     self.blueLed.leds_on()
     #print('data length: {0}'.format(length))
     dataOut = [self._SPI_MASTER_GET_DATA, length-1] + (length-2)*[0]
     data = self.cc2538Spi.write(dataOut)
     #print("Data: {0}".format(data))
     timeStamp = datetime.now()
     # print('Time Stamp: {0}, {1:02d}/{2:02d}, {3:02d}:{4:02d}:{5:02d}'.\
     #     format(timeStamp.year, timeStamp.month, timeStamp.day,\
     #     timeStamp.hour, timeStamp.minute, timeStamp.second))
     #newPacket = triumviPacket(data)
     #if newPacket:
     #    self.callback(newPacket)
     #    self.blueLed.leds_off()
     #    self.resetCount = 0
     newPacket = packet(data)
     if newPacket and newPacket.dictionary['payload'][0] == TRIUMVI_PACKET_ID:
         decrypted_data = triumviDecrypt(KEY, newPacket.dictionary['src_address'], newPacket.dictionary['payload'])
         if decrypted_data:
             newPacketFormatted = triumviPacket([TRIUMVI_PACKET_ID] + newPacket.dictionary['src_address'] + decrypted_data)
             self.callback(newPacketFormatted)
             self.resetCount = 0
     # APS3B12 control packet
     elif newPacket and newPacket.dictionary['payload'][0] == APS3B12_PACKET_ID and len(newPacket.dictionary['payload'])==4:
         skt = socket.socket()
         try:
             skt.connect((HOST, PORT))
             if newPacket.dictionary['payload'][1] == APS3B12_ENABLE:
                 if myDevice.state == 'off' and newPacket.dictionary['payload'][2] == 1:
                     skt.send('on')
                     myDevice.state = 'on'
                 elif myDevice.state == 'on' and newPacket.dictionary['payload'][2] == 0:
                     skt.send('off')
                     myDevice.state = 'off'
             elif newPacket.dictionary['payload'][1] == APS3B12_SET_CURRENT:
                 currentVal = float(int(newPacket.dictionary['payload'][2])*256 + int(newPacket.dictionary['payload'][3]))/1000
                 if currentVal != myDevice.currentVal:
                     print("Set load current to: {:}".format(currentVal))
                     skt.send('amp='+str(currentVal))
                     myDevice.currentVal = currentVal
             elif newPacket.dictionary['payload'][1] == APS3B12_READ:
                 if newPacket.dictionary['payload'][2] == APS3B12_READ_CURRENT:
                     skt.send('readI')
                     value = skt.recv(1024).strip()
                     try:
                         value = float(value)
                     except:
                         value = None
                     if value:
                         print('Read Current: {:}'.format(value))
                         myDevice.currentVal = value
                         value = int(value*1000)
                         value_arr = []
                         for i in range(4):
                             value_arr.append(value%256)
                             value /= 256
                         dataout = [self._SPI_RF_PACKET_SEND, 7, APS3B12_PACKET_ID, APS3B12_CURRENT_INFO]+value_arr[::-1]
                         dummy = self.cc2538Spi.write(dataout)
             skt.close()
         except:
             pass
     self.blueLed.leds_off()