2022-07-15 15:01:42 -07:00
|
|
|
//
|
|
|
|
|
// WriteCsvFile.swift
|
|
|
|
|
// Meshtastic
|
|
|
|
|
//
|
|
|
|
|
// Copyright(c) Garth Vander Houwen 7/15/22.
|
|
|
|
|
//
|
|
|
|
|
|
|
|
|
|
import SwiftUI
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func TelemetryToCsvFile(telemetry: [TelemetryEntity], metricsType: Int) -> String {
|
|
|
|
|
|
|
|
|
|
var csvString: String = ""
|
|
|
|
|
|
|
|
|
|
if metricsType == 0 {
|
|
|
|
|
|
|
|
|
|
// Create Device Metrics Header
|
|
|
|
|
csvString = "Battery Level, Voltage, Channel Utilization, Airtime, Timestamp"
|
|
|
|
|
|
|
|
|
|
for dm in telemetry{
|
|
|
|
|
|
|
|
|
|
if dm.metricsType == 0 {
|
|
|
|
|
|
|
|
|
|
csvString += "\n"
|
|
|
|
|
csvString += String("\(dm.batteryLevel) %")
|
|
|
|
|
csvString += ", "
|
|
|
|
|
csvString += String(dm.voltage)
|
|
|
|
|
csvString += ", "
|
|
|
|
|
csvString += String(dm.channelUtilization)
|
|
|
|
|
csvString += ", "
|
|
|
|
|
csvString += String(dm.airUtilTx)
|
|
|
|
|
csvString += ", "
|
|
|
|
|
csvString += dm.time?.formattedDate(format: "yyyy-MM-dd HH:mm:ss") ?? "Unknown Age"
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2022-09-30 17:10:03 -07:00
|
|
|
} else if metricsType == 1 {
|
2022-08-01 07:25:39 -07:00
|
|
|
|
2022-08-01 07:11:03 -07:00
|
|
|
// Create Environment Telemetry Header
|
|
|
|
|
csvString = "Temperature, Relative Humidity, Barometric Pressure, Gas Resistance, Voltage, Current"
|
|
|
|
|
|
|
|
|
|
for dm in telemetry{
|
|
|
|
|
|
2022-09-30 17:10:03 -07:00
|
|
|
if dm.metricsType == 1 {
|
2022-08-01 07:11:03 -07:00
|
|
|
|
|
|
|
|
csvString += "\n"
|
|
|
|
|
csvString += String("\(dm.temperature)°")
|
|
|
|
|
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: "yyyy-MM-dd HH:mm:ss") ?? "Unknown Age"
|
|
|
|
|
}
|
|
|
|
|
}
|
2022-07-15 15:01:42 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return csvString
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func PositionToCsvFile(positions: [PositionEntity]) -> String {
|
|
|
|
|
|
|
|
|
|
var csvString: String = ""
|
|
|
|
|
|
|
|
|
|
// Create Position Header
|
2022-10-02 10:36:14 -07:00
|
|
|
csvString = "SeqNo, Latitude, Longitude, Alt, Sats, Speed, Heading, Timestamp"
|
2022-07-15 15:01:42 -07:00
|
|
|
|
|
|
|
|
for pos in positions {
|
|
|
|
|
|
|
|
|
|
csvString += "\n"
|
2022-10-02 10:36:14 -07:00
|
|
|
csvString += String(pos.seqNo)
|
|
|
|
|
csvString += ", "
|
2022-10-03 16:52:00 -07:00
|
|
|
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 += ", "
|
|
|
|
|
|
2022-07-15 15:01:42 -07:00
|
|
|
csvString += pos.time?.formattedDate(format: "yyyy-MM-dd HH:mm:ss") ?? "Unknown Age"
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return csvString
|
|
|
|
|
}
|