--- a/project/sparkplug™_mqtt_edge_b9741afd/function_blocks_d9bd2ff1/fb_device_309d3c13/fb_device_98658e3f/ondcmdmessage_ad92ffe1/ad92ffe15e424ca183019a5de5ce07bd.object
+++ b/project/sparkplug™_mqtt_edge_b9741afd/function_blocks_d9bd2ff1/fb_device_309d3c13/fb_device_98658e3f/ondcmdmessage_ad92ffe1/ad92ffe15e424ca183019a5de5ce07bd.object
@@ -1 +1 @@
-{"payload":{"meta":{"Graph":{"@Type":"81297157","@Value":{"Guid":"(Guid)ad92ffe1-5e42-4ca1-8301-9a5de5ce07bd","ParentGuid":"(Guid)98658e3f-2022-4201-ad82-e23b1cb5aaf1","Name":"(string)onDCMDMessage","Properties":{"@Type":"2c41fa04:IDictionary","@Value":[{"@Key":"(Guid)24568a24-c491-472c-a21f-ee5d33859fab","@Value":{"@Type":"24568a24","@Value":{"MemoryReserveForOnlineChange":"(int)0","ExcludeFromBuild":"(bool)False","External":"(bool)False","EnableSystemCall":"(bool)False","CompilerDefines":"(string)","LinkAlways":"(bool)False","Undefines":{"@Type":"[string]","@Value":[]}}}}]},"TypeGuid":"(Guid)f8a58466-d7f6-439f-bbb8-d4600e41d099","EmbeddedTypeGuids":{"@Type":"[Guid]","@Value":["(Guid)a9ed5b7e-75c5-4651-af16-d2c27e98cb94","(Guid)3b83b776-fb25-43b8-99f2-3c507c9143fc"]}}},"TypeInfos":{"24568a24":"{24568a24-c491-472c-a21f-ee5d33859fab}","2c41fa04":"{2c41fa04-1834-41c1-816e-303c7aa2c05b}","81297157":"{81297157-7ec9-45ce-845e-84cab2b88ade}","bool":"System.Boolean","Guid":"System.Guid","int":"System.Int32","string":"System.String"}},"object":{"Graph":{"@Type":"f8a58466","@Value":{"Implementation":{"@Type":"3b83b776","@Value":{"TextDocument":{"@Type":"f3878285","@Value":{"TextLines":{"@Type":"[a5de0b0b]","@Value":[{"@Type":"a5de0b0b","@Value":{"Id":"(long)2197","Tag":null,"Text":"(string)//note: pMessage is already decoded"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2198","Tag":null,"Text":"(string)onDCMDMessage := FALSE;"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2199","Tag":null,"Text":"(string)//get first message"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2200","Tag":null,"Text":"(string)pMessage.GetFirstMetric(name => newName,"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2201","Tag":null,"Text":"(string)    datatype => newdatatype,"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2202","Tag":null,"Text":"(string)    timestamp => newtimestamp,"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2203","Tag":null,"Text":"(string)    valueString => newString,"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2204","Tag":null,"Text":"(string)    valueLreal => newLreal,"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2205","Tag":null,"Text":"(string)    valueReal => newreal,"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2206","Tag":null,"Text":"(string)    valueVarInt => newVarInt,"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2207","Tag":null,"Text":"(string)    MetricValid => newMetricValid,"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2208","Tag":null,"Text":"(string)    HasNext => newHasNext);"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2209","Tag":null,"Text":"(string)"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2210","Tag":null,"Text":"(string)THIS^.GetMetricbyName(MetricName := newName,"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2211","Tag":null,"Text":"(string)    Metric => itfExistingMetric,"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2212","Tag":null,"Text":"(string)    GetTimestamp =>,"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2213","Tag":null,"Text":"(string)    xError => MetricNotExisting,"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2214","Tag":null,"Text":"(string)    eError =>);"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2215","Tag":null,"Text":"(string)"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2216","Tag":null,"Text":"(string)IF NOT newMetricValid THEN"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2217","Tag":null,"Text":"(string)    ; // There are no metrics, so we needn't do anything"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2218","Tag":null,"Text":"(string)ELSIF MetricNotExisting THEN"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2219","Tag":null,"Text":"(string)    WriteEdgeLog("}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2220","Tag":null,"Text":"(string)        CmpLog.LogClass.LOG_WARNING,"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2221","Tag":null,"Text":"(string)        'Someone sent a DCMD with metric %s not in our DBIRTH. It was ignored',"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2222","Tag":null,"Text":"(string)        TO_STRING(newName));"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2223","Tag":null,"Text":"(string)ELSE"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2224","Tag":null,"Text":"(string)    // update one as it allready excists"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2225","Tag":null,"Text":"(string)    SPStack.Update(Metric := itfExistingMetric,"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2226","Tag":null,"Text":"(string)        Name := newName,"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2227","Tag":null,"Text":"(string)        DataType := newdatatype,"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2228","Tag":null,"Text":"(string)        Status := SPStack.MetricStatus.ONLINE_OK,"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2229","Tag":null,"Text":"(string)        Timestamp := newtimestamp,"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2230","Tag":null,"Text":"(string)        String_ := newString,"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2231","Tag":null,"Text":"(string)        LReal_ := newLreal,"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2232","Tag":null,"Text":"(string)        Real_ := newreal,"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2233","Tag":null,"Text":"(string)        VarInt := newVarInt);"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2234","Tag":null,"Text":"(string)END_IF"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2235","Tag":null,"Text":"(string)"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2236","Tag":null,"Text":"(string)WHILE newHasNext DO"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2237","Tag":null,"Text":"(string)    pMessage.GetNextMetric(name => newName,"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2238","Tag":null,"Text":"(string)        datatype => newdatatype,"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2239","Tag":null,"Text":"(string)        timestamp => newtimestamp,"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2240","Tag":null,"Text":"(string)        valueString => newString,"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2241","Tag":null,"Text":"(string)        valueLreal => newLreal,"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2242","Tag":null,"Text":"(string)        valueReal => newreal,"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2243","Tag":null,"Text":"(string)        valueVarInt => newVarInt,"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2244","Tag":null,"Text":"(string)        MetricValid => newMetricValid,"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2245","Tag":null,"Text":"(string)        HasNext => newHasNext);"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2246","Tag":null,"Text":"(string)"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2247","Tag":null,"Text":"(string)    THIS^.GetMetricbyName(MetricName := newName,"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2248","Tag":null,"Text":"(string)        Metric => itfExistingMetric,"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2249","Tag":null,"Text":"(string)        GetTimestamp =>,"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2250","Tag":null,"Text":"(string)        xError => MetricNotExisting,"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2251","Tag":null,"Text":"(string)        eError =>);"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2252","Tag":null,"Text":"(string)"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2253","Tag":null,"Text":"(string)    IF MetricNotExisting THEN"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2254","Tag":null,"Text":"(string)        WriteEdgeLog("}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2255","Tag":null,"Text":"(string)            CmpLog.LogClass.LOG_WARNING,"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2256","Tag":null,"Text":"(string)            'Someone sent a DCMD with metric %s not in our DBIRTH. It was ignored',"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2257","Tag":null,"Text":"(string)            TO_STRING(newName));"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2258","Tag":null,"Text":"(string)    ELSE"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2259","Tag":null,"Text":"(string)        //update one"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2260","Tag":null,"Text":"(string)        SPStack.Update(Metric := itfExistingMetric,"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2261","Tag":null,"Text":"(string)            Name := newName,"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2262","Tag":null,"Text":"(string)            DataType := newdatatype,"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2263","Tag":null,"Text":"(string)            Status := SPStack.MetricStatus.ONLINE_OK,"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2264","Tag":null,"Text":"(string)            Timestamp := newtimestamp,"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2265","Tag":null,"Text":"(string)            String_ := newString,"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2266","Tag":null,"Text":"(string)            LReal_ := newLreal,"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2267","Tag":null,"Text":"(string)            Real_ := newreal,"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2268","Tag":null,"Text":"(string)            VarInt := newVarInt);"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2269","Tag":null,"Text":"(string)"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2270","Tag":null,"Text":"(string)    END_IF"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2271","Tag":null,"Text":"(string)END_WHILE"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2272","Tag":null,"Text":"(string)"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2273","Tag":null,"Text":"(string)WriteEdgeLog("}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2274","Tag":null,"Text":"(string)    CmpLog.LogClass.LOG_DEBUG,"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2275","Tag":null,"Text":"(string)    'EoN DCMD Received Topic: %s',"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2276","Tag":null,"Text":"(string)    WSTRING_TO_STRING(pTopic^));"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2277","Tag":null,"Text":"(string)"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)1781","Tag":null,"Text":"(string)onDCMDMessage := TRUE;"}}]}}}}},"Interface":{"@Type":"a9ed5b7e","@Value":{"TextDocument":{"@Type":"f3878285","@Value":{"TextLines":{"@Type":"[a5de0b0b]","@Value":[{"@Type":"a5de0b0b","@Value":{"Id":"(long)2138","Tag":null,"Text":"(string)///"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2139","Tag":null,"Text":"(string)///  Device Command (DCMD)"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2140","Tag":null,"Text":"(string)///  "}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2141","Tag":null,"Text":"(string)///  DCMD messages are used by backend applications to write to device outputs and send Device Control commands"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2142","Tag":null,"Text":"(string)///  to devices. Multiple metrics can be supplied in a single DCMD message."}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2143","Tag":null,"Text":"(string)///  The following is a representation of a simple DCMD message on the topic:"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2144","Tag":null,"Text":"(string)///  "}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2145","Tag":null,"Text":"(string)///      spBv1.0/Sparkplug™ B Devices/DCMD/Raspberry Pi/Pibrella"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2146","Tag":null,"Text":"(string)///  "}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2147","Tag":null,"Text":"(string)///      •   The ‘Group ID’ of this device is: Sparkplug™ B Devices"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2148","Tag":null,"Text":"(string)///      •   The host ‘EoN node ID’ of this device is: Raspberry Pi"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2149","Tag":null,"Text":"(string)///      •   The ‘Device ID’ is: Pibrella"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2150","Tag":null,"Text":"(string)///      •   This is an DCMD message from the device"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2151","Tag":null,"Text":"(string)///"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2152","Tag":null,"Text":"(string)///  Consider the following Sparkplug™ B payload in the DCMD message shown above:"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2153","Tag":null,"Text":"(string)///  {"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2154","Tag":null,"Text":"(string)///      \"timestamp\": 1486144502122,"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2155","Tag":null,"Text":"(string)///      \"metrics\": [{"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2156","Tag":null,"Text":"(string)///              \"name\": \"Outputs/LEDs/Green\","}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2157","Tag":null,"Text":"(string)///              \"timestamp\": 1486144502122,"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2158","Tag":null,"Text":"(string)///              \"dataType\": \"Boolean\","}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2159","Tag":null,"Text":"(string)///              \"value\": true"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2160","Tag":null,"Text":"(string)///      }, {"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2161","Tag":null,"Text":"(string)///              \"name\": \"Outputs/LEDs/Yellow\","}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2162","Tag":null,"Text":"(string)///              \"timestamp\": 1486144502122,"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2163","Tag":null,"Text":"(string)///              \"dataType\": \"Boolean\","}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2164","Tag":null,"Text":"(string)///              \"value\": true"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2165","Tag":null,"Text":"(string)///      }]"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2166","Tag":null,"Text":"(string)///  }"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2167","Tag":null,"Text":"(string)///  "}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2168","Tag":null,"Text":"(string)///  The DCMD payload tells the EoN node to write true to the attached device’s green and yellow LEDs. As a result,"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2169","Tag":null,"Text":"(string)///  the LEDs should turn on and result in a DDATA message back to the MQTT Server after the LEDs are successfully"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2170","Tag":null,"Text":"(string)///  turned on."}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2171","Tag":null,"Text":"(string)///  "}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2172","Tag":null,"Text":"(string){attribute 'hide'}"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2173","Tag":null,"Text":"(string)METHOD onDCMDMessage : BOOL"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2174","Tag":null,"Text":"(string)VAR_INPUT"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2175","Tag":null,"Text":"(string)    pTopic : POINTER TO WSTRING(SPStack.GC_sparkplug.supported_string_lengths); // resembles the topic under which the message is posted "}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2176","Tag":null,"Text":"(string)END_VAR"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2177","Tag":null,"Text":"(string)VAR_IN_OUT"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2178","Tag":null,"Text":"(string)    pMessage : SPStack.FB_PayloadSimpleDecoder; //should already be decoded"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2179","Tag":null,"Text":"(string)END_VAR"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2180","Tag":null,"Text":"(string)VAR_OUTPUT"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2181","Tag":null,"Text":"(string)    xError : BOOL;"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2182","Tag":null,"Text":"(string)    eError : SPStack.ERROR;"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2183","Tag":null,"Text":"(string)END_VAR"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2184","Tag":null,"Text":"(string)VAR"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2185","Tag":null,"Text":"(string)    newName : WSTRING(SPStack.GC_sparkplug.supported_string_lengths);"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2186","Tag":null,"Text":"(string)    newMetricValid : BOOL;"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2187","Tag":null,"Text":"(string)    newVarInt : SPStack.DecodedVarInt;"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2188","Tag":null,"Text":"(string)    newString : WSTRING;"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2189","Tag":null,"Text":"(string)    newLreal : LREAL;"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2190","Tag":null,"Text":"(string)    newreal : REAL;"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2191","Tag":null,"Text":"(string)    newHasNext : BOOL;"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2192","Tag":null,"Text":"(string)    newdatatype : SPStack.MetricDataType;"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2193","Tag":null,"Text":"(string)    newtimestamp : SPStack.T_DateTime;"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2194","Tag":null,"Text":"(string)    i : DINT;"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2195","Tag":null,"Text":"(string)    itfExistingMetric : SPStack.IMetric;"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2196","Tag":null,"Text":"(string)    MetricNotExisting : BOOL;"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)1","Tag":null,"Text":"(string)END_VAR"}}]}}}}}}},"TypeInfos":{"3b83b776":"{3b83b776-fb25-43b8-99f2-3c507c9143fc}","a5de0b0b":"{a5de0b0b-1cb5-4913-ac21-9d70293ec00d}","a9ed5b7e":"{a9ed5b7e-75c5-4651-af16-d2c27e98cb94}","f3878285":"{f3878285-8e4f-490b-bb1b-9acbb7eb04db}","f8a58466":"{f8a58466-d7f6-439f-bbb8-d4600e41d099}","long":"System.Int64","string":"System.String"}}},"FormatVersion":"1.0"}
\ No newline at end of file
+{"payload":{"meta":{"Graph":{"@Type":"81297157","@Value":{"Guid":"(Guid)ad92ffe1-5e42-4ca1-8301-9a5de5ce07bd","ParentGuid":"(Guid)98658e3f-2022-4201-ad82-e23b1cb5aaf1","Name":"(string)onDCMDMessage","Properties":{"@Type":"2c41fa04:IDictionary","@Value":[{"@Key":"(Guid)24568a24-c491-472c-a21f-ee5d33859fab","@Value":{"@Type":"24568a24","@Value":{"MemoryReserveForOnlineChange":"(int)0","ExcludeFromBuild":"(bool)False","External":"(bool)False","EnableSystemCall":"(bool)False","CompilerDefines":"(string)","LinkAlways":"(bool)False","Undefines":{"@Type":"[string]","@Value":[]}}}}]},"TypeGuid":"(Guid)f8a58466-d7f6-439f-bbb8-d4600e41d099","EmbeddedTypeGuids":{"@Type":"[Guid]","@Value":["(Guid)a9ed5b7e-75c5-4651-af16-d2c27e98cb94","(Guid)3b83b776-fb25-43b8-99f2-3c507c9143fc"]}}},"TypeInfos":{"24568a24":"{24568a24-c491-472c-a21f-ee5d33859fab}","2c41fa04":"{2c41fa04-1834-41c1-816e-303c7aa2c05b}","81297157":"{81297157-7ec9-45ce-845e-84cab2b88ade}","bool":"System.Boolean","Guid":"System.Guid","int":"System.Int32","string":"System.String"}},"object":{"Graph":{"@Type":"f8a58466","@Value":{"Implementation":{"@Type":"3b83b776","@Value":{"TextDocument":{"@Type":"f3878285","@Value":{"TextLines":{"@Type":"[a5de0b0b]","@Value":[{"@Type":"a5de0b0b","@Value":{"Id":"(long)2197","Tag":null,"Text":"(string)//note: pMessage is already decoded"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2198","Tag":null,"Text":"(string)onDCMDMessage := FALSE;"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2199","Tag":null,"Text":"(string)//get first message"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2200","Tag":null,"Text":"(string)pMessage.GetFirstMetric(name => newName,"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2201","Tag":null,"Text":"(string)    datatype => newdatatype,"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2202","Tag":null,"Text":"(string)    timestamp => newtimestamp,"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2203","Tag":null,"Text":"(string)    valueString => newString,"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2204","Tag":null,"Text":"(string)    valueLreal => newLreal,"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2205","Tag":null,"Text":"(string)    valueReal => newreal,"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2206","Tag":null,"Text":"(string)    valueVarInt => newVarInt,"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2207","Tag":null,"Text":"(string)    MetricValid => newMetricValid,"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2208","Tag":null,"Text":"(string)    HasNext => newHasNext);"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2209","Tag":null,"Text":"(string)"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2210","Tag":null,"Text":"(string)THIS^.GetMetricbyName(MetricName := newName,"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2211","Tag":null,"Text":"(string)    Metric => itfExistingMetric,"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2212","Tag":null,"Text":"(string)    GetTimestamp =>,"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2213","Tag":null,"Text":"(string)    xError => MetricNotExisting,"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2214","Tag":null,"Text":"(string)    eError =>);"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2215","Tag":null,"Text":"(string)"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2216","Tag":null,"Text":"(string)IF NOT newMetricValid THEN"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2217","Tag":null,"Text":"(string)    ; // There are no metrics, so we needn't do anything"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2218","Tag":null,"Text":"(string)ELSIF MetricNotExisting THEN"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2219","Tag":null,"Text":"(string)    WriteEdgeLog("}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2220","Tag":null,"Text":"(string)        CmpLog.LogClass.LOG_WARNING,"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2221","Tag":null,"Text":"(string)        'Someone sent a DCMD with metric %s not in our DBIRTH. It was ignored',"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2222","Tag":null,"Text":"(string)        TO_STRING(newName));"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2279","Tag":null,"Text":"(string)ELSIF itfExistingMetric.Access = SPStack.AccessMode.ReadOnly THEN"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2278","Tag":null,"Text":"(string)\titfExistingMetric.Notify := TRUE; // It Is readonly, so ignore it.  We notify anyway (with the old value, so the host knows it didn't work)"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2223","Tag":null,"Text":"(string)ELSE"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2224","Tag":null,"Text":"(string)    // update one as it allready excists"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2225","Tag":null,"Text":"(string)    SPStack.Update(Metric := itfExistingMetric,"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2226","Tag":null,"Text":"(string)        Name := newName,"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2227","Tag":null,"Text":"(string)        DataType := newdatatype,"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2228","Tag":null,"Text":"(string)        Status := SPStack.MetricStatus.ONLINE_OK,"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2229","Tag":null,"Text":"(string)        Timestamp := newtimestamp,"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2230","Tag":null,"Text":"(string)        String_ := newString,"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2231","Tag":null,"Text":"(string)        LReal_ := newLreal,"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2232","Tag":null,"Text":"(string)        Real_ := newreal,"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2233","Tag":null,"Text":"(string)        VarInt := newVarInt);"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2234","Tag":null,"Text":"(string)END_IF"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2235","Tag":null,"Text":"(string)"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2236","Tag":null,"Text":"(string)WHILE newHasNext DO"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2237","Tag":null,"Text":"(string)    pMessage.GetNextMetric(name => newName,"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2238","Tag":null,"Text":"(string)        datatype => newdatatype,"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2239","Tag":null,"Text":"(string)        timestamp => newtimestamp,"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2240","Tag":null,"Text":"(string)        valueString => newString,"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2241","Tag":null,"Text":"(string)        valueLreal => newLreal,"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2242","Tag":null,"Text":"(string)        valueReal => newreal,"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2243","Tag":null,"Text":"(string)        valueVarInt => newVarInt,"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2244","Tag":null,"Text":"(string)        MetricValid => newMetricValid,"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2245","Tag":null,"Text":"(string)        HasNext => newHasNext);"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2246","Tag":null,"Text":"(string)"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2247","Tag":null,"Text":"(string)    THIS^.GetMetricbyName(MetricName := newName,"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2248","Tag":null,"Text":"(string)        Metric => itfExistingMetric,"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2249","Tag":null,"Text":"(string)        GetTimestamp =>,"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2250","Tag":null,"Text":"(string)        xError => MetricNotExisting,"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2251","Tag":null,"Text":"(string)        eError =>);"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2252","Tag":null,"Text":"(string)"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2253","Tag":null,"Text":"(string)    IF MetricNotExisting THEN"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2254","Tag":null,"Text":"(string)        WriteEdgeLog("}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2255","Tag":null,"Text":"(string)            CmpLog.LogClass.LOG_WARNING,"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2256","Tag":null,"Text":"(string)            'Someone sent a DCMD with metric %s not in our DBIRTH. It was ignored',"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2257","Tag":null,"Text":"(string)            TO_STRING(newName));"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2280","Tag":null,"Text":"(string)\tELSIF itfExistingMetric.Access = SPStack.AccessMode.ReadOnly THEN"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2281","Tag":null,"Text":"(string)\t\titfExistingMetric.Notify := TRUE; // It Is readonly, so ignore it.  We notify anyway (with the old value, so the host knows it didn't work)"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2258","Tag":null,"Text":"(string)    ELSE"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2259","Tag":null,"Text":"(string)        //update one"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2260","Tag":null,"Text":"(string)        SPStack.Update(Metric := itfExistingMetric,"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2261","Tag":null,"Text":"(string)            Name := newName,"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2262","Tag":null,"Text":"(string)            DataType := newdatatype,"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2263","Tag":null,"Text":"(string)            Status := SPStack.MetricStatus.ONLINE_OK,"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2264","Tag":null,"Text":"(string)            Timestamp := newtimestamp,"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2265","Tag":null,"Text":"(string)            String_ := newString,"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2266","Tag":null,"Text":"(string)            LReal_ := newLreal,"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2267","Tag":null,"Text":"(string)            Real_ := newreal,"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2268","Tag":null,"Text":"(string)            VarInt := newVarInt);"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2269","Tag":null,"Text":"(string)"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2270","Tag":null,"Text":"(string)    END_IF"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2271","Tag":null,"Text":"(string)END_WHILE"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2272","Tag":null,"Text":"(string)"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2273","Tag":null,"Text":"(string)WriteEdgeLog("}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2274","Tag":null,"Text":"(string)    CmpLog.LogClass.LOG_DEBUG,"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2275","Tag":null,"Text":"(string)    'EoN DCMD Received Topic: %s',"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2276","Tag":null,"Text":"(string)    WSTRING_TO_STRING(pTopic^));"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2277","Tag":null,"Text":"(string)"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)1781","Tag":null,"Text":"(string)onDCMDMessage := TRUE;"}}]}}}}},"Interface":{"@Type":"a9ed5b7e","@Value":{"TextDocument":{"@Type":"f3878285","@Value":{"TextLines":{"@Type":"[a5de0b0b]","@Value":[{"@Type":"a5de0b0b","@Value":{"Id":"(long)2138","Tag":null,"Text":"(string)///"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2139","Tag":null,"Text":"(string)///  Device Command (DCMD)"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2140","Tag":null,"Text":"(string)///  "}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2141","Tag":null,"Text":"(string)///  DCMD messages are used by backend applications to write to device outputs and send Device Control commands"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2142","Tag":null,"Text":"(string)///  to devices. Multiple metrics can be supplied in a single DCMD message."}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2143","Tag":null,"Text":"(string)///  The following is a representation of a simple DCMD message on the topic:"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2144","Tag":null,"Text":"(string)///  "}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2145","Tag":null,"Text":"(string)///      spBv1.0/Sparkplug™ B Devices/DCMD/Raspberry Pi/Pibrella"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2146","Tag":null,"Text":"(string)///  "}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2147","Tag":null,"Text":"(string)///      •   The ‘Group ID’ of this device is: Sparkplug™ B Devices"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2148","Tag":null,"Text":"(string)///      •   The host ‘EoN node ID’ of this device is: Raspberry Pi"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2149","Tag":null,"Text":"(string)///      •   The ‘Device ID’ is: Pibrella"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2150","Tag":null,"Text":"(string)///      •   This is an DCMD message from the device"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2151","Tag":null,"Text":"(string)///"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2152","Tag":null,"Text":"(string)///  Consider the following Sparkplug™ B payload in the DCMD message shown above:"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2153","Tag":null,"Text":"(string)///  {"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2154","Tag":null,"Text":"(string)///      \"timestamp\": 1486144502122,"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2155","Tag":null,"Text":"(string)///      \"metrics\": [{"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2156","Tag":null,"Text":"(string)///              \"name\": \"Outputs/LEDs/Green\","}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2157","Tag":null,"Text":"(string)///              \"timestamp\": 1486144502122,"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2158","Tag":null,"Text":"(string)///              \"dataType\": \"Boolean\","}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2159","Tag":null,"Text":"(string)///              \"value\": true"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2160","Tag":null,"Text":"(string)///      }, {"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2161","Tag":null,"Text":"(string)///              \"name\": \"Outputs/LEDs/Yellow\","}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2162","Tag":null,"Text":"(string)///              \"timestamp\": 1486144502122,"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2163","Tag":null,"Text":"(string)///              \"dataType\": \"Boolean\","}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2164","Tag":null,"Text":"(string)///              \"value\": true"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2165","Tag":null,"Text":"(string)///      }]"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2166","Tag":null,"Text":"(string)///  }"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2167","Tag":null,"Text":"(string)///  "}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2168","Tag":null,"Text":"(string)///  The DCMD payload tells the EoN node to write true to the attached device’s green and yellow LEDs. As a result,"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2169","Tag":null,"Text":"(string)///  the LEDs should turn on and result in a DDATA message back to the MQTT Server after the LEDs are successfully"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2170","Tag":null,"Text":"(string)///  turned on."}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2171","Tag":null,"Text":"(string)///  "}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2172","Tag":null,"Text":"(string){attribute 'hide'}"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2173","Tag":null,"Text":"(string)METHOD onDCMDMessage : BOOL"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2174","Tag":null,"Text":"(string)VAR_INPUT"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2175","Tag":null,"Text":"(string)    pTopic : POINTER TO WSTRING(SPStack.GC_sparkplug.supported_string_lengths); // resembles the topic under which the message is posted "}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2176","Tag":null,"Text":"(string)END_VAR"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2177","Tag":null,"Text":"(string)VAR_IN_OUT"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2178","Tag":null,"Text":"(string)    pMessage : SPStack.FB_PayloadSimpleDecoder; //should already be decoded"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2179","Tag":null,"Text":"(string)END_VAR"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2180","Tag":null,"Text":"(string)VAR_OUTPUT"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2181","Tag":null,"Text":"(string)    xError : BOOL;"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2182","Tag":null,"Text":"(string)    eError : SPStack.ERROR;"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2183","Tag":null,"Text":"(string)END_VAR"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2184","Tag":null,"Text":"(string)VAR"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2185","Tag":null,"Text":"(string)    newName : WSTRING(SPStack.GC_sparkplug.supported_string_lengths);"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2186","Tag":null,"Text":"(string)    newMetricValid : BOOL;"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2187","Tag":null,"Text":"(string)    newVarInt : SPStack.DecodedVarInt;"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2188","Tag":null,"Text":"(string)    newString : WSTRING;"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2189","Tag":null,"Text":"(string)    newLreal : LREAL;"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2190","Tag":null,"Text":"(string)    newreal : REAL;"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2191","Tag":null,"Text":"(string)    newHasNext : BOOL;"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2192","Tag":null,"Text":"(string)    newdatatype : SPStack.MetricDataType;"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2193","Tag":null,"Text":"(string)    newtimestamp : SPStack.T_DateTime;"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2194","Tag":null,"Text":"(string)    i : DINT;"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2195","Tag":null,"Text":"(string)    itfExistingMetric : SPStack.IMetric;"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2196","Tag":null,"Text":"(string)    MetricNotExisting : BOOL;"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)1","Tag":null,"Text":"(string)END_VAR"}}]}}}}}}},"TypeInfos":{"3b83b776":"{3b83b776-fb25-43b8-99f2-3c507c9143fc}","a5de0b0b":"{a5de0b0b-1cb5-4913-ac21-9d70293ec00d}","a9ed5b7e":"{a9ed5b7e-75c5-4651-af16-d2c27e98cb94}","f3878285":"{f3878285-8e4f-490b-bb1b-9acbb7eb04db}","f8a58466":"{f8a58466-d7f6-439f-bbb8-d4600e41d099}","long":"System.Int64","string":"System.String"}}},"FormatVersion":"1.0"}
\ No newline at end of file