В этом примере показано, как считывать данные о батарее из ThingSpeak™ канала и анализировать данные для определения оставшегося времени автономной работы. Используйте линейную подгонку, чтобы предсказать дату отказа батареи, а затем запишите оставшееся время в днях в другой канал ThingSpeak. Вы считываете данные для батареи 12 В, подключенной к микропроцессору, сообщая о своем напряжении ThingSpeak каждые полчаса. Затем используйте регрессию, чтобы предсказать день и время отказа батареи.
Начните с хранения информации о канале и дате в переменных, а затем используйте thingSpeakRead для считывания данных. Канал 592680 показывает масштабированное измерение напряжения от батареи 12 В. Используйте DateRange пара «имя-значение» для использования определенного набора данных.
batteryChannelID = 592680; startDate = datetime('Oct 20, 2018'); endDate = datetime('Oct 23, 2018'); batteryData = thingSpeakRead(batteryChannelID,'DateRange',[startDate endDate],'Outputformat','Timetable');
Канал сохраняет необработанные данные с устройства. Преобразуйте измерение аналого-цифрового преобразователя (АЦП) в напряжение, используя экспериментально определенный коэффициент преобразования 14.6324. Затем использовать scatter для создания графика.
myVoltage = 14.6324 * batteryData.Voltage; scatter(batteryData.Timestamps,myVoltage,'b'); ylabel('Voltage (V)'); hold on

Формат datetime расписания полезен для чтения и печати. Для подгонки данных значение datetime должно быть в числовом формате. Использовать datenum для преобразования временных меток в число дней и вычитания начального числа для сохранения низких значений. Использовать polyfit для выполнения линейной регрессии данных, и polyval для оценки соответствия существующим значениям времени. Добавьте линию посадки к предыдущему графику.
battTimes = datenum(batteryData.Timestamps);
battTimes= battTimes-battTimes(1);
myFit=polyfit(battTimes,myVoltage,1);
fitLine=polyval(myFit,battTimes);
plot(batteryData.Timestamps,fitLine,'r--');
Аккумулятор не должен разряжаться ниже 10,4 В. Найдите количество дней до пересечения линии посадки с этим напряжением.
endDays = (10.4-myFit(2))/myFit(1)
endDays = 13.1573
Осталось чуть больше 13 дней, пока батарея не умрет.
thingSpeakWrite функция записывает результат в канал ThingSpeak. Возврат выходных данных из thingSpeakWrite для обеспечения успешной операции записи. Изменить writeChannelID и writeAPIKey для записи на собственный канал.
writeChannelID = 17504; writeAPIKey='23ZLGOBBU9TWHG2H'; result = thingSpeakWrite(writeChannelID,round(endDays,4),'WriteKey',writeAPIKey)
result = struct with fields:
Field1: '13.1573'
Field2: []
Field3: []
Field4: []
Field5: []
Field6: []
Field7: []
Field8: []
Latitude: []
Longitude: []
ChannelID: 17504
Created: 03-Jun-2019 15:24:43
LastEntryID: 50018
Altitude: []
Результат показывает успешную операцию записи и сообщает о записанных данных.
datetime | datnum | polyfit | polyval | scatter | thingSpeakRead | thingSpeakWrite