from oms_tui.parser import parse_line DLL = ( "(telegram) DLL L=2a C=44 (from meter SND_NR) M=2c2d (KAM) A=76348799 " "VER=1b TYPE=16 (Cold water meter) (driver kamwater) DEV=rtlwmbus[] RSSI=97" ) JSON = ( '{"_":"telegram","media":"cold water","meter":"kamwater","name":"Vatten",' '"id":"76348799","total_m3":6.408,"target_m3":6.408,"status":"DRY",' '"timestamp":"2020-01-23T10:25:13Z","device":"rtlwmbus[]","rssi_dbm":97}' ) def test_parse_dll(): ev = parse_line(DLL) assert ev["type"] == "dll" assert ev["id"] == "76348799" assert ev["manufacturer"] == "KAM" assert ev["version"] == "1b" assert ev["media"] == "Cold water meter" assert ev["driver"] == "kamwater" assert ev["rssi"] == 97 def test_parse_json(): ev = parse_line(JSON) assert ev["type"] == "json" assert ev["id"] == "76348799" assert ev["driver"] == "kamwater" assert ev["fields"]["total_m3"] == 6.408 # metadata keys are excluded from measurement fields assert "timestamp" not in ev["fields"] assert "rssi_dbm" not in ev["fields"] def test_parse_ell_encryption(): line = ( "(telegram) ELL CI=8d CC=20 (slow_resp sync) ACC=91 SN=d37cac21 " "(AES_CTR session=3 time=1755085) CRC=576c" ) ev = parse_line(line) assert ev["type"] == "ell" assert ev["enc"] == "AES-CTR" assert ev["session"] == "3" def test_parse_tpl_security_mode(): line = "(telegram) TPL CI=7a ACC=85 STS=00 CFG=8560 (bidirectional AES_CBC_IV nb=6 cntn=0 ra=0 hc=0)" ev = parse_line(line) assert ev["type"] == "tpl" assert ev["sec_mode"] == 5 assert ev["enc"] == "AES-CBC" assert ev["nb"] == "6" def test_parse_tpl_no_security(): ev = parse_line("(telegram) TPL CI=78") assert ev["type"] == "tpl" assert ev["sec_mode"] == 0 def test_parse_noise_returns_none(): assert parse_line("(config) number of meters: 0") is None assert parse_line("") is None