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