Sergio R in MATLAB Answers
上次活动时间: 2024-8-7

Hello, in a ThingSpeak channel, I am reading every one second the information of two current signals (I have the licensed application). I currently have a MATLAB Analysis routine that adds those two signals and writes, on the same channel, the result of that sum. In the routine I can check that effectively if the sum of the two channels is being done. I do that now with a good result but my problem is that the channel is not updated except when I run MATLAB Analysis. How can I make the channel automatically update every second? ------------------------------------------------------------------------------- This is my routine: readChannelID = 123; readAPIKey = 'XXX'; writeChannelID = 123; writeAPIKey = 'YYY'; %%%%%%%%%%%%%%%%%%%%%% CALCULO DE CORRIENTE %%%%%%%%%%%%%%%%%%%%%% [Cte1, timeStamp] = thingSpeakRead(readChannelID,'Fields',1,'numPoints', 2, 'ReadKey', readAPIKey); anyMissingValues = sum(isnan(Cte1)); if sum(anyMissingValues) > 0 missingValueIndex = find(~sum(isnan(Cte1),2)); cleanCte1 = Cte1(missingValueIndex, :); cleanTimeStamps = timeStamp(missingValueIndex); else cleanCte1 = Cte1; cleanTimeStamps = timeStamp; end [Cte2, timeStamp] = thingSpeakRead(readChannelID,'Fields',4,'numPoints', 2, 'ReadKey', readAPIKey); anyMissingValues = sum(isnan(Cte2)); if sum(anyMissingValues) > 0 missingValueIndex = find(~sum(isnan(Cte2),2)); cleanCte2 = Cte2(missingValueIndex, :); cleanTimeStamps = timeStamp(missingValueIndex); else cleanCte2 = Cte2; cleanTimeStamps = timeStamp; end Corriente = round([cleanCte1 + cleanCte2],1); display (Corriente, 'Corriente') %%%%%%%%%%%%%%%%%%%%%% VOLTAJE %%%%%%%%%%%%%%%%%%%%%% [Voltaje, timeStamp] = thingSpeakRead(readChannelID,'Fields',2,'numPoints', 2, 'ReadKey', readAPIKey); anyMissingValues = sum(isnan(Voltaje)); if sum(anyMissingValues) > 0 missingValueIndex = find(~sum(isnan(Voltaje),2)); cleanVoltaje = Voltaje(missingValueIndex, :); cleanTimeStamps = timeStamp(missingValueIndex); else cleanVoltaje = Voltaje; cleanTimeStamps = timeStamp; end display (cleanVoltaje, 'Voltaje') %%%%%%%%%%%%%%%%%%%%%% CALCULO DE POTENCIA %%%%%%%%%%%%%%%%%%%%%% Potencia = round([Corriente * cleanVoltaje],0) %%%%%%%%%%%%%%%%%%%%%% CALCULO DE ENERGIA %%%%%%%%%%%%%%%%%%%%%% [Energia1, timeStamp] = thingSpeakRead(readChannelID,'Fields',3,'numPoints', 2, 'ReadKey', readAPIKey); anyMissingValues = sum(isnan(Energia1)); if sum(anyMissingValues) > 0 missingValueIndex = find(~sum(isnan(Energia1),2)); cleanEnergia1 = Energia1(missingValueIndex, :); cleanTimeStamps = timeStamp(missingValueIndex); else cleanEnergia1 = Energia1; cleanTimeStamps = timeStamp; end [Energia2, timeStamp] = thingSpeakRead(readChannelID,'Fields',5,'numPoints', 2, 'ReadKey', readAPIKey); anyMissingValues = sum(isnan(Energia2)); if sum(anyMissingValues) > 0 missingValueIndex = find(~sum(isnan(Energia2),2)); cleanEnergia2 = Energia2(missingValueIndex, :); cleanTimeStamps = timeStamp(missingValueIndex); else cleanEnergia2 = Energia2; cleanTimeStamps = timeStamp; end Energia = [cleanEnergia1 + cleanEnergia2]; display (Energia, 'Energia') %%%%%%%%%%%%%%%%% Write the results in fields 6, 7 and 8 of the same channel %%%%%%%%%%%%%%%%%%%% thingSpeakWrite(writeChannelID, 'Fields', [6,7,8], 'Values',... [Corriente, Potencia, Energia],'WriteKey',writeAPIKey); OUTPUT: Corriente = 3.4000 Voltaje = 116 Potencia = 394 Energia = 0.0040

关于 ThingSpeak

The community for students, researchers, and engineers looking to use MATLAB, Simulink, and ThingSpeak for Internet of Things applications. You can find the latest ThingSpeak news, tutorials to jump-start your next IoT project, and a forum to engage in a discussion on your latest cloud-based project. You can see answers to problems other users have solved and share how you solved a problem.