sunspec 0.9.0

SunSpec 1.1 compliant library with tokio support
Documentation
{
    "group": {
        "desc": "Pricing Signal  ",
        "label": "Pricing",
        "name": "pricing",
        "points": [
            {
                "desc": "Model identifier",
                "label": "Model ID",
                "mandatory": "M",
                "name": "ID",
                "size": 1,
                "static": "S",
                "type": "uint16",
                "value": 125
            },
            {
                "desc": "Model length",
                "label": "Model Length",
                "mandatory": "M",
                "name": "L",
                "size": 1,
                "static": "S",
                "type": "uint16"
            },
            {
                "access": "RW",
                "desc": "Is price-based charge/discharge mode active?",
                "label": "ModEna",
                "mandatory": "M",
                "name": "ModEna",
                "size": 1,
                "symbols": [
                    {
                        "name": "ENABLE",
                        "value": 0
                    }
                ],
                "type": "bitfield16"
            },
            {
                "access": "RW",
                "desc": "Meaning of the pricing signal. When a Price schedule is used, type must match the schedule range variable description.",
                "label": "SigType",
                "name": "SigType",
                "size": 1,
                "symbols": [
                    {
                        "name": "UNKNOWN",
                        "value": 0
                    },
                    {
                        "name": "ABSOLUTE",
                        "value": 1
                    },
                    {
                        "name": "RELATIVE",
                        "value": 2
                    },
                    {
                        "name": "MULTIPLIER",
                        "value": 3
                    },
                    {
                        "name": "LEVEL",
                        "value": 4
                    }
                ],
                "type": "enum16"
            },
            {
                "access": "RW",
                "desc": "Utility/ESP specific pricing signal. Content depends on pricing signal type. When H/M/L type is specified. Low=0; Med=1; High=2.",
                "label": "Sig",
                "mandatory": "M",
                "name": "Sig",
                "sf": "Sig_SF",
                "size": 1,
                "type": "int16"
            },
            {
                "access": "RW",
                "desc": "Time window for charge/discharge pricing change.",
                "label": "WinTms",
                "name": "WinTms",
                "size": 1,
                "type": "uint16",
                "units": "Secs"
            },
            {
                "access": "RW",
                "desc": "Timeout period for charge/discharge pricing change.",
                "label": "RvtTms",
                "name": "RvtTms",
                "size": 1,
                "type": "uint16",
                "units": "Secs"
            },
            {
                "access": "RW",
                "desc": "Ramp time for moving from current charge or discharge level to new level.",
                "label": "RmpTms",
                "name": "RmpTms",
                "size": 1,
                "type": "uint16",
                "units": "Secs"
            },
            {
                "desc": "Pricing signal scale factor.",
                "label": "Sig_SF",
                "mandatory": "M",
                "name": "Sig_SF",
                "size": 1,
                "type": "sunssf"
            },
            {
                "name": "Pad",
                "size": 1,
                "type": "pad"
            }
        ],
        "type": "group",
        "detail": "Ref 3: 8.7.5.1; Ref 4: 6"
    },
    "id": 125
}