Meshtastic-Apple/Meshtastic/Export/WriteCsvFile.swift

84 lines
2.9 KiB
Swift
Raw Normal View History

2022-07-15 15:01:42 -07:00
//
// WriteCsvFile.swift
// Meshtastic
//
// Copyright(c) Garth Vander Houwen 7/15/22.
//
import SwiftUI
2023-03-06 10:33:18 -08:00
func telemetryToCsvFile(telemetry: [TelemetryEntity], metricsType: Int) -> String {
2022-07-15 15:01:42 -07:00
var csvString: String = ""
2022-12-31 00:26:59 -08:00
let localeDateFormat = DateFormatter.dateFormat(fromTemplate: "yyMMddjmma", options: 0, locale: Locale.current)
2023-01-12 07:57:24 -08:00
let dateFormatString = (localeDateFormat ?? "MM/dd/YY j:mma").replacingOccurrences(of: ",", with: "")
2022-07-15 15:01:42 -07:00
if metricsType == 0 {
// Create Device Metrics Header
csvString = "\("battery.level".localized), \("voltage".localized), \("channel.utilization".localized), \("airtime".localized), \("timestamp".localized)"
2023-03-06 10:33:18 -08:00
for dm in telemetry {
2022-07-15 15:01:42 -07:00
if dm.metricsType == 0 {
csvString += "\n"
csvString += String(dm.batteryLevel)
2022-07-15 15:01:42 -07:00
csvString += ", "
csvString += String(dm.voltage)
csvString += ", "
csvString += String(dm.channelUtilization)
csvString += ", "
csvString += String(dm.airUtilTx)
csvString += ", "
csvString += dm.time?.formattedDate(format: dateFormatString) ?? "unknown.age".localized
2022-07-15 15:01:42 -07:00
}
}
} else if metricsType == 1 {
2022-08-01 07:11:03 -07:00
// Create Environment Telemetry Header
csvString = "Temperature, Relative Humidity, Barometric Pressure, Gas Resistance, \("voltage".localized), \("current".localized), \("timestamp".localized)"
2023-03-06 10:33:18 -08:00
for dm in telemetry {
if dm.metricsType == 1 {
2022-08-01 07:11:03 -07:00
csvString += "\n"
csvString += String(dm.temperature.localeTemperature())
2022-08-01 07:11:03 -07:00
csvString += ", "
csvString += String(dm.relativeHumidity)
csvString += ", "
csvString += String(dm.barometricPressure)
csvString += ", "
csvString += String(dm.gasResistance)
csvString += ", "
csvString += String(dm.voltage)
csvString += ", "
csvString += String(dm.current)
csvString += ", "
csvString += dm.time?.formattedDate(format: dateFormatString) ?? "unknown.age".localized
2022-08-01 07:11:03 -07:00
}
}
2022-07-15 15:01:42 -07:00
}
return csvString
}
2023-03-06 10:33:18 -08:00
func positionToCsvFile(positions: [PositionEntity]) -> String {
2022-07-15 15:01:42 -07:00
var csvString: String = ""
2022-12-31 00:26:59 -08:00
let localeDateFormat = DateFormatter.dateFormat(fromTemplate: "yyMMddjmma", options: 0, locale: Locale.current)
2023-01-12 11:01:10 -08:00
let dateFormatString = (localeDateFormat ?? "MM/dd/YY j:mma").replacingOccurrences(of: ",", with: "")
2022-07-15 15:01:42 -07:00
// Create Position Header
csvString = "SeqNo, Latitude, Longitude, Altitude, Sats, Speed, Heading, SNR, \("timestamp".localized)"
2022-07-15 15:01:42 -07:00
for pos in positions {
csvString += "\n"
csvString += String(pos.seqNo)
csvString += ", "
csvString += String((pos.latitude ?? 0))
2022-07-15 15:01:42 -07:00
csvString += ", "
csvString += String(pos.longitude ?? 0)
csvString += ", "
csvString += String(pos.altitude)
csvString += ", "
2022-09-30 20:25:41 -07:00
csvString += String(pos.satsInView)
csvString += ", "
csvString += String(pos.speed)
csvString += ", "
csvString += String(pos.heading)
csvString += ", "
csvString += String(pos.snr)
csvString += ", "
csvString += pos.time?.formattedDate(format: dateFormatString) ?? "unknown.age".localized
2022-07-15 15:01:42 -07:00
}
return csvString
}