mirror of
https://github.com/meshcore-dev/meshcore_py.git
synced 2026-06-11 11:56:18 +00:00
quick and dirty json encoder
This commit is contained in:
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|||||||
|
|
||||||
[project]
|
[project]
|
||||||
name = "meshcore"
|
name = "meshcore"
|
||||||
version = "1.9.8.dev5"
|
version = "1.9.8.dev6"
|
||||||
authors = [
|
authors = [
|
||||||
{ name="Florent de Lamotte", email="florent@frizoncorrea.fr" },
|
{ name="Florent de Lamotte", email="florent@frizoncorrea.fr" },
|
||||||
{ name="Alex Wolden", email="awolden@gmail.com" },
|
{ 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 logging
|
||||||
import asyncio
|
import asyncio
|
||||||
import json
|
import json
|
||||||
from cayennelpp import LppFrame, LppData, LppUtil
|
from cayennelpp import LppFrame, LppData
|
||||||
from typing import Any, Optional, Dict
|
from typing import Any, Optional, Dict
|
||||||
from .events import Event, EventType, EventDispatcher
|
from .events import Event, EventType, EventDispatcher
|
||||||
from .packets import PacketType
|
from .packets import PacketType
|
||||||
|
from meshcore.lpp_json_encoder import lpp_json_encoder
|
||||||
|
|
||||||
logger = logging.getLogger("meshcore")
|
logger = logging.getLogger("meshcore")
|
||||||
|
|
||||||
@@ -408,7 +409,7 @@ class MessageReader:
|
|||||||
data.append(lppdata)
|
data.append(lppdata)
|
||||||
i = i + len(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
|
res["lpp"] = lpp
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user