mirror of
https://github.com/meshcore-dev/meshcore_py.git
synced 2026-04-20 22:13:49 +00:00
quick and dirty json encoder
This commit is contained in:
parent
fe2df52403
commit
aa43afc3e7
3 changed files with 60 additions and 3 deletions
|
|
@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|||
|
||||
[project]
|
||||
name = "meshcore"
|
||||
version = "1.9.8.dev5"
|
||||
version = "1.9.8.dev6"
|
||||
authors = [
|
||||
{ name="Florent de Lamotte", email="florent@frizoncorrea.fr" },
|
||||
{ name="Alex Wolden", email="awolden@gmail.com" },
|
||||
|
|
|
|||
56
src/meshcore/lpp_json_encoder.py
Normal file
56
src/meshcore/lpp_json_encoder.py
Normal file
|
|
@ -0,0 +1,56 @@
|
|||
from cayennelpp import LppFrame, LppData
|
||||
from cayennelpp.lpp_type import LppType
|
||||
|
||||
# type name "how to display vale"
|
||||
# display : None: (use lib default), []: only one value to display, ["field1", "field2" ...]: meaning of each field
|
||||
my_lpp_types = {
|
||||
0: ('digital input', []),
|
||||
1: ('digital output', []),
|
||||
2: ('analog input', []),
|
||||
3: ('analog output', []),
|
||||
100: ('generic sensor', []),
|
||||
101: ('illuminance', []),
|
||||
102: ('presence', []),
|
||||
103: ('temperature', []),
|
||||
104: ('humidity', []),
|
||||
113: ('accelerometer', ["acc_x", "acc_y", "acc_z"]),
|
||||
115: ('barometer', []),
|
||||
116: ('voltage', []),
|
||||
117: ('current', []),
|
||||
118: ('frequency', []),
|
||||
120: ('percentage', []),
|
||||
121: ('altitude', []),
|
||||
122: ('load', []),
|
||||
125: ('concentration', []),
|
||||
128: ('power', []),
|
||||
130: ('distance', []),
|
||||
131: ('energy', []),
|
||||
132: ('direction', None),
|
||||
133: ('time', []),
|
||||
134: ('gyrometer', None),
|
||||
135: ('colour', ["red", "green", "blue"]),
|
||||
136: ('gps', ["latitude", "longitude", "altitude"]),
|
||||
142: ('switch', []),
|
||||
}
|
||||
|
||||
def lpp_json_encoder (obj) :
|
||||
"""Encode LppType, LppData, and LppFrame to JSON."""
|
||||
if isinstance(obj, LppFrame):
|
||||
return obj.data
|
||||
if isinstance(obj, LppType):
|
||||
return my_lpp_types[obj.type][0]
|
||||
if isinstance(obj, LppData):
|
||||
d = {"channel" : obj.channel, "type" : obj.type}
|
||||
if my_lpp_types[obj.type.type][1] is None :
|
||||
d["value"] = obj.value
|
||||
elif len(my_lpp_types[obj.type.type][1]) == 0 :
|
||||
d["value"] = obj.value[0]
|
||||
else :
|
||||
val_dict = {}
|
||||
i = 0
|
||||
for t in my_lpp_types[obj.type.type][1] :
|
||||
val_dict[t] = obj.value[i]
|
||||
i = i + 1
|
||||
d["value"] = val_dict
|
||||
return d
|
||||
raise TypeError(repr(obj) + " is not JSON serialized")
|
||||
|
|
@ -2,10 +2,11 @@ import sys
|
|||
import logging
|
||||
import asyncio
|
||||
import json
|
||||
from cayennelpp import LppFrame, LppData, LppUtil
|
||||
from cayennelpp import LppFrame, LppData
|
||||
from typing import Any, Optional, Dict
|
||||
from .events import Event, EventType, EventDispatcher
|
||||
from .packets import PacketType
|
||||
from meshcore.lpp_json_encoder import lpp_json_encoder
|
||||
|
||||
logger = logging.getLogger("meshcore")
|
||||
|
||||
|
|
@ -408,7 +409,7 @@ class MessageReader:
|
|||
data.append(lppdata)
|
||||
i = i + len(lppdata)
|
||||
|
||||
lpp = json.loads(json.dumps(LppFrame(data), default=LppUtil.json_encode_type_str))
|
||||
lpp = json.loads(json.dumps(LppFrame(data), default=lpp_json_encoder))
|
||||
|
||||
res["lpp"] = lpp
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue