Lesen Sie ThingSpeak Daten und prognostizieren Sie die Batterieentladezeit mit linearer Anpassung
Dieses Beispiel zeigt, wie man Batteriedaten von einem ThingSpeak™ -Kanal liest und die Daten analysiert, um die verbleibende Batterielebensdauer zu bestimmen. Verwenden Sie eine lineare Anpassung, um das Datum vorherzusagen, an dem die Batterie ausfällt, und schreiben Sie dann die verbleibende Zeit in Tagen in einen anderen ThingSpeak Kanal. Sie lesen Daten für eine 12-V-Batterie, die an einen Mikroprozessor angeschlossen ist und deren Spannung jede halbe Stunde an ThingSpeak übermittelt. Verwenden Sie dann die Regression, um den Tag und die Uhrzeit vorherzusagen, wann die Batterie ausfallen wird.
Lesen Sie Daten vom ThingSpeak Kanal
Beginnen Sie mit der Speicherung von Kanal- und Datumsinformationen in Variablen und lesen Sie die Daten dann mit thingSpeakRead
aus. Kanal 592680 zeigt die skalierte Messung der Spannung einer 12-V-Batterie. Verwenden Sie das Name-Wert-Paar DateRange
, um eine bestimmte Datenauswahl zu verwenden.
batteryChannelID = 592680; startDate = datetime('Oct 20, 2018'); endDate = datetime('Oct 23, 2018'); batteryData = thingSpeakRead(batteryChannelID,'DateRange',[startDate endDate],'Outputformat','Timetable');
Konvertieren Sie die Daten für die Anpassung und Darstellung
Der Kanal speichert Rohdaten vom Gerät. Wandeln Sie die Messung des Analog-Digital-Wandlers (ADC) mit dem experimentell ermittelten Umrechnungsfaktor 14,6324 in Spannung um. Verwenden Sie dann scatter
, um ein Diagramm zu erstellen.
myVoltage = 14.6324 * batteryData.Voltage; scatter(batteryData.Timestamps,myVoltage,'b'); ylabel('Voltage (V)'); hold on
Passen Sie die Daten an
Das Datum-Uhrzeit-Format des Stundenplans eignet sich zum Lesen und Plotten. Um die Daten anzupassen, muss die Datums- und Uhrzeitangabe im numerischen Format vorliegen. Verwenden Sie datenum
, um die Zeitstempel in eine Anzahl von Tagen umzuwandeln, und subtrahieren Sie die Anfangszahl, um die Werte niedrig zu halten. Verwenden Sie polyfit
, um eine lineare Regression der Daten durchzuführen, und polyval
, um die Anpassung an den vorhandenen Zeitwerten auszuwerten. Fügen Sie die Anpassungslinie zum vorherigen Diagramm hinzu.
battTimes = datenum(batteryData.Timestamps);
battTimes= battTimes-battTimes(1);
myFit=polyfit(battTimes,myVoltage,1);
fitLine=polyval(myFit,battTimes);
plot(batteryData.Timestamps,fitLine,'r--');
Entladezeit vorhersagen
Die Batterie sollte nicht unter 10,4 V entladen werden. Ermitteln Sie die Anzahl der Tage, bis die Anpassungslinie diese Spannung schneidet.
endDays = (10.4-myFit(2))/myFit(1)
endDays = 13.1573
Es dauert etwas mehr als 13 Tage, bis die Batterie leer ist.
Schreiben Sie eine Vorhersage in ThingSpeak
Die Funktion thingSpeakWrite
schreibt das Ergebnis in einen ThingSpeak Kanal. Geben Sie die Ausgabe von thingSpeakWrite
zurück, um einen erfolgreichen Schreibvorgang sicherzustellen. Ändern Sie writeChannelID
und writeAPIKey
, um auf Ihren eigenen Kanal zu schreiben.
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: []
Das Ergebnis zeigt den erfolgreichen Schreibvorgang und meldet die geschriebenen Daten.
Siehe auch
thingSpeakRead
(MATLAB) | thingSpeakWrite
(MATLAB) | datetime
(MATLAB) | datnum
(MATLAB) | scatter
(MATLAB) | polyfit
(MATLAB) | polyval
(MATLAB)