Created
February 21, 2020 17:01
-
-
Save a1ien/6f346362fdef92c4adbad4ad41798af6 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| import logging | |
| import struct | |
| import aioblescan as aiobs | |
| TH_STRUCT = struct.Struct("<hH") | |
| H_STRUCT = struct.Struct("<H") | |
| T_STRUCT = struct.Struct("<h") | |
| CND_STRUCT = struct.Struct("<H") | |
| ILL_STRUCT = struct.Struct("<I") | |
| _LOGGER = logging.getLogger(__name__) | |
| XIAOMI_TYPE_DICT = { | |
| b'\x20\x98\x00': ["HHCCJCY01", 1], | |
| b'\x20\xAA\x01': ["LYWSDCGQ", 0], | |
| b'\x20\x5B\x04': ["LYWSD02", 1], | |
| b'\x30\x47\x03': ["CGG1", 0], | |
| b'\x20\x5D\x01': ["HHCCPOT002", 1] | |
| } | |
| data_dump = [ | |
| # "043E300D01130000097737342D580100FF00B000000000000000000016020106121695FE5020AA01FA097737342D580A100163", | |
| # "043E330D01130000097737342D580100FF00AE00000000000000000019020106151695FE5020AA01FB097737342D580D1004EA007A01", | |
| # "043E330D01130000097737342D580100FF00B000000000000000000019020106151695FE5020AA0103097737342D580D1004EB007601", | |
| # "043E310D01130000097737342D580100FF00B600000000000000000017020106131695FE5020AA0104097737342D580610027501", | |
| # "043E330D01130000097737342D580100FF00B100000000000000000019020106151695FE5020AA0105097737342D580D1004EA007501", | |
| # "043E330D01130000097737342D580100FF00B600000000000000000019020106151695FE5020AA0106097737342D580D1004EB007501", | |
| # "043E330D01130000097737342D580100FF00AE00000000000000000019020106151695FE5020AA0107097737342D580D1004EA007901", | |
| # "043E330D01130000097737342D580100FF00B100000000000000000019020106151695FE5020AA0108097737342D580D1004EA007901", | |
| # "043E300D01130000097737342D580100FF00B300000000000000000016020106121695FE5020AA0109097737342D580A100163", | |
| # "043E310D01130000097737342D580100FF00AF00000000000000000017020106131695FE5020AA010A097737342D58041002EA00", | |
| # "043E330D01130000097737342D580100FF00B300000000000000000019020106151695FE5020AA010C097737342D580D1004EB007C01", | |
| # "043E330D01130000097737342D580100FF00B100000000000000000019020106151695FE5020AA010D097737342D580D1004EA007E01", | |
| # "043E310D01130000097737342D580100FF00AE00000000000000000017020106131695FE5020AA010F097737342D580610027B01", | |
| # "043E330D01130000097737342D580100FF00B600000000000000000019020106151695FE5020AA0117097737342D580D1004EC007C01", | |
| # "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B044F78B8727D5B3F090610024A01E1", | |
| # "043E2502010000E98036342D5819020106151695FE5020AA01A3E98036342D580D1004FA00FA00BB", | |
| # "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B04FB78B8727D5B3F090610024A01D5", | |
| # "043E2302010000E98036342D5817020106131695FE5020AA01A4E98036342D58061002F900B9", | |
| # "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B04FD78B8727D5B3F090610024A01E1", | |
| # "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B04FE78B8727D5B3F090410020A01DE", | |
| "043E2502010000E98036342D5819020106151695FE5020AA01A3E98036342D580D1004FA00FA00BB", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B04FB78B8727D5B3F090610024A01D5", | |
| "043E2302010000E98036342D5817020106131695FE5020AA01A4E98036342D58061002F900B9", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B04FD78B8727D5B3F090610024A01E1", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B04FE78B8727D5B3F090410020A01DE", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B04FF78B8727D5B3F090610024A01D5", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B040078B8727D5B3F090410020A01DE", | |
| "043E2502010000E98036342D5819020106151695FE5020AA01A6E98036342D580D1004FA00FA00BB", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B040178B8727D5B3F090610024A01E1", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B040278B8727D5B3F090410020B01E1", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B040378B8727D5B3F090610024A01D5", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B040478B8727D5B3F090410020B01D7", | |
| "043E2502010000E98036342D5819020106151695FE5020AA01A8E98036342D580D1004FA00FB00C6", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B040578B8727D5B3F090610024A01D6", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B040678B8727D5B3F090410020B01D7", | |
| "043E2202010000E98036342D5816020106121695FE5020AA01A9E98036342D580A100164B9", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B040778B8727D5B3F090610024A01D5", | |
| "043E2302010000E98036342D5817020106131695FE5020AA01AAE98036342D58041002FB00BA", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B040978B8727D5B3F090610024A01D6", | |
| "043E2502010000E98036342D5819020106151695FE5020AA01ABE98036342D580D1004FA00FC00B9", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B040B78B8727D5B3F090610024A01DE", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B040D78B8727D5B3F090610024A01E1", | |
| "043E2502010000E98036342D5819020106151695FE5020AA01ADE98036342D580D1004FB00FB00C3", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B040F78B8727D5B3F090610024A01E1", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B041078B8727D5B3F090410020B01D5", | |
| "043E2502010000E98036342D5819020106151695FE5020AA01AEE98036342D580D1004FA00FB00B8", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B041278B8727D5B3F090410020B01D6", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B041278B8727D5B3F090410020B01D5", | |
| "043E2302010000E98036342D5817020106131695FE5020AA01AFE98036342D58061002FA00BA", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B041378B8727D5B3F090610024A01D7", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B041478B8727D5B3F090410020B01D5", | |
| "043E2502010000E98036342D5819020106151695FE5020AA01B0E98036342D580D1004FB00FB00BA", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B041578B8727D5B3F090610024A01E1", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B041578B8727D5B3F090610024A01E1", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B041678B8727D5B3F090410020B01E1", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B041878B8727D5B3F090410020B01D6", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B041878B8727D5B3F090410020B01D5", | |
| "043E2502010000E98036342D5819020106151695FE5020AA01B2E98036342D580D1004FC00FD00B7", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B041978B8727D5B3F090610024A01D7", | |
| "043E2502010000E98036342D5819020106151695FE5020AA01B3E98036342D580D1004FA00FB00C6", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B041B78B8727D5B3F090610024A01E1", | |
| "043E2302010000E98036342D5817020106131695FE5020AA01B4E98036342D58041002FB00B6", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B041D78B8727D5B3F090610024A01E1", | |
| "043E2502010000E98036342D5819020106151695FE5020AA01B5E98036342D580D1004FB00FB00C9", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B041F78B8727D5B3F090610024A01D6", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B042078B8727D5B3F090410020B01E1", | |
| "043E2502010000E98036342D5819020106151695FE5020AA01B6E98036342D580D1004FB00FA00BA", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B042178B8727D5B3F090610024A01D4", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B042278B8727D5B3F090410020B01D7", | |
| "043E2502010000E98036342D5819020106151695FE5020AA01B7E98036342D580D1004FB00FB00B9", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B042378B8727D5B3F090610024A01D5", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B042478B8727D5B3F090410020B01D7", | |
| "043E2202010000E98036342D5816020106121695FE5020AA01B8E98036342D580A100164B5", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B042578B8727D5B3F090610024A01D5", | |
| "043E2502010000E98036342D5819020106151695FE5020AA01B9E98036342D580D1004FA00FB00C8", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B042778B8727D5B3F090610024A01DE", | |
| "043E2302010000E98036342D5817020106131695FE5020AA01BAE98036342D58061002FC00C9", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B042978B8727D5B3F090610024A01E1", | |
| "043E2502010000E98036342D5819020106151695FE5020AA01BBE98036342D580D1004FA00FA00BA", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B042B78B8727D5B3F090610024A01D5", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B042D78B8727D5B3F090610024A01D6", | |
| "043E2502010000E98036342D5819020106151695FE5020AA01BDE98036342D580D1004FB00FC00B6", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B042F78B8727D5B3F090610024A01E1", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B043078B8727D5B3F090410020A01D5", | |
| "043E2502010000E98036342D5819020106151695FE5020AA01BEE98036342D580D1004F900FA00BA", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B043178B8727D5B3F090610024A01E1", | |
| "043E2302010000E98036342D5817020106131695FE5020AA01BFE98036342D58041002FA00B9", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B043378B8727D5B3F090610024A01D7", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B043478B8727D5B3F090410020B01E1", | |
| "043E2502010000E98036342D5819020106151695FE5020AA01C0E98036342D580D1004FA00FA00BA", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B043578B8727D5B3F090610024A01D7", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B043678B8727D5B3F090410020B01D5", | |
| "043E2502010000E98036342D5819020106151695FE5020AA01C1E98036342D580D1004FA00FB00B9", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B043878B8727D5B3F090410020B01E4", | |
| "043E2502010000E98036342D5819020106151695FE5020AA01C2E98036342D580D1004FB00FC00C5", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B043978B8727D5B3F090610024A01D6", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B043A78B8727D5B3F090410020B01D5", | |
| "043E2502010000E98036342D5819020106151695FE5020AA01C3E98036342D580D1004FA00FB00B6", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B043B78B8727D5B3F090610024A01D5", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B043C78B8727D5B3F090410020B01D5", | |
| "043E2302010000E98036342D5817020106131695FE5020AA01C4E98036342D58061002FA00B9", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B043D78B8727D5B3F090610024A01D5", | |
| "043E2502010000E98036342D5819020106151695FE5020AA01C5E98036342D580D1004FB00FB00B9", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B043F78B8727D5B3F090610024A01D5", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B044078B8727D5B3F090410020B01D7", | |
| "043E2502010000E98036342D5819020106151695FE5020AA01C6E98036342D580D1004FB00FB00BA", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B044178B8727D5B3F090610024A01D5", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B044278B8727D5B3F090410020B01E1", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B044378B8727D5B3F090610024A01D6", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B044478B8727D5B3F090410020B01D7", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B044578B8727D5B3F090610024A01D6", | |
| "043E2502010000E98036342D5819020106151695FE5020AA01C9E98036342D580D1004FA00FB00CA", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B044778B8727D5B3F090610024A01E1", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B044878B8727D5B3F090410020B01D5", | |
| "043E2302010000E98036342D5817020106131695FE5020AA01CAE98036342D58041002FA00C9", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B044978B8727D5B3F090610024A01E1", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B044A78B8727D5B3F090410020B01D3", | |
| "043E2502010000E98036342D5819020106151695FE5020AA01CBE98036342D580D1004FA00FA00B8", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B044B78B8727D5B3F090610024A01E1", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B044C78B8727D5B3F090410020B01D3", | |
| "043E2502010000E98036342D5819020106151695FE5020AA01CCE98036342D580D1004FA00FC00BA", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B044D78B8727D5B3F090610024A01D5", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B044F78B8727D5B3F090610024A01E1", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B045078B8727D5B3F090410020A01D4", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B045178B8727D5B3F090610024A01D7", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B045278B8727D5B3F090410020A01D6", | |
| "043E2302010000E98036342D5817020106131695FE5020AA01CFE98036342D58061002FB00BA", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B045378B8727D5B3F090610024A01D7", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B045478B8727D5B3F090410020A01E1", | |
| "043E2502010000E98036342D5819020106151695FE5020AA01D0E98036342D580D1004FC00F900B9", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B045578B8727D5B3F090610024A01D7", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B045678B8727D5B3F090410020B01D5", | |
| "043E2502010000E98036342D5819020106151695FE5020AA01D1E98036342D580D1004FB00FB00BA", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B045878B8727D5B3F090410020B01E1", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B045978B8727D5B3F090610024A01D7", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B045A78B8727D5B3F090410020B01D5", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B045D78B8727D5B3F090610024A01D7", | |
| "043E2502010000E98036342D5819020106151695FE5020AA01D5E98036342D580D1004FB00FA00BA", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B045F78B8727D5B3F090610024A01E1", | |
| "043E2202010000E98036342D5816020106121695FE5020AA01D6E98036342D580A100164C8", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B046178B8727D5B3F090610024A01E1", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B046278B8727D5B3F090410020B01DE", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B046378B8727D5B3F090610024A01D5", | |
| "043E2502010000E98036342D5819020106151695FE5020AA01D8E98036342D580D1004FA00FB00B1", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B046578B8727D5B3F090610024A01E1", | |
| "043E2502010000E98036342D5819020106151695FE5020AA01D9E98036342D580D1004FB00FC00C3", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B046778B8727D5B3F090610024A01E1", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B046878B8727D5B3F090410020B01D5", | |
| "043E2302010000E98036342D5817020106131695FE5020AA01DAE98036342D58061002FA00C8", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B046978B8727D5B3F090610024A01D7", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B046978B8727D5B3F090610024A01D6", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B046A78B8727D5B3F090410020B01E1", | |
| "043E2502010000E98036342D5819020106151695FE5020AA01DBE98036342D580D1004FB00FB00B9", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B046B78B8727D5B3F090610024A01D6", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B046C78B8727D5B3F090410020B01D5", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B046D78B8727D5B3F090610024A01D6", | |
| "043E2502010000E98036342D5819020106151695FE5020AA01DDE98036342D580D1004FB00FB00C1", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B046F78B8727D5B3F090610024A01DE", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B046F78B8727D5B3F090610024A01DE", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B047078B8727D5B3F090410020B01D4", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B047178B8727D5B3F090610024A01D7", | |
| "043E2302010000E98036342D5817020106131695FE5020AA01DFE98036342D58041002FB00B9", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B047478B8727D5B3F090410020B01E1", | |
| "043E2502010000E98036342D5819020106151695FE5020AA01E0E98036342D580D1004FA00FA00B9", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B047578B8727D5B3F090610024A01E1", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B047678B8727D5B3F090410020B01D5", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B047778B8727D5B3F090610024A01D4", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B047878B8727D5B3F090410020B01E1", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B047978B8727D5B3F090610024A01EE", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B047A78B8727D5B3F090410020B01D5", | |
| "043E2502010000E98036342D5819020106151695FE5020AA01E3E98036342D580D1004FA00FC00B9", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B047B78B8727D5B3F090610024A01D7", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B047C78B8727D5B3F090410020B01D5", | |
| "043E2302010000E98036342D5817020106131695FE5020AA01E4E98036342D58061002FB00C7", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B047D78B8727D5B3F090610024A01DE", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B047E78B8727D5B3F090410020B01D5", | |
| "043E2202010000E98036342D5816020106121695FE5020AA01E5E98036342D580A100164B9", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B047F78B8727D5B3F090610024A01E4", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B048178B8727D5B3F090610024A01D4", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B048278B8727D5B3F090410020A01E1", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B048378B8727D5B3F090610024A01D6", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B048578B8727D5B3F090610024A01DA", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B048678B8727D5B3F090410020B01D3", | |
| "043E2502010000E98036342D5819020106151695FE5020AA01E9E98036342D580D1004FB00FB00B7", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B048778B8727D5B3F090610024A01D4", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B048878B8727D5B3F090410020B01D3", | |
| "043E2302010000E98036342D5817020106131695FE5020AA01EAE98036342D58041002FB00C8", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B048978B8727D5B3F090610024A01D6", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B048A78B8727D5B3F090410020B01E1", | |
| "043E2502010000E98036342D5819020106151695FE5020AA01EBE98036342D580D1004FA00FB00C9", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B048C78B8727D5B3F090410020A01D5", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B048D78B8727D5B3F090610024A01D5", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B048E78B8727D5B3F090410020A01E1", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B048F78B8727D5B3F090610024A01DE", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B049078B8727D5B3F090410020A01D5", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B049078B8727D5B3F090410020A01D4", | |
| "043E2502010000E98036342D5819020106151695FE5020AA01EEE98036342D580D1004FB00FB00C8", | |
| "043E280201000078B8727D5B3F1C02010603021A18141695FE70205B049278B8727D5B3F090410020B01D5", | |
| "043E2302010000E98036342D5817020106131695FE5020AA01EFE98036342D58061002FC00C9", | |
| ] | |
| def parse_xiomi_value(hexvalue, typecode): | |
| """Convert value depending on its type.""" | |
| vlength = len(hexvalue) | |
| if vlength == 4: | |
| if typecode == 0x0D: | |
| (temp, humi) = TH_STRUCT.unpack(hexvalue) | |
| return {"temperature": temp / 10, "humidity": humi / 10} | |
| if vlength == 2: | |
| if typecode == 0x06: | |
| (humi,) = H_STRUCT.unpack(hexvalue) | |
| return {"humidity": humi / 10} | |
| if typecode == 0x04: | |
| (temp,) = T_STRUCT.unpack(hexvalue) | |
| return {"temperature": temp / 10} | |
| if typecode == 0x09: | |
| (cond,) = CND_STRUCT.unpack(hexvalue) | |
| return {"conductivity": cond} | |
| if vlength == 1: | |
| if typecode == 0x0A: | |
| return {"battery": hexvalue[0]} | |
| if typecode == 0x08: | |
| return {"moisture": hexvalue[0]} | |
| if vlength == 3: | |
| if typecode == 0x07: | |
| (illum,) = ILL_STRUCT.unpack(hexvalue + b'\x00') | |
| return {"illuminance": illum} | |
| return {} | |
| def parse_raw_message(data): | |
| """Parse the raw data.""" | |
| if data is None: | |
| return None | |
| # check for Xiaomi service data | |
| xiaomi_index = data.find(b'\x16\x95\xFE', 15) | |
| if xiaomi_index == -1: | |
| return None | |
| # check for no BR/EDR + LE General discoverable mode flags | |
| adv_index = data.find(b"\x02\x01\x06", 14, 17) | |
| if adv_index == -1: | |
| return None | |
| # check for BTLE msg size | |
| msg_length = data[2] + 3 | |
| if msg_length != len(data): | |
| return None | |
| # check for MAC presence in message and in service data | |
| xiaomi_mac_reversed = data[xiaomi_index + 8:xiaomi_index + 14] | |
| source_mac_reversed = data[adv_index - 7:adv_index - 1] | |
| if xiaomi_mac_reversed != source_mac_reversed: | |
| return None | |
| # check if RSSI is valid | |
| (rssi,) = struct.unpack("<b", data[msg_length - 1:msg_length]) | |
| if not 0 >= rssi >= -127: | |
| return None | |
| try: | |
| sensor_type, toffset = XIAOMI_TYPE_DICT[ | |
| data[xiaomi_index + 4:xiaomi_index + 7] | |
| ] | |
| except KeyError: | |
| _LOGGER.debug( | |
| "Unknown sensor type: %s", ''.join('{:02x}'.format(x) for x in data[xiaomi_index + 4:xiaomi_index + 7]), | |
| ) | |
| return None | |
| # xiaomi data length = message length | |
| # -all bytes before XiaomiUUID | |
| # -3 bytes Xiaomi UUID + ADtype | |
| # -1 byte rssi | |
| # -3+1 bytes sensor type | |
| # -1 byte packet_id | |
| # -6 bytes MAC | |
| # - sensortype offset | |
| xdata_length = msg_length - xiaomi_index - 15 - toffset | |
| if xdata_length < 3: | |
| return None | |
| xdata_point = xiaomi_index + (14 + toffset) | |
| xnext_point = xdata_point + 3 | |
| # check if xiaomi data start and length is valid | |
| if xdata_length != len(data[xdata_point:-1]): | |
| return None | |
| packet_id = data[xiaomi_index + 7] | |
| result = { | |
| "rssi": rssi, | |
| "mac": ''.join('{:02x}'.format(x) for x in xiaomi_mac_reversed[::-1]), | |
| "type": sensor_type, | |
| "packet": packet_id, | |
| } | |
| # loop through xiaomi payload | |
| # assume that the data may have several values of different types, | |
| # although I did not notice this behavior with my LYWSDCGQ sensors | |
| while True: | |
| xvalue_typecode = data[xdata_point] | |
| try: | |
| xvalue_length = data[xdata_point + 2] | |
| except ValueError as error: | |
| _LOGGER.error("xvalue_length conv. error: %s", error) | |
| result = {} | |
| break | |
| xnext_point = xdata_point + 3 + xvalue_length | |
| xvalue = data[xdata_point + 3:xnext_point] | |
| res = parse_xiomi_value(xvalue, xvalue_typecode) | |
| if res: | |
| result.update(res) | |
| if xnext_point > msg_length - 3: | |
| break | |
| xdata_point = xnext_point | |
| return result | |
| if __name__ == '__main__': | |
| logging.basicConfig(level=10) | |
| for data in data_dump: | |
| _LOGGER.debug(parse_raw_message(bytes.fromhex(data))) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment