Why does my daily median calculation and write to channel fail unpredictably?
3 次查看(过去 30 天)
显示 更早的评论
I am trying to calculate the daily median across a range of channels and write the result to a new field for each channel. The code seems to run sometimes, but runs into rate limitation other times. I'm not sure why since I am only writing once and to different channels?
Error using Median calcs (line 39)
My code is:
% Sensor/channel configuration
sensors = [
struct('name', 'McKinley','channelID', 28xxxx, 'writeKey', 'G3WPJ586M55Gxxxx')
struct('name', 'DPI', 'channelID', 80xxxx, 'writeKey', 'S0E0LB45GQLMxxxx')
struct('name', 'Bryony','channelID', 29xxxx, 'writeKey', '2BPCI0IOAINPxxxx')
];
% Define date range (last 24 hours to midnight)
endTime = dateshift(datetime('now'), 'start', 'day');
startTime = endTime - hours(24);
% Preallocate a results array
results = [];
% Step 1: Read and calculate all medians
for i = 1:length(sensors)
s = sensors(i);
% Read Field 1 for the past 24 hours
[weight, ~] = thingSpeakRead(s.channelID, 'DateRange', [startTime, endTime], 'Fields', 1);
% Compute median, ignoring NaNs
medianWeight = round(median(weight, 'omitnan'),2);
% Store in results
results(i).name = s.name;
results(i).channelID = s.channelID;
results(i).writeKey = s.writeKey;
results(i).value = medianWeight;
end
% Step 2: Display results
for i = 1:length(results)
r = results(i);
fprintf('%s (Channel %d) → 24hr Median: %.2f\n', r.name, r.channelID, r.value);
end
% Step 3: Write results
thingSpeakWrite(results(1).channelID, 'Fields', 6, 'Values', {results(1).value}, 'WriteKey', results(1).writeKey);
thingSpeakWrite(results(2).channelID, 'Fields', 6, 'Values', {results(2).value}, 'WriteKey', results(2).writeKey);
thingSpeakWrite(results(3).channelID, 'Fields', 6, 'Values', {results(3).value}, 'WriteKey', results(3).writeKey);
1 个评论
Christopher Stapels
2025-5-8
See the limitations area there for additional info. How often are you running this code?
"The number of messages in a single bulk-update is limited to 960 messages for users of free accounts and 14,400 messages for users of paid accounts. The time interval between sequential bulk-update calls should be 15 seconds or more."
回答(2 个)
Ray Berkelmans
2025-5-8
2 个评论
Vinod
2025-5-9
If you don't need to run it at exactly midnight, I'd also suggest some more random time (like 12:14 AM, for example). This will avoid the issue of potentially running into jitter from other work which is also scheduled exactly at midnight.
Heidi
2025-5-12
A combination of 1s delay between writes and moving the TimeControl away from midnight seems to be doing the trick. Three nights good so far... :)
0 个评论
社区
更多回答在 ThingSpeak Community
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Configure Accounts and Channels 的更多信息
产品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!