Diff of /project/sparkplug™_mqtt_host_b9741afd/function_blocks_8ad6e219/fb_primaryhost_ec6863e3/fb_primaryhostmessageconsumer_0bdfb382/0bdfb382e83f44ce8b28d26c6658b28d.object [1cea3c] .. [a5a4b0]  Maximize  Restore

Switch to side-by-side view

--- a/project/sparkplug™_mqtt_host_b9741afd/function_blocks_8ad6e219/fb_primaryhost_ec6863e3/fb_primaryhostmessageconsumer_0bdfb382/0bdfb382e83f44ce8b28d26c6658b28d.object
+++ b/project/sparkplug™_mqtt_host_b9741afd/function_blocks_8ad6e219/fb_primaryhost_ec6863e3/fb_primaryhostmessageconsumer_0bdfb382/0bdfb382e83f44ce8b28d26c6658b28d.object
@@ -1 +1 @@
-{"payload":{"meta":{"Graph":{"@Type":"81297157","@Value":{"Guid":"(Guid)0bdfb382-e83f-44ce-8b28-d26c6658b28d","ParentGuid":"(Guid)00000000-0000-0000-0000-000000000000","Name":"(string)FB_PrimaryHostMessageConsumer","Properties":{"@Type":"2c41fa04:IDictionary","@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)ec6863e3-35a1-4237-b54f-4c4d98ebfb4e"}]}}}}]},"TypeGuid":"(Guid)6f9dac99-8de1-4efc-8465-68ac443b7d08","EmbeddedTypeGuids":{"@Type":"[Guid]","@Value":["(Guid)a9ed5b7e-75c5-4651-af16-d2c27e98cb94","(Guid)3b83b776-fb25-43b8-99f2-3c507c9143fc"]}}},"TypeInfos":{"2c41fa04":"{2c41fa04-1834-41c1-816e-303c7aa2c05b}","81297157":"{81297157-7ec9-45ce-845e-84cab2b88ade}","829a18f2":"{829a18f2-c514-4f6e-9634-1df173429203}","fa2ee218":"{fa2ee218-a39b-4b6d-b249-49dbddbd168a}","Guid":"System.Guid","string":"System.String"}},"object":{"Graph":{"@Type":"6f9dac99","@Value":{"SpecialFunc":{"@Type":"0db3d7bb:Enum","@Value":"None"},"Implementation":{"@Type":"3b83b776","@Value":{"TextDocument":{"@Type":"f3878285","@Value":{"TextBlobForSerialisation":"(string)_RecvMesg REF= pMQTT^.GetSubscriberMessage( MessageTopic => _RecvTopic );\n_TopicParser( pTopic := ADR( _RecvTopic ) ); //parses the topic\n\n// log the topic in debug level\nWriteHostLog( CmpLog.LogClass.LOG_DEBUG, 'Incoming message in topic: %s', TO_STRING( _RecvTopic ) ); \n\n// Insert RemoteEdgeSeqChecker here\n\n  \n       \nCASE _TopicParser.MessageType OF //SparkplugMessageTypes\n    \n    SPStack.SparkplugMessageTypes.NBIRTH: //Birth certificate for MQTT EoN nodes.\n    \n        _MyEdge REF= pPrimaryHost^.GetEdge( GroupId := _TopicParser.GroupId,\n                                             EdgeId := _TopicParser.EdgeId,\n                                             eError => _HandledError );                                           \n        CASE _HandledError OF\n            \n            SPStack.ERROR.GroupIDNotFound: // ==> DETECTED NEW GROUP!\n            \n                _MyGroupId REF= pPrimaryHost^.allocGroupId( GroupId := _TopicParser.GroupId,\n                                                             eError => eError );\n                //log new groupid\n                WriteHostLog( CmpLog.LogClass.LOG_INFO, 'Host registered new GroupID: %s', TO_STRING( _TopicParser.GroupId ) );                                                                \n\n                IF eError = SPStack.ERROR.NO_ERROR THEN\n                    _MyEdge REF= pPrimaryHost^.allocEdgetoGroupId( EdgeId := _TopicParser.EdgeId,\n                                                                    itfGroupID := _MyGroupId.itfGroupID,\n                                                                    eError => eError );\n                    // Log new remote edge\n                    WriteHostLog( CmpLog.LogClass.LOG_INFO, 'Host registered Remote Edge: %s', TO_STRING( _TopicParser.EdgeId ) );\n\n                    IF eError = SPStack.ERROR.NO_ERROR THEN\n                        _MyEdge.ProcessNBIRTH( itfPrimaryHost := pPrimaryHost^,\n                                               pMessage := _RecvMesg,\n                                               xError => xError,\n                                               eError => eError );\n                    ELSE\n                        xError := TRUE;\n                        //eError := eError;\n                    END_IF\n                ELSE\n                    xError := TRUE;\n                    //eError := eError;\n                END_IF\n                \n                \n            SPStack.ERROR.EdgeIDNotFound: // ==> DETECTED NEW EDGE!\n            \n                _MyGroupId REF= pPrimaryHost^.GetGroupID( GroupId := _TopicParser.GroupId,\n                                                          eError => eError );\n                                                          \n                //log new groupid\n                WriteHostLog( CmpLog.LogClass.LOG_INFO, 'Host registered new GroupID: %s', TO_STRING( _TopicParser.GroupId ) );                                                           \n\n                IF eError = SPStack.ERROR.NO_ERROR THEN\n                    _MyEdge REF= pPrimaryHost^.allocEdgetoGroupId( EdgeId := _TopicParser.EdgeId,\n                                                                    itfGroupID := _MyGroupId.itfGroupID,\n                                                                    eError => eError );\n                    // Log new remote edge\n                    WriteHostLog( CmpLog.LogClass.LOG_INFO, 'Host registered Remote Edge: %s', TO_STRING( _TopicParser.EdgeId ) );                                                                    \n\n                    IF eError = SPStack.ERROR.NO_ERROR THEN\n                        _MyEdge.ProcessNBIRTH( itfPrimaryHost := pPrimaryHost^,\n                                               pMessage := _RecvMesg,\n                                               xError => xError,\n                                               eError => eError );\n                    ELSE\n                        xError := TRUE;\n                        //eError := eError;\n                    END_IF\n                ELSE\n                    xError := TRUE;\n                    //eError := eError;\n                END_IF\n                \n                \n            SPStack.ERROR.NO_ERROR: // ==> UPDATE EXISTING EDGE\n            \n                _MyEdge.ProcessNBIRTH( itfPrimaryHost := pPrimaryHost^,\n                                       pMessage := _RecvMesg,\n                                       xError => xError,\n                                       eError => eError );\n        ELSE\n            ; //{info 'TODO: maybe some sort of error??'}\n        END_CASE\n        \n        \n    SPStack.SparkplugMessageTypes.NDATA: //Node data message.\n    \n        _MyEdge REF= pPrimaryHost^.GetEdge( GroupId := _TopicParser.GroupId,\n                                             EdgeId := _TopicParser.EdgeId,\n                                             eError => _HandledError );\n\n        CASE _HandledError OF\n            SPStack.ERROR.NO_ERROR: // ==> UPDATE EXISTING EDGE\n                _MyEdge.ProcessNDATA( itfPrimaryHost := pPrimaryHost^,\n                                      pMessage := _RecvMesg,\n                                      xError => xError,\n                                      eError => eError );\n                                      \n        ELSE\n            xError := TRUE;\n            eError := SPStack.Error.EdgeIDNotFound;\n            WriteHostLog( CmpLog.LogClass.LOG_WARNING,\n                            'PrimaryHost process NDATA metric error: %s',\n                            TO_STRING( _HandledError ) );\n                            \n        END_CASE\n        \n        \n    SPStack.SparkplugMessageTypes.NDEATH: //Death certificate for MQTT EoN nodes.\n    \n        _MyEdge REF= pPrimaryHost^.GetEdge( GroupId := _TopicParser.GroupId,\n                                             EdgeId := _TopicParser.EdgeId,\n                                             eError => _HandledError );\n\n        // Log remote edge death\n        WriteHostLog( CmpLog.LogClass.LOG_INFO, 'Host registered Remote Node Death: %s', TO_STRING( _TopicParser.EdgeId ) );                                   \n\n        CASE _HandledError OF\n            SPStack.ERROR.NO_ERROR: // ==> UPDATE EXISTING EDGE              \n                _MyEdge.ProcessNDEATH();\n        ELSE\n            xError := TRUE;\n            eError := SPStack.ERROR.OhMy_ThatShouldNotHaveHappened;\n            WriteHostLog( CmpLog.LogClass.LOG_ERROR,\n                            'PrimaryHost process NDEATH metric error: %s',\n                            TO_STRING( _HandledError ) );\n        END_CASE\n        \n        \n    SPStack.SparkplugMessageTypes.DBIRTH: //Birth certificate forDevices.\n    \n        //TODO: Check if edge is online (isQualityOK).  If not OK, DO NOT process the DBIRTH, instead just send a NCMD/Rebirth\n        _MyDevice REF= pPrimaryHost^.GetDevice( GroupId := _TopicParser.GroupId,\n                                                 EdgeId := _TopicParser.EdgeId,\n                                                 DeviceId := _TopicParser.DeviceId,\n                                                 eError => _HandledError );\n\n        CASE _HandledError OF\n        \n            SPStack.ERROR.GroupIDNotFound: // ==> DETECTED NEW GROUP! must rebirth the edge\n            \n                eError := SPStack.ERROR.NotImplemented;\n                xError := TRUE;\n                WriteHostLog( CmpLog.LogClass.LOG_WARNING,\n                                'DBIRTH Received with no existing groupID, but haven$'t implemented NCMD Rebirth yet %s',\n                                '' );\n                \n                \n            SPStack.ERROR.EdgeIDNotFound: // ==> DETECTED NEW EDGE! must rebirth the edge\n            \n                eError := SPStack.ERROR.NotImplemented;\n                xError := TRUE;\n                WriteHostLog( CmpLog.LogClass.LOG_WARNING,\n                                'DBIRTH Received with no existing edge, but haven$'t implemented NCMD Rebirth yet %s',\n                                '' );\n                        \n        \n            SPStack.ERROR.DeviceIDNotFound: // ==> DETECTED NEW DEVICE!\n            \n                _MyEdge REF= pPrimaryHost^.GetEdge( GroupId := _TopicParser.GroupId,\n                                                     EdgeId := _TopicParser.EdgeId,\n                                                     eError => eError );\n\n                IF eError = SPStack.ERROR.NO_ERROR THEN\n                    _MyDevice REF= pPrimaryHost^.allocDevicetoEdge( DeviceName := _TopicParser.DeviceId,\n                                                                     itfEdge := _MyEdge.itfRemoteEoN,\n                                                                     eError => eError );\n                                                                     \n                    //\n                    WriteHostLog( CmpLog.LogClass.LOG_INFO, 'Host registered new Remote Device: %s', TO_STRING( _TopicParser.DeviceId ) );                                                                         \n\n                    IF eError = SPStack.ERROR.NO_ERROR THEN\n                        _MyDevice.ProcessDBIRTH( itfPrimaryHost := pPrimaryHost^,\n                                                 NodeName := _TopicParser.EdgeId,\n                                                 GroupId := _TopicParser.GroupId,\n                                                 DeviceName := _TopicParser.DeviceId,\n                                                 pMessage := _RecvMesg,\n                                                 xError => xError,\n                                                 eError => eError );\n                                                 \n                    ELSE\n                        xError := TRUE;\n                        //eError := eError;\n                    END_IF\n                    \n                ELSE\n                    xError := TRUE;\n                    //eError := eError;\n                END_IF\n                \n                \n            SPStack.ERROR.NO_ERROR: // ==> UPDATE EXISTING DEVICE\n            \n                _MyDevice.ProcessDBIRTH( itfPrimaryHost := pPrimaryHost^,\n                                         NodeName := _TopicParser.EdgeId,\n                                         GroupId := _TopicParser.GroupId,\n                                         DeviceName := _TopicParser.DeviceId,\n                                         pMessage := _RecvMesg,\n                                         xError => xError,\n                                         eError => eError );\n                                         \n        ELSE\n            ; //{info 'TODO: maybe some sort of error??'}\n        END_CASE\n        \n        \n    SPStack.SparkplugMessageTypes.DDEATH: //Death certificate for Devices.\n    \n        _MyDevice REF= pPrimaryHost^.GetDevice( GroupId := _TopicParser.GroupId,\n                                                 EdgeId := _TopicParser.EdgeId,\n                                                 DeviceId := _TopicParser.DeviceId,\n                                                 eError => _HandledError );\n                                                 \n        // Log remote edge death\n        WriteHostLog( CmpLog.LogClass.LOG_INFO, 'Host registered Remote Edge Death: %s', TO_STRING( _TopicParser.DeviceId ) );                                                     \n\n        CASE _HandledError OF\n            SPStack.ERROR.NO_ERROR: // ==> UPDATE EXISTING EDGE              \n                _MyDevice.ProcessDDEATH();\n        ELSE\n            xError := TRUE;\n            eError := SPStack.ERROR.OhMy_ThatShouldNotHaveHappened;\n            WriteHostLog( CmpLog.LogClass.LOG_ERROR,\n                            'PrimaryHost process DDEATH metric error: %s',\n                            TO_STRING( _HandledError ) );\n        END_CASE\n        \n        \n    SPStack.SparkplugMessageTypes.DDATA: // Device data message. \n    \n        _MyDevice REF= pPrimaryHost^.GetDevice( GroupId := _TopicParser.GroupId,\n                                                 EdgeId := _TopicParser.EdgeId,\n                                                 DeviceId := _TopicParser.DeviceId,\n                                                 eError => _HandledError );\n\n        CASE _HandledError OF\n            SPStack.ERROR.NO_ERROR: // ==> UPDATE EXISTING EDGE\n                _MyDevice.ProcessDDATA( itfPrimaryHost := pPrimaryHost^,\n                                        pMessage := _RecvMesg,\n                                        xError => xError,\n                                        eError => eError );                \n        ELSE\n            xError := TRUE;\n            eError := SPStack.Error.DeviceIDNotFound;\n            WriteHostLog( CmpLog.LogClass.LOG_ERROR,\n                            'PrimaryHost process DDATA metric error: %s',\n                            TO_STRING( _HandledError ) );\n        END_CASE\n        \n        \n    SPStack.SparkplugMessageTypes.NCMD, //Node command message.\n    \n        SPStack.SparkplugMessageTypes.DCMD, //Device command message.\n        SPStack.SparkplugMessageTypes.STATE: //Critical application state message\n        ; //do nothing, ignore these\n        \nELSE\n    ; //{info 'TODO: maybe some sort of error??'}\nEND_CASE","LineInfoPersistence":"(string)0bdfb382-e83f-44ce-8b28-d26c6658b28d_Impl_LineIds"}}}},"Interface":{"@Type":"a9ed5b7e","@Value":{"TextDocument":{"@Type":"f3878285","@Value":{"TextBlobForSerialisation":"(string)FUNCTION_BLOCK FB_PrimaryHostMessageConsumer\nVAR_INPUT\n    pPrimaryHost : POINTER TO FB_PrimaryHost;\n    pMQTT : POINTER TO FB_PrimaryHostMQTT;\nEND_VAR\nVAR_OUTPUT\n    xError : BOOL;\n    eError : SPStack.ERROR;\nEND_VAR\nVAR\n    //_itfPrimaryHost : IPrimaryHost;\n    \n    _MQTT_eError : MQTT.MQTT_ERROR;\n    _RecvMesg : REFERENCE TO SPStack.FB_Payload;\n    _RecvTopic : WSTRING( SPStack.GC_Sparkplug.supported_string_lengths );\n    _HandledError : SPStack.ERROR; // an error that will be given back by a function, but we can handle the error. \n    _MyGroupId : REFERENCE TO FB_GroupId;\n    _MyEdge : REFERENCE TO FB_RemoteEdge;\n    _MyDevice : REFERENCE TO FB_RemoteDevice;\n    _TopicParser : FB_TopicParser;\nEND_VAR","LineInfoPersistence":"(string)0bdfb382-e83f-44ce-8b28-d26c6658b28d_Decl_LineIds"}}}},"UniqueIdGenerator":"(string)926","POULevel":{"@Type":"8e575c5b:Enum","@Value":"Standard"},"ChildObjectGuids":{"@Type":"ArrayList:IList","@Value":[]},"AddAttributeSubsequent":"(bool)False"}},"TypeInfos":{"0db3d7bb":"{0db3d7bb-cde0-4416-9a7b-ce49a0124323}","3b83b776":"{3b83b776-fb25-43b8-99f2-3c507c9143fc}","6f9dac99":"{6f9dac99-8de1-4efc-8465-68ac443b7d08}","8e575c5b":"{8e575c5b-1d37-49c6-941b-5c0ec7874787}","a9ed5b7e":"{a9ed5b7e-75c5-4651-af16-d2c27e98cb94}","ArrayList":"System.Collections.ArrayList","bool":"System.Boolean","f3878285":"{f3878285-8e4f-490b-bb1b-9acbb7eb04db}","string":"System.String"}}},"FormatVersion":"1.0"}
\ No newline at end of file
+{"payload":{"meta":{"Graph":{"@Type":"81297157","@Value":{"Guid":"(Guid)0bdfb382-e83f-44ce-8b28-d26c6658b28d","ParentGuid":"(Guid)00000000-0000-0000-0000-000000000000","Name":"(string)FB_PrimaryHostMessageConsumer","Properties":{"@Type":"2c41fa04:IDictionary","@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)ec6863e3-35a1-4237-b54f-4c4d98ebfb4e"}]}}}}]},"TypeGuid":"(Guid)6f9dac99-8de1-4efc-8465-68ac443b7d08","EmbeddedTypeGuids":{"@Type":"[Guid]","@Value":["(Guid)a9ed5b7e-75c5-4651-af16-d2c27e98cb94","(Guid)3b83b776-fb25-43b8-99f2-3c507c9143fc"]}}},"TypeInfos":{"2c41fa04":"{2c41fa04-1834-41c1-816e-303c7aa2c05b}","81297157":"{81297157-7ec9-45ce-845e-84cab2b88ade}","829a18f2":"{829a18f2-c514-4f6e-9634-1df173429203}","fa2ee218":"{fa2ee218-a39b-4b6d-b249-49dbddbd168a}","Guid":"System.Guid","string":"System.String"}},"object":{"Graph":{"@Type":"6f9dac99","@Value":{"SpecialFunc":{"@Type":"0db3d7bb:Enum","@Value":"None"},"Implementation":{"@Type":"3b83b776","@Value":{"TextDocument":{"@Type":"f3878285","@Value":{"TextBlobForSerialisation":"(string)_RecvMesg REF= pMQTT^.GetSubscriberMessage( MessageTopic => _RecvTopic );\n\n//parses the topic\n_TopicParser( pTopic := ADR( _RecvTopic ) );\n\n// log the topic in debug level\nWriteHostLog( CmpLog.LogClass.LOG_DEBUG, 'Incoming message in topic: %s', TO_STRING( _RecvTopic ) );\n\nCASE _TopicParser.MessageType OF //SparkplugMessageTypes\n\n    SPStack.SparkplugMessageTypes.NBIRTH: //Birth certificate for MQTT EoN nodes.\n\n        ConsumeNBIRTHMessage( pPrimaryHost := pPrimaryHost,\n                              pTopicParser := ADR( _TopicParser ),\n                              GetEdgeError =>,\n                              allocGroupIdError =>,\n                              allocEdgetoGroupIdError =>,\n                              ProcessNBIRTHerror =>,\n                              xProcessNBIRTHError =>,\n                              GetGroupIDerror => );\n\n    SPStack.SparkplugMessageTypes.NDATA: //Node data message.\n\n        ConsumeNDATAMessage( pPrimaryHost := pPrimaryHost,\n                             pTopicParser := ADR( _TopicParser ),            \n                             GetEdgeError =>,\n                             ProcessNDATAError =>,\n                             xProcessNDATAError => );\n\n    SPStack.SparkplugMessageTypes.NDEATH: //Death certificate for MQTT EoN nodes.\n\n        ConsumeNDEATHMessage( pPrimaryHost := pPrimaryHost,\n                              pTopicParser := ADR( _TopicParser ),            \n                              GetEdgeError => );\n\n    SPStack.SparkplugMessageTypes.DBIRTH: //Birth certificate forDevices.\n\n        ConsumeDBIRTHMessage( pPrimaryHost := pPrimaryHost,\n                              pTopicParser := ADR( _TopicParser ),            \n                              GetDeviceError =>,\n                              GetEdgeError =>,\n                              allocDevicetoEdge =>,\n                              ProcessDBIRTHerror =>,\n                              xProcessDBIRTHError => );\n\n    SPStack.SparkplugMessageTypes.DDEATH: //Death certificate for Devices.\n\n        ConsumeDDEATHMessage( pPrimaryHost := pPrimaryHost,\n                              pTopicParser := ADR( _TopicParser ),\n                              GetDeviceError =>, \n                              xGetDeviceError => );\n\n    SPStack.SparkplugMessageTypes.DDATA: // Device data message. \n\n         ConsumeDDATAMessage( pPrimaryHost := pPrimaryHost,\n                              pTopicParser := ADR( _TopicParser ),              \n                              GetDeviceError=> , \n                              ProcessDDATAError=> , \n                              xProcessDDATAError=> );\n\n    SPStack.SparkplugMessageTypes.NCMD, //Node command message.\n        SPStack.SparkplugMessageTypes.DCMD, //Device command message.\n            SPStack.SparkplugMessageTypes.STATE: //Critical application state message\n            ; //do nothing, ignore these\n\nELSE\n    ; //{info 'TODO: maybe some sort of error??'}\nEND_CASE","LineInfoPersistence":"(string)0bdfb382-e83f-44ce-8b28-d26c6658b28d_Impl_LineIds"}}}},"Interface":{"@Type":"a9ed5b7e","@Value":{"TextDocument":{"@Type":"f3878285","@Value":{"TextBlobForSerialisation":"(string)FUNCTION_BLOCK FB_PrimaryHostMessageConsumer\nVAR_INPUT\n    pPrimaryHost : POINTER TO FB_PrimaryHost;\n    pMQTT : POINTER TO FB_PrimaryHostMQTT;\nEND_VAR\nVAR_OUTPUT\n    xError : BOOL;\n    eError : SPStack.ERROR;\nEND_VAR\nVAR\n    _TopicParser : FB_TopicParser;\n    _RecvMesg : REFERENCE TO SPStack.FB_Payload;\n    _RecvTopic : WSTRING( SPStack.GC_Sparkplug.supported_string_lengths );\nEND_VAR","LineInfoPersistence":"(string)0bdfb382-e83f-44ce-8b28-d26c6658b28d_Decl_LineIds"}}}},"UniqueIdGenerator":"(string)1006","POULevel":{"@Type":"8e575c5b:Enum","@Value":"Standard"},"ChildObjectGuids":{"@Type":"ArrayList:IList","@Value":[]},"AddAttributeSubsequent":"(bool)False"}},"TypeInfos":{"0db3d7bb":"{0db3d7bb-cde0-4416-9a7b-ce49a0124323}","3b83b776":"{3b83b776-fb25-43b8-99f2-3c507c9143fc}","6f9dac99":"{6f9dac99-8de1-4efc-8465-68ac443b7d08}","8e575c5b":"{8e575c5b-1d37-49c6-941b-5c0ec7874787}","a9ed5b7e":"{a9ed5b7e-75c5-4651-af16-d2c27e98cb94}","ArrayList":"System.Collections.ArrayList","bool":"System.Boolean","f3878285":"{f3878285-8e4f-490b-bb1b-9acbb7eb04db}","string":"System.String"}}},"FormatVersion":"1.0"}
\ No newline at end of file