Lesen Sie ThingSpeak-Daten und sagen Sie die Batterieentladezeit mit linearer Anpassung voraus
Dieses Beispiel zeigt, wie Batteriedaten aus einem ThingSpeak™-Kanal gelesen und die Daten analysiert werden, um die verbleibende Batterielebensdauer zu bestimmen. Verwenden Sie eine lineare Anpassung, um das Datum vorherzusagen, an dem die Batterie ausfallen wird, 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, der ihre Spannung jede halbe Stunde an ThingSpeak meldet. Verwenden Sie dann die Regression, um den Tag und die Uhrzeit vorherzusagen, an dem die Batterie ausfallen wird.
Daten vom ThingSpeak-Kanal lesen
Beginnen Sie mit dem Speichern von Kanal- und Datumsinformationen in Variablen und verwenden Sie dann thingSpeakRead, um die Daten zu lesen. Kanal 592680 zeigt die skalierte Spannungsmessung 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 das Plotten
Der Kanal speichert Rohdaten vom Gerät. Wandeln Sie die Messung des Analog-Digital-Wandlers (ADC) mithilfe des experimentell ermittelten Umrechnungsfaktors 14,6324 in eine Spannung um. Wandeln Sie die Zeitstempel in Anzahl von Tagen um und verwenden Sie dann scatter, um ein Diagramm zu erstellen.
myVoltage = 14.6324 * batteryData.Voltage; battTimes = batteryData.Timestamps; battTimes = days(battTimes-battTimes(1)); scatter(battTimes,myVoltage,'b'); xlabel('Duration (days)'); ylabel('Voltage (V)'); hold on

Anpassen der Daten
Das Datums- und Uhrzeitformat des Timetable ist zum Lesen und Plotten nützlich. Verwenden Sie polyfit, um eine lineare Regression der Daten durchzuführen, und polyval, um die Anpassung an die vorhandenen Zeitwerte auszuwerten. Fügen Sie die Anpassungslinie zum vorherigen Diagramm hinzu.
fitCoeffs = polyfit(battTimes,myVoltage,1);
fitLine = polyval(fitCoeffs,battTimes);
plot(battTimes,fitLine,'r--');
Entladezeit vorhersagen
Die Batterie sollte nicht unter 10,4 V entladen werden. Ermitteln Sie mithilfe der Steigung und des Achsenabschnitts von fitCoeffs die Anzahl der Tage, bis die Anpassungslinie diese Spannung schneidet.
endDays = (10.4-fitCoeffs(2))/fitCoeffs(1)
endDays = 13.1573
Bis die Batterie leer ist, sind es noch etwas mehr als 13 Tage.
Schreibe Vorhersage an 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 in 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: 10-May-2024 11:01:22
LastEntryID: 866419
Altitude: []
Das Ergebnis zeigt den erfolgreichen Schreibvorgang an und meldet die geschriebenen Daten.
Siehe auch
thingSpeakRead (MATLAB) | thingSpeakWrite (MATLAB) | datetime (MATLAB) | datnum (MATLAB) | scatter (MATLAB) | polyfit (MATLAB) | polyval (MATLAB)