Independent multi channel sending with on change

Hello

I am sending 5 values from my flexy to AWS via MQTT

Originally these were all sent every 60 seconds

I now need them to send on individual Tag values changing, On Change function handles the logic of monitoring the variable but how do I implement this into the code

I didn’t originally write the code but I cannot see how I can implement to just send one channel at a time

I tried copying all the code to then send one channel at a time using the Goto Label but this comes up with a compile error as the functions Log and Grab TS would be used numerous times

in the copied code all channels send when Log_Data_0 changes value, this is how I have left it currently

could anyone help please

thank you

// Look for a change in value for datalogs independently

ONCHANGE “log_data_0” , “GOTO SENDDATA0”
ONCHANGE “log_data_1” , “GOTO SENDDATA1”
ONCHANGE “log_data_2” , “GOTO SENDDATA2”
ONCHANGE “log_data_3” , “GOTO SENDDATA3”
ONCHANGE “log_data_4” , “GOTO SENDDATA4”

//ONTIMER 1, “GOTO SENDDATA”
//TSET 1,60 //publish every 60 seconds

END
SENDDATA0:

//Read MQTT Connection Status (5 = Connected, other values = Not connected)
ConnStatus% = MQTT “STATUS”
IF Last_ConnStatus% <> ConnStatus% THEN
IF ConnStatus% = 5 THEN //Connection is back online
@Log("[MQTT SCRIPT] Flexy connected to Broker")
ELSE
@Log("[MQTT SCRIPT] Flexy disconnected from Broker")
ENDIF
Last_ConnStatus% = ConnStatus%
ENDIF
//IF Connected → Publish messages
IF ConnStatus% = 5 THEN //If connected → Publish
@grab_ts() //Format timestamp YYMMDDHHMMSS
//##################################
//######## HEADER ###############
//##################################
MsgToPublish$ = “{”
MsgToPublish$ = MsgToPublish$ + ‘“device”:’
MsgToPublish$ = MsgToPublish$ + ‘{’
MsgToPublish$ = MsgToPublish$ + ‘“sn”:1,“name”:"’ + MQTTDevice$ + ‘",’
MsgToPublish$ = MsgToPublish$ + ‘“v”:“0.10”},’
//##################################
//######## CHANNELS ##############
//##################################
//Channel start - DO NOT MODIFY
MsgToPublish$ = MsgToPublish$ + ‘“channels”:[{’

//Channel 1 - OK to edit
MsgToPublish$ = MsgToPublish$ + '"code":"EFNASRaAcmm",'
MsgToPublish$ = MsgToPublish$ + '"name":"Forecast Rainfall Accumulation",'
MsgToPublish$ = MsgToPublish$ + '"unit":"Millimetres"}'
 // MsgToPublish$ = MsgToPublish$ + ',{'//Add this line if there is a succeeding channel

//Channel 2 - OK to edit
MsgToPublish$ = MsgToPublish$ + '"code":"EMaWaL",'
MsgToPublish$ = MsgToPublish$ + '"name":"Mains Water",'
MsgToPublish$ = MsgToPublish$ + '"unit":"Litres"}'
  MsgToPublish$ = MsgToPublish$ + ','//Add this line if there is a succeeding channel

//Channel 3 - OK to edit
MsgToPublish$ = MsgToPublish$ + '"code":"EGWVoL",'
MsgToPublish$ = MsgToPublish$ + '"name":"Grey Water Volume",'
MsgToPublish$ = MsgToPublish$ + '"unit":"Litres"}'
  MsgToPublish$ = MsgToPublish$ + ',{'//Add this line if there is a succeeding channel

 //Channel 4 - OK to edit
MsgToPublish$ = MsgToPublish$ + '"code":"ERWTrL",'
MsgToPublish$ = MsgToPublish$ + '"name":"Rainwater Transferred",'
MsgToPublish$ = MsgToPublish$ + '"unit":"Litres"}'
  MsgToPublish$ = MsgToPublish$ + ',{'//Add this line if there is a succeeding channel

 //Channel 5 - OK to edit
MsgToPublish$ = MsgToPublish$ + '"code":"IMoSLDb",'
MsgToPublish$ = MsgToPublish$ + '"name":"Modem Signal Level",'
MsgToPublish$ = MsgToPublish$ + '"unit":"dB"}'
  MsgToPublish$ = MsgToPublish$ + ',{'//Add this line if there is a succeeding channel

//Channel end - DO NOT MODIFY
MsgToPublish$ = MsgToPublish$ + '],'

//#####################################
//########  CHANNEL DATA ##############
//#####################################
//Data start - DO NOT MODIFY
MsgToPublish$ = MsgToPublish$ + '"data":[{'


//Channel data 1 - OK to edit
MsgToPublish$ = MsgToPublish$ + '"$ts":' + MT$ + ','
MsgToPublish$ = MsgToPublish$ + '"EFNASRaAcmm":"' + STR$(log_data_0@) + '"}' 
  MsgToPublish$ = MsgToPublish$ + ',{'//Add this line if there is a succeeding channel

//Channel data 2 - OK to edit
MsgToPublish$ = MsgToPublish$ + '"$ts":' + MT$ + ','
MsgToPublish$ = MsgToPublish$ + '"EMaWaL":"' + STR$(log_data_1@) + '"}' 
  MsgToPublish$ = MsgToPublish$ + ',{'//Add this line if there is a succeeding channel

//Channel data 3 - OK to edit
MsgToPublish$ = MsgToPublish$ + '"$ts":' + MT$ + ','
MsgToPublish$ = MsgToPublish$ + '"EGWVoL":"' + STR$(log_data_2@) + '"}' 
  MsgToPublish$ = MsgToPublish$ + ',{'//Add this line if there is a succeeding channel

//Channel data 4 - OK to edit
MsgToPublish$ = MsgToPublish$ + '"$ts":' + MT$ + ','
MsgToPublish$ = MsgToPublish$ + '"ERWTrL":"' + STR$(log_data_3@) + '"}' 
  MsgToPublish$ = MsgToPublish$ + ',{'//Add this line if there is a succeeding channel

 //Channel data 5 - OK to edit
MsgToPublish$ = MsgToPublish$ + '"$ts":' + MT$ + ','
MsgToPublish$ = MsgToPublish$ + '"IMoSLDb":"' + STR$(SIGSTRENGTH@) + '"}' 
  MsgToPublish$ = MsgToPublish$ + ',{'//Add this line if there is a succeeding channel


//Data end - DO NOT MODIFY
MsgToPublish$ = MsgToPublish$ + ']'  
//Footer - DO NOT MODIFY
MsgToPublish$ = MsgToPublish$ + "}"

//Publish JSON data
MQTT “PUBLISH”, TopicToPublishOn$ , MsgToPublish$, 0,0
PRINT “[MQTT SCRIPT] Message '” + MsgToPublish$ + “’ sent on topic : " + TopicToPublishOn$
ELSE //If not connected → Save message in file
@Log(”[MQTT SCRIPT] Flexy not connected")
ENDIF
//END
FUNCTION Log($Msg$)
LOGEVENT $Msg$ ,100
PRINT $Msg$
ENDFN
FUNCTION grab_ts()
//Format YYMMDDHHMMSS
T$ = TIME$ //EWON time format = 13/12/2017 11:38:58
//print T$
//Extract time to individual components
vY% = Val(T$(9 To 10))
vM% = Val(T$(4 To 5))
vD% = Val(T$(1 To 2))
vHH% = Val(T$(12 To 13))
vMM% = Val(T$(15 To 16))
vSS% = Val(T$(18 To 19))
//Pad with leading zeros and format to 2 digits
Y$ = SFMT vY%, 30, 0, “%02d”
M$ = SFMT vM%, 30, 0, “%02d”
D$ = SFMT vD%, 30, 0, “%02d”
HH$ = SFMT vHH%, 30, 0, “%02d”
MM$ = SFMT vMM%, 30, 0, “%02d”
SS$ = SFMT vSS%, 30, 0, “%02d”
MT$ = Y$ + M$ + D$ + HH$ + MM$ + SS$
//print MT$
ENDFN

I would recommend creating a case with your local office at support.hms-netoworks.com for help with troubleshooting your code. We are currently experiencing a very large case load in our region and are trying to get caught up right now.