ThingSpeak don't update channel automatic
18 次查看(过去 30 天)
显示 更早的评论
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
0 个评论
采纳的回答
更多回答(2 个)
Hans Scharler
2019-5-7
I would write to a second ThingSpeak channel instead of writing data back to the same channel. The reason is that ThingSpeak will overwrite other fields with nulls for the fields that do not have a value. I think that you are writing to the 6,7,8 fields, then your channel updates and overrides their data with nulls.
Also, you can read an entire channel's worth of data in one thingSpeakRead request. This will speed up your script.
2 个评论
Hans Scharler
2019-5-7
I see. This means that the MATLAB code is not scheduled to run automatically. At the bottom of the page, there is a place to add a TimeControl or a React. TimeControl will schedule your code to run and React will run the code based on a condition.
Sergio R
2019-5-7
编辑:Sergio R
2019-5-7
2 个评论
Hans Scharler
2019-5-8
You can use React. Select "On data insert". This will cause the MATLAB code to run every time data gets sent to ThingSpeak.
Thomas
2024-8-7,8:57
Hallo,
ich habe das gleiche Problem, allerdings kann man die Kontrollzeit nicht kürzer schalten lassen als 5 Minuten. Das ist in Matlab so fest gehalten.
Hier hilft nur ein Export in eine Cloud die die Daten dann sofort weiter leitet.
Grüße
Thomas
社区
更多回答在 ThingSpeak Community
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Prepare and Analyze Data 的更多信息
产品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!