I'm trying to make decoder, data-->json. You paste raw data, and it decodes it into json. Here are 2 scenarios:
After second scenario, even when you try to put VALID data, it will say "invalid data" forever. How can make it work, so when you first write "abcd", and then paste valid data, it will just decode it?! I tried loops, breaks, continues... Nothing works, and typing invalid input ruins whole code - you have to restart program and paste VALID data.
import requests
import json
while True:
try:
raw = input('Please paste raw data: '+"\n")
url = 'https://platform.lobaro.com/api/mbus?raw={}'.format(raw)
print("\n")
get = requests.get(url)
json_body = get.json()
parsed = json.dumps(json_body)
parsed2 = json.loads(parsed)
formatted = json.dumps(json.loads(parsed), indent=2)
print(formatted+"\n")
print("INFORMATIONS:")
name = parsed2["MFieldLongString"]
print(f'Producer: {name}')
l1 = parsed2["Length"]
print(f'Lenght: {l1}'+'\n')
print('============================================================================')
except requests.exceptions.JSONDecodeError:
print('Invalid data! Could not parse to JSON.'+"\n")
continue
The site uses other API URL to decode wmbus messages:
import json
import requests
api_url = "https://platform.lobaro.com/gqlgen/query"
payload = {
"operationName": None,
"query": "query ($raw: String!, $key: String) {\n wmbus: parseWmbus(raw: $raw, key: $key) {\n data\n parseError\n __typename\n }\n}\n",
"variables": {
"key": "0102030405060708090A0B0C0D0E0F11", # <-- change this field
"raw": "2e44931578563412330333637a2a0020055923c95aaa26d1b2e7493b2a8b013ec4a6f6d3529b520edff0ea6defc955b29d6d69ebf3ec8a", # <-- change this field
},
}
data = requests.post(api_url, json=payload).json()
if data['data']['wmbus']['parseError'] == "":
data = json.loads(data["data"]["wmbus"]["data"])
print(data)
Prints:
{
"Raw": "0x2e4493157856341233037a2a0020055923c95aaa26d1b2e7493b013ec4a6f6d3529b520edff0ea6defc99d6d69ebf3",
"RawWithCrc": "0x2e44931578563412330333637a2a0020055923c95aaa26d1b2e7493b2a8b013ec4a6f6d3529b520edff0ea6defc955b29d6d69ebf3ec8a",
"FrameFormat": "A",
"Length": 46,
"CField": "0x44",
"CFieldString": "0x44 (SND_NR)",
"MField": "0x9315",
"MFieldCodeString": "ELS",
"MFieldLongString": "Elster GmbH, Germany, Europe",
"Id": 305419896,
"IdString": "12345678",
"Version": 51,
"Device": "0x03",
"DeviceString": "Gas",
"CiField": "0x7a",
"HeaderKnown": True,
"PayloadKnown": True,
"CrcValid": True,
"HasCrc": True,
"SourceType": "WMBUS",
"IsCompactFrame": False,
"FormatSignature": 61330,
"FormatFrame": "0x0c14046d02fd17",
"Header": {
"Serial": 0,
"IdString": "",
"ManufacturerCode": 0,
"MFieldCodeString": "",
"MFieldLongString": "",
"Version": 0,
"DeviceType": "0x00",
"DeviceString": "",
"EncryptionMode": 5,
"EncryptionModeString": "AES with CBC",
"EncryptedBlocks": 2,
"HopCount": 0,
"IsAccessible": True,
"IsBidirectionalMode": False,
"IsSynchronous": False,
"ReservedBit": False,
"TelegramType": 0,
"AccessNumber": 42,
"StatusByte": 0,
"ConfigField": [32, 5],
...and so on.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With