1 | {"payload":{"meta":{"Graph":{"@Type":"81297157","@Value":{"Guid":"(Guid)9198f371-4685-4cb8-99a5-246fe9448ec5","ParentGuid":"(Guid)af25efb2-e7d3-4d17-9b46-1d6d5c77fe77","Name":"(string)onNCMDMessage","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":[]}}}},{"@Key":"(Guid)829a18f2-c514-4f6e-9634-1df173429203","@Value":{"@Type":"829a18f2","@Value":{"ParentObjects":{"@Type":"fa2ee218:IDictionary","@Value":[{"@Key":"(Guid)21af5390-2942-461a-bf89-951aaf6999f1","@Value":"(Guid)87b989a7-0eaa-44c4-9c4b-7f911ce5296c"}]}}}}]},"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}","829a18f2":"{829a18f2-c514-4f6e-9634-1df173429203}","bool":"System.Boolean","fa2ee218":"{fa2ee218-a39b-4b6d-b249-49dbddbd168a}","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)2471","Tag":null,"Text":"(string)//note: pMessage is already decoded"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2472","Tag":null,"Text":"(string)onNCMDMessage := FALSE;"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2647","Tag":null,"Text":"(string)"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2649","Tag":null,"Text":"(string)// //get first metric"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2841","Tag":null,"Text":"(string)PayloadMetric REF= pMessage.GetMetricFirst(ObjectValid => PayloadMetricIsValid, HasNext => HasNext);"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2757","Tag":null,"Text":"(string)WHILE PayloadMetricIsValid DO"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2848","Tag":null,"Text":"(string)\tPayloadMetric.ReadAlias(HasAlias=>hasNewAlias, Alias=> newAlias);"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2849","Tag":null,"Text":"(string)\tPayloadMetric.ReadName (HasName=> , Name=> newName);"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2844","Tag":null,"Text":"(string)\tGetMetric(hasAlias := hasNewAlias AND THIS^.UseAlias,"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2845","Tag":null,"Text":"(string) Name := newName,"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2846","Tag":null,"Text":"(string) Alias := newAlias,"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2847","Tag":null,"Text":"(string) itfMetric => itfExistingMetric,"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2842","Tag":null,"Text":"(string) xError => MetricNotExisting);"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2823","Tag":null,"Text":"(string)\tIF MetricNotExisting THEN"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2824","Tag":null,"Text":"(string)\t\tWriteEdgeLog("}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2825","Tag":null,"Text":"(string)\t\t\tCmpLog.LogClass.LOG_WARNING,"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2826","Tag":null,"Text":"(string)\t\t\t'Someone sent an NCMD with metric %s not in our NBIRTH. It was ignored',"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2827","Tag":null,"Text":"(string)\t\t\tTO_STRING(newName));"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2828","Tag":null,"Text":"(string)\tELSIF itfExistingMetric.Access = SPStack.AccessMode.ReadOnly THEN"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2829","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)2830","Tag":null,"Text":"(string)\tELSE"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2694","Tag":null,"Text":"(string)\t\t// update one as it already excists"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2852","Tag":null,"Text":"(string)\t\titfExistingMetric.UpdateThisMetricFromPayload(Notify := TRUE, PayloadMetric := PayloadMetric);"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2831","Tag":null,"Text":"(string)\tEND_IF;"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2853","Tag":null,"Text":"(string)\tPayloadMetric REF= pMessage.GetMetricNext(ObjectValid => PayloadMetricIsValid, HasNext => HasNext);"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2797","Tag":null,"Text":"(string)END_WHILE"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2798","Tag":null,"Text":"(string) "}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2549","Tag":null,"Text":"(string)WriteEdgeLog( CmpLog.LogClass.LOG_DEBUG,"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2551","Tag":null,"Text":"(string) 'EoN NCMD Received Topic: %s',"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2552","Tag":null,"Text":"(string) WSTRING_TO_STRING(pTopic^) );"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2553","Tag":null,"Text":"(string)"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2196","Tag":null,"Text":"(string)onNCMDMessage := TRUE;"}}]}}}}},"Interface":{"@Type":"a9ed5b7e","@Value":{"TextDocument":{"@Type":"f3878285","@Value":{"TextLines":{"@Type":"[a5de0b0b]","@Value":[{"@Type":"a5de0b0b","@Value":{"Id":"(long)2415","Tag":null,"Text":"(string)(*"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2416","Tag":null,"Text":"(string)\tAt the moment, this only supports the one specific metric, Node Control/Rebirth"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2417","Tag":null,"Text":"(string) Node Command (NCMD)"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2418","Tag":null,"Text":"(string) "}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2419","Tag":null,"Text":"(string) NCMD messages are used by backend applications to write to EoN node outputs and send Node Control"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2420","Tag":null,"Text":"(string) commands to EoN nodes. Multiple metrics can be supplied in a single NCMD message."}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2421","Tag":null,"Text":"(string) The following is a representation of a simple NCMD message on the topic:"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2422","Tag":null,"Text":"(string)"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2423","Tag":null,"Text":"(string) spBv1.0/Sparkplug™ B Devices/NCMD/Raspberry Pi"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2424","Tag":null,"Text":"(string)"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2425","Tag":null,"Text":"(string) • The ‘Group ID’ of this device is: Sparkplug™ B Devices"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2426","Tag":null,"Text":"(string) • The host ‘EoN node ID’ of this EoN node is: Raspberry Pi"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2427","Tag":null,"Text":"(string) • This is an NCMD message to an EoN node"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2428","Tag":null,"Text":"(string)"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2429","Tag":null,"Text":"(string) Consider the following Sparkplug™ B payload in the NCMD message shown above:"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2430","Tag":null,"Text":"(string) "}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2431","Tag":null,"Text":"(string) {"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2432","Tag":null,"Text":"(string) \"timestamp\": 1486144502122,"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2433","Tag":null,"Text":"(string) \"metrics\": [{"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2434","Tag":null,"Text":"(string) \"name\": \"Node Control/Rebirth\","}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2435","Tag":null,"Text":"(string) \"timestamp\": 1486144502122,"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2436","Tag":null,"Text":"(string) \"dataType\": \"Boolean\","}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2437","Tag":null,"Text":"(string) \"value\": true"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2438","Tag":null,"Text":"(string) }]"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2439","Tag":null,"Text":"(string) }"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2440","Tag":null,"Text":"(string) "}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2441","Tag":null,"Text":"(string) This NCMD payload tells the EoN node to republish its NBIRTH and DBIRTH(s) messages. This can be requested if"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2442","Tag":null,"Text":"(string) a backend application gets an out of order seq number or if a metric arrives in an NDATA or DDATA message that"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2443","Tag":null,"Text":"(string) was not provided in the original NBIRTH or DBIRTH messages."}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2444","Tag":null,"Text":"(string)"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2445","Tag":null,"Text":"(string)*)"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2446","Tag":null,"Text":"(string){attribute 'hide'}"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2447","Tag":null,"Text":"(string)METHOD onNCMDMessage : BOOL"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2448","Tag":null,"Text":"(string)VAR_INPUT"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2449","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)2450","Tag":null,"Text":"(string)END_VAR"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2451","Tag":null,"Text":"(string)VAR_IN_OUT"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2452","Tag":null,"Text":"(string) pMessage : SPStack.FB_Payload; //should already be decoded"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2453","Tag":null,"Text":"(string)END_VAR"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2454","Tag":null,"Text":"(string)VAR_OUTPUT"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2455","Tag":null,"Text":"(string) xError : BOOL;"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2456","Tag":null,"Text":"(string) eError : SPStack.ERROR;"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2457","Tag":null,"Text":"(string)END_VAR"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2458","Tag":null,"Text":"(string)VAR"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2464","Tag":null,"Text":"(string) newName : WSTRING(SPStack.GC_sparkplug.supported_string_lengths);"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2765","Tag":null,"Text":"(string) newAlias : ULINT;"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2468","Tag":null,"Text":"(string) hasNewAlias : BOOL;"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2469","Tag":null,"Text":"(string) itfExistingMetric : SPStack.IMetric;"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2470","Tag":null,"Text":"(string) MetricNotExisting : BOOL;"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2837","Tag":null,"Text":"(string)\t"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2838","Tag":null,"Text":"(string)\tPayloadMetric : REFERENCE TO SPStack.FB_PayloadMetric;"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2850","Tag":null,"Text":"(string)\tPayloadMetricIsValid : BOOL;"}},{"@Type":"a5de0b0b","@Value":{"Id":"(long)2851","Tag":null,"Text":"(string)\tHasNext : 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"} |