cdump / radiacode

Library for RadiaCode-101
MIT License
101 stars 18 forks source link

Не работает с прошивкой 1.15 (неизвестное сообщение 0.9) #3

Closed vooon closed 2 years ago

vooon commented 2 years ago

Пробую написать интеграцию с home assistant, но уперся в проблему с транспортом - не соединяется. Решил проверить примеры на десктопе, где бт точно свободен. Получил ошибку, из-за которой график счета не обновляется:

$ python3 webserver.py --bluetooth-mac 52:43:06:50:06:a0
will use Bluetooth connection
Task exception was never retrieved
future: <Task finished name='Task-2' coro=<process() done, defined at /home/vovan/src/smart-home/homeassistant/radiacode/radiacode-examples/webserver.py:42> exception=Exception('Uknown eid:0 gid:9')>
Traceback (most recent call last):
  File "/home/vovan/src/smart-home/homeassistant/radiacode/radiacode-examples/webserver.py", line 46, in process
    databuf = app.rc_conn.data_buf()
  File "/home/vovan/src/smart-home/homeassistant/radiacode/radiacode/radiacode.py", line 123, in data_buf
    return decode_VS_DATA_BUF(r, self._base_time)
  File "/home/vovan/src/smart-home/homeassistant/radiacode/radiacode/decoders/databuf.py", line 79, in decode_VS_DATA_BUF
    raise Exception(f'Uknown eid:{eid} gid:{gid}')
Exception: Uknown eid:0 gid:9
======== Running on http://0.0.0.0:8080 ========
cdump commented 2 years ago

Поправил, попробуйте обновиться до 0.1.5

vooon commented 2 years ago

Демо заработало, правда сстранно что CPS постоянно 0.00. Прибор показывает около 4.

Screenshot 2021-11-20 at 12-47-24 RadiaCode demo

И еще поймал такой трейс:

Task exception was never retrieved
future: <Task finished name='Task-2' coro=<process() done, defined at /home/vovan/src/smart-home/homeassistant/radiacode/radiacode-examples/webserver.py:42> exception=IndexError('index out of range')>
Traceback (most recent call last):
  File "/home/vovan/src/smart-home/homeassistant/radiacode/radiacode-examples/webserver.py", line 46, in process
    databuf = app.rc_conn.data_buf()
  File "/home/vovan/src/smart-home/homeassistant/radiacode/radiacode/radiacode.py", line 123, in data_buf
    return decode_VS_DATA_BUF(r, self._base_time)
  File "/home/vovan/src/smart-home/homeassistant/radiacode/radiacode/decoders/databuf.py", line 82, in decode_VS_DATA_BUF
    elif seq+1 == int(br._data[br._pos+38]):
IndexError: index out of range
cdump commented 2 years ago

Значит не до конца зачинил, надо разбираться с изменениями протокола в новой прошивке более детатально, issue пока закрывать не надо

vooon commented 2 years ago

С CPS наверное баг в юи.

$ python3 basic.py --bluetooth-mac 52:43:06:50:06:a0 
will use Bluetooth connection
### Serial number: RC-101-001696
--------
### Spectrum: Spectrum(duration=datetime.timedelta(days=9, seconds=74241), a0=-1.415895938873291, a1=9.561009407043457, a2=0.0073568085208535194, counts=[0, 0, 7710, 38495, 68405, 103859, 151090, 192059, 219617, 222176, 212682, 191907, 172826, 151155, 134646, 115886, 102646, 87549, 76997, 66814, 57464, 49943, 44022, 38943, 34894, 30690, 27160, 23460, 20475, 17815, 16130, 14373, 13032, 11402, 10610, 10079, 9114, 8333, 7491, 6807, 5974, 5531, 5085, 4683, 4569, 4158, 3867, 3781, 3569, 3270, 3243, 3110, 2993, 2727, 2662, 2628, 2630, 2525, 2559, 2470, 2416, 2380, 2273, 2032, 2075, 1901, 1749, 1719, 1601, 1522, 1544, 1458, 1423, 1377, 1381, 1347, 1282, 1245, 1180, 1178, 1148, 1189, 1128, 1084, 1152, 1100, 1028, 1056, 1051, 1040, 1059, 990, 1019, 961, 949, 905, 862, 887, 844, 811, 788, 780, 780, 776, 777, 805, 814, 771, 748, 763, 762, 703, 754, 705, 696, 636, 630, 602, 560, 515, 496, 466, 442, 430, 415, 370, 363, 352, 364, 360, 391, 382, 405, 381, 400, 405, 446, 441, 400, 419, 416, 420, 363, 340, 324, 314, 282, 328, 262, 225, 230, 265, 215, 218, 202, 184, 185, 177, 176, 191, 186, 191, 162, 164, 160, 167, 167, 146, 143, 170, 158, 133, 165, 121, 160, 160, 142, 131, 133, 120, 153, 125, 116, 148, 131, 127, 116, 138, 119, 111, 138, 132, 136, 121, 110, 124, 111, 105, 112, 120, 118, 110, 121, 124, 111, 109, 106, 126, 106, 92, 105, 73, 94, 79, 89, 85, 100, 95, 104, 103, 97, 86, 100, 112, 110, 108, 125, 121, 144, 120, 123, 116, 113, 124, 120, 127, 121, 149, 145, 130, 157, 135, 139, 136, 149, 148, 137, 156, 143, 172, 186, 175, 171, 209, 213, 19252])
--------
### DataBuf:
2021-11-20T13:14:09.236841 CountRate(dt=datetime.datetime(2021, 11, 20, 13, 14, 9, 236841), count=0, count_rate=1.0033154072122329e-38, flags=16448)
2021-11-20T13:14:09.236841 DoseRate(dt=datetime.datetime(2021, 11, 20, 13, 14, 9, 236841), dose_rate=6.8125000325380825e-06, dose_rate_err=10.9, flags=16448)
2021-11-20T13:00:34.273841 RareData(dt=datetime.datetime(2021, 11, 20, 13, 0, 34, 273841), duration=857959, dose=0.0018269999418407679, temperature=28.9, charge_level=75.21000000000001, flags=20544)
2021-11-20T13:00:07.739841 DoseRateDB(dt=datetime.datetime(2021, 11, 20, 13, 0, 7, 739841), count=198, count_rate=3.09375, dose_rate=6.187499820953235e-06, dose_rate_err=14.0, flags=20544)
2021-11-20T13:01:34.273841 RareData(dt=datetime.datetime(2021, 11, 20, 13, 1, 34, 273841), duration=858019, dose=0.0018279999494552612, temperature=29.439999999999998, charge_level=100.0, flags=20544)
2021-11-20T13:01:11.739841 DoseRateDB(dt=datetime.datetime(2021, 11, 20, 13, 1, 11, 739841), count=241, count_rate=3.765625, dose_rate=7.5312500484869815e-06, dose_rate_err=12.700000000000001, flags=20544)
2021-11-20T13:02:34.273841 RareData(dt=datetime.datetime(2021, 11, 20, 13, 2, 34, 273841), duration=858079, dose=0.0018279999494552612, temperature=30.43, charge_level=100.0, flags=20544)
2021-11-20T13:02:15.739841 DoseRateDB(dt=datetime.datetime(2021, 11, 20, 13, 2, 15, 739841), count=235, count_rate=3.671875, dose_rate=7.343749985011527e-06, dose_rate_err=12.9, flags=20544)
2021-11-20T13:03:34.273841 RareData(dt=datetime.datetime(2021, 11, 20, 13, 3, 34, 273841), duration=858139, dose=0.0018279999494552612, temperature=31.620000000000005, charge_level=100.0, flags=20544)
2021-11-20T13:03:19.739841 DoseRateDB(dt=datetime.datetime(2021, 11, 20, 13, 3, 19, 739841), count=216, count_rate=3.375, dose_rate=6.750000011379598e-06, dose_rate_err=13.4, flags=20544)
2021-11-20T13:04:34.273841 RareData(dt=datetime.datetime(2021, 11, 20, 13, 4, 34, 273841), duration=858199, dose=0.0018279999494552612, temperature=32.800000000000004, charge_level=100.0, flags=20544)
2021-11-20T13:04:23.739841 DoseRateDB(dt=datetime.datetime(2021, 11, 20, 13, 4, 23, 739841), count=225, count_rate=3.515625, dose_rate=7.031249879219104e-06, dose_rate_err=13.200000000000001, flags=20544)
2021-11-20T13:05:34.273841 RareData(dt=datetime.datetime(2021, 11, 20, 13, 5, 34, 273841), duration=858259, dose=0.0018279999494552612, temperature=33.9, charge_level=100.0, flags=20544)
2021-11-20T13:05:27.739841 DoseRateDB(dt=datetime.datetime(2021, 11, 20, 13, 5, 27, 739841), count=241, count_rate=3.765625, dose_rate=7.5312500484869815e-06, dose_rate_err=12.700000000000001, flags=20544)
2021-11-20T13:06:31.739841 DoseRateDB(dt=datetime.datetime(2021, 11, 20, 13, 6, 31, 739841), count=256, count_rate=4.0, dose_rate=7.999999979801942e-06, dose_rate_err=12.3, flags=20544)
2021-11-20T13:08:34.273841 RareData(dt=datetime.datetime(2021, 11, 20, 13, 8, 34, 273841), duration=858439, dose=0.0018279999494552612, temperature=36.58, charge_level=100.0, flags=20544)
2021-11-20T13:07:35.739841 DoseRateDB(dt=datetime.datetime(2021, 11, 20, 13, 7, 35, 739841), count=203, count_rate=3.171875, dose_rate=6.343750101223122e-06, dose_rate_err=13.9, flags=20544)
2021-11-20T13:09:34.273841 RareData(dt=datetime.datetime(2021, 11, 20, 13, 9, 34, 273841), duration=858499, dose=0.0018279999494552612, temperature=37.22, charge_level=100.0, flags=20544)
2021-11-20T13:08:39.739841 DoseRateDB(dt=datetime.datetime(2021, 11, 20, 13, 8, 39, 739841), count=201, count_rate=3.140625, dose_rate=6.281250080064638e-06, dose_rate_err=13.9, flags=20544)
2021-11-20T13:10:34.273841 RareData(dt=datetime.datetime(2021, 11, 20, 13, 10, 34, 273841), duration=858559, dose=0.0018289999570697546, temperature=37.77, charge_level=100.0, flags=20544)
2021-11-20T13:09:43.739841 DoseRateDB(dt=datetime.datetime(2021, 11, 20, 13, 9, 43, 739841), count=209, count_rate=3.265625, dose_rate=6.5312501646985766e-06, dose_rate_err=13.700000000000001, flags=20544)
2021-11-20T13:11:34.273841 RareData(dt=datetime.datetime(2021, 11, 20, 13, 11, 34, 273841), duration=858619, dose=0.0018289999570697546, temperature=38.24, charge_level=100.0, flags=20544)
2021-11-20T13:10:47.739841 DoseRateDB(dt=datetime.datetime(2021, 11, 20, 13, 10, 47, 739841), count=194, count_rate=3.03125, dose_rate=6.0624997786362655e-06, dose_rate_err=14.200000000000001, flags=20544)
2021-11-20T13:12:34.273841 RareData(dt=datetime.datetime(2021, 11, 20, 13, 12, 34, 273841), duration=858679, dose=0.0018289999570697546, temperature=38.7, charge_level=100.0, flags=20544)
2021-11-20T13:11:51.739841 DoseRateDB(dt=datetime.datetime(2021, 11, 20, 13, 11, 51, 739841), count=249, count_rate=3.890625, dose_rate=7.78125013312092e-06, dose_rate_err=12.5, flags=20544)
2021-11-20T13:14:11.236841 CountRate(dt=datetime.datetime(2021, 11, 20, 13, 14, 11, 236841), count=43691, count_rate=1.00331512695254e-38, flags=16448)
2021-11-20T13:14:11.236841 DoseRate(dt=datetime.datetime(2021, 11, 20, 13, 14, 11, 236841), dose_rate=6.770833351765759e-06, dose_rate_err=10.9, flags=16448)
2021-11-20T13:13:34.273841 RareData(dt=datetime.datetime(2021, 11, 20, 13, 13, 34, 273841), duration=858739, dose=0.0018289999570697546, temperature=39.11, charge_level=100.0, flags=20544)
2021-11-20T13:12:55.739841 DoseRateDB(dt=datetime.datetime(2021, 11, 20, 13, 12, 55, 739841), count=205, count_rate=3.203125, dose_rate=6.406250122381607e-06, dose_rate_err=13.8, flags=20544)
2021-11-18T17:57:34.249841 RareData(dt=datetime.datetime(2021, 11, 18, 17, 57, 34, 249841), duration=702982, dose=0.0015180000336840749, temperature=32.6, charge_level=55.120000000000005, flags=36928)
2021-11-18T17:55:31.750841 DoseRateDB(dt=datetime.datetime(2021, 11, 18, 17, 55, 31, 750841), count=294, count_rate=4.59375, dose_rate=9.187499927065801e-06, dose_rate_err=11.5, flags=36928)
2021-11-18T17:58:34.249841 RareData(dt=datetime.datetime(2021, 11, 18, 17, 58, 34, 249841), duration=703042, dose=0.0015180000336840749, temperature=32.78, charge_level=55.21, flags=36928)
2021-11-18T17:59:34.249841 RareData(dt=datetime.datetime(2021, 11, 18, 17, 59, 34, 249841), duration=703102, dose=0.0015180000336840749, temperature=32.910000000000004, charge_level=55.120000000000005, flags=36928)
2021-11-18T17:58:43.750841 DoseRateDB(dt=datetime.datetime(2021, 11, 18, 17, 58, 43, 750841), count=151, count_rate=2.359375, dose_rate=4.71875000584987e-06, dose_rate_err=16.1, flags=36928)
2021-11-18T18:00:34.249841 RareData(dt=datetime.datetime(2021, 11, 18, 18, 0, 34, 249841), duration=703162, dose=0.0015180000336840749, temperature=33.050000000000004, charge_level=55.120000000000005, flags=36928)
2021-11-18T17:59:47.750841 DoseRateDB(dt=datetime.datetime(2021, 11, 18, 17, 59, 47, 750841), count=148, count_rate=2.3125, dose_rate=4.625000201485818e-06, dose_rate_err=16.3, flags=36928)
2021-11-18T18:01:34.249841 RareData(dt=datetime.datetime(2021, 11, 18, 18, 1, 34, 249841), duration=703222, dose=0.0015180000336840749, temperature=33.2, charge_level=55.120000000000005, flags=36928)
2021-11-18T18:00:51.750841 DoseRateDB(dt=datetime.datetime(2021, 11, 18, 18, 0, 51, 750841), count=144, count_rate=2.25, dose_rate=4.500000159168849e-06, dose_rate_err=16.5, flags=36928)
2021-11-18T18:02:34.249841 RareData(dt=datetime.datetime(2021, 11, 18, 18, 2, 34, 249841), duration=703282, dose=0.0015180000336840749, temperature=33.38, charge_level=55.120000000000005, flags=36928)
2021-11-18T18:01:55.750841 DoseRateDB(dt=datetime.datetime(2021, 11, 18, 18, 1, 55, 750841), count=129, count_rate=2.015625, dose_rate=4.031249773106538e-06, dose_rate_err=17.400000000000002, flags=36928)
2021-11-18T18:03:34.249841 RareData(dt=datetime.datetime(2021, 11, 18, 18, 3, 34, 249841), duration=703342, dose=0.0015190000412985682, temperature=33.480000000000004, charge_level=55.120000000000005, flags=36928)
2021-11-18T18:02:59.750841 DoseRateDB(dt=datetime.datetime(2021, 11, 18, 18, 2, 59, 750841), count=131, count_rate=2.046875, dose_rate=4.0937497942650225e-06, dose_rate_err=17.3, flags=36928)
2021-11-18T18:04:34.249841 RareData(dt=datetime.datetime(2021, 11, 18, 18, 4, 34, 249841), duration=703402, dose=0.0015190000412985682, temperature=33.53, charge_level=55.120000000000005, flags=36928)
2021-11-18T18:04:03.750841 DoseRateDB(dt=datetime.datetime(2021, 11, 18, 18, 4, 3, 750841), count=136, count_rate=2.125, dose_rate=4.25000007453491e-06, dose_rate_err=17.0, flags=36928)
2021-11-18T18:05:34.249841 RareData(dt=datetime.datetime(2021, 11, 18, 18, 5, 34, 249841), duration=703462, dose=0.0015190000412985682, temperature=33.5, charge_level=55.21, flags=36928)
2021-11-18T18:05:07.750841 DoseRateDB(dt=datetime.datetime(2021, 11, 18, 18, 5, 7, 750841), count=151, count_rate=2.359375, dose_rate=4.71875000584987e-06, dose_rate_err=16.1, flags=36928)
2021-11-18T18:06:34.249841 RareData(dt=datetime.datetime(2021, 11, 18, 18, 6, 34, 249841), duration=703522, dose=0.0015190000412985682, temperature=33.39, charge_level=55.120000000000005, flags=36928)
2021-11-18T18:06:11.750841 DoseRateDB(dt=datetime.datetime(2021, 11, 18, 18, 6, 11, 750841), count=164, count_rate=2.5625, dose_rate=5.124999916006345e-06, dose_rate_err=15.4, flags=36928)
2021-11-18T18:07:34.249841 RareData(dt=datetime.datetime(2021, 11, 18, 18, 7, 34, 249841), duration=703582, dose=0.0015190000412985682, temperature=33.370000000000005, charge_level=55.120000000000005, flags=36928)
2021-11-18T18:07:15.750841 DoseRateDB(dt=datetime.datetime(2021, 11, 18, 18, 7, 15, 750841), count=171, count_rate=2.671875, dose_rate=5.343750217434717e-06, dose_rate_err=15.100000000000001, flags=36928)
2021-11-18T18:08:34.249841 RareData(dt=datetime.datetime(2021, 11, 18, 18, 8, 34, 249841), duration=703642, dose=0.0015190000412985682, temperature=33.370000000000005, charge_level=55.120000000000005, flags=36928)
2021-11-18T18:08:19.750841 DoseRateDB(dt=datetime.datetime(2021, 11, 18, 18, 8, 19, 750841), count=136, count_rate=2.125, dose_rate=4.25000007453491e-06, dose_rate_err=17.0, flags=36928)
2021-11-18T18:09:34.249841 RareData(dt=datetime.datetime(2021, 11, 18, 18, 9, 34, 249841), duration=703702, dose=0.0015190000412985682, temperature=33.39, charge_level=55.21, flags=36928)
2021-11-18T18:09:23.750841 DoseRateDB(dt=datetime.datetime(2021, 11, 18, 18, 9, 23, 750841), count=186, count_rate=2.90625, dose_rate=5.8125001487496775e-06, dose_rate_err=14.5, flags=36928)
2021-11-18T18:10:34.249841 RareData(dt=datetime.datetime(2021, 11, 18, 18, 10, 34, 249841), duration=703762, dose=0.0015190000412985682, temperature=33.38, charge_level=55.120000000000005, flags=36928)
2021-11-18T18:10:27.750841 DoseRateDB(dt=datetime.datetime(2021, 11, 18, 18, 10, 27, 750841), count=167, count_rate=2.609375, dose_rate=5.218750175117748e-06, dose_rate_err=15.3, flags=36928)
2021-11-18T18:11:31.750841 DoseRateDB(dt=datetime.datetime(2021, 11, 18, 18, 11, 31, 750841), count=197, count_rate=3.078125, dose_rate=6.156250037747668e-06, dose_rate_err=14.100000000000001, flags=36928)
2021-11-20T13:14:13.236841 CountRate(dt=datetime.datetime(2021, 11, 20, 13, 14, 13, 236841), count=0, count_rate=1.0033154072122329e-38, flags=16448)
2021-11-20T13:14:13.236841 DoseRate(dt=datetime.datetime(2021, 11, 20, 13, 14, 13, 236841), dose_rate=6.8125000325380825e-06, dose_rate_err=10.9, flags=16448)
2021-11-18T18:13:34.249841 RareData(dt=datetime.datetime(2021, 11, 18, 18, 13, 34, 249841), duration=703942, dose=0.0015190000412985682, temperature=33.480000000000004, charge_level=55.120000000000005, flags=36928)
cdump commented 2 years ago

@vooon теперь в master (и в версии 0.1.6) должно все работать, проверил на прошивке 1.16 - там изменился протокол, пришлось поправить

vooon commented 2 years ago

Проверил. Да, теперь все демки работают. У меня правда что-то так и не выходит с интергацией, устройство постоянно отваливается, и асинки ломаются. Пожалуй пока заброшу... (Или портирую под esphome если лень не одолеет).

Кстати тут:

https://github.com/cdump/radiacode/blob/5090fc1e7e5920f7df0fd32ec8f014d9405b9106/radiacode/transports/bluetooth.py#L18-L21

Нужно использовать raise from

        try:
            self.p = Peripheral(mac)
        except BTLEDisconnectError as ex:
            raise DeviceNotFound('Device not found or bluetooth adapter is not powered on') from ex