mirror of
https://github.com/meshtastic/Meshtastic-Apple.git
synced 2026-04-20 22:13:56 +00:00
Restrict ESP32 only plugins, finish telemetry log.
This commit is contained in:
parent
3b90bb7ecc
commit
95b35e7e45
6 changed files with 192 additions and 7 deletions
|
|
@ -1259,13 +1259,12 @@ class BLEManager: NSObject, ObservableObject, CBCentralManagerDelegate, CBPeriph
|
|||
|
||||
}
|
||||
|
||||
public func saveCannedMessageModuleConfig(config: ModuleConfig.CannedMessageConfig, messages: String, fromUser: UserEntity, toUser: UserEntity, wantResponse: Bool) -> Int64 {
|
||||
public func saveCannedMessageModuleConfig(config: ModuleConfig.CannedMessageConfig, fromUser: UserEntity, toUser: UserEntity, wantResponse: Bool) -> Int64 {
|
||||
|
||||
var newMessageId: Int64 = 0
|
||||
|
||||
var adminPacket = AdminMessage()
|
||||
adminPacket.setModuleConfig.cannedMessage = config
|
||||
//adminPacket.setCannedMessageModulePart1 = messages
|
||||
|
||||
var meshPacket: MeshPacket = MeshPacket()
|
||||
meshPacket.to = UInt32(toUser.num)
|
||||
|
|
@ -1317,7 +1316,62 @@ class BLEManager: NSObject, ObservableObject, CBCentralManagerDelegate, CBPeriph
|
|||
return newMessageId
|
||||
}
|
||||
|
||||
|
||||
public func saveCannedMessageModuleMessages(messages: String, fromUser: UserEntity, toUser: UserEntity, wantResponse: Bool) -> Int64 {
|
||||
|
||||
var newMessageId: Int64 = 0
|
||||
|
||||
var adminPacket = AdminMessage()
|
||||
adminPacket.setCannedMessageModulePart1 = messages
|
||||
|
||||
var meshPacket: MeshPacket = MeshPacket()
|
||||
meshPacket.to = UInt32(toUser.num)
|
||||
meshPacket.from = 0 //UInt32(fromUser.num)
|
||||
meshPacket.id = UInt32.random(in: UInt32(UInt8.max)..<UInt32.max)
|
||||
meshPacket.priority = MeshPacket.Priority.reliable
|
||||
meshPacket.wantAck = wantResponse
|
||||
|
||||
var dataMessage = DataMessage()
|
||||
dataMessage.payload = try! adminPacket.serializedData()
|
||||
dataMessage.portnum = PortNum.adminApp
|
||||
|
||||
meshPacket.decoded = dataMessage
|
||||
|
||||
var toRadio: ToRadio!
|
||||
toRadio = ToRadio()
|
||||
toRadio.packet = meshPacket
|
||||
|
||||
let binaryData: Data = try! toRadio.serializedData()
|
||||
|
||||
if connectedPeripheral!.peripheral.state == CBPeripheralState.connected {
|
||||
|
||||
let newMessage = MessageEntity(context: context!)
|
||||
newMessage.messageId = Int64(meshPacket.id)
|
||||
newMessageId = newMessage.messageId
|
||||
newMessage.messageTimestamp = Int32(Date().timeIntervalSince1970)
|
||||
newMessage.receivedACK = false
|
||||
newMessage.admin = true
|
||||
newMessage.adminDescription = "Saved Canned Message Module Messages for \(toUser.longName ?? "Unknown")"
|
||||
newMessage.fromUser = fromUser
|
||||
newMessage.toUser = toUser
|
||||
newMessage.messagePayload = messages
|
||||
|
||||
do {
|
||||
|
||||
try context!.save()
|
||||
|
||||
if meshLoggingEnabled { MeshLogger.log("💾 Saved Canned Message Module Messages Admin Message for node: \(String(toUser.num))") }
|
||||
connectedPeripheral.peripheral.writeValue(binaryData, for: TORADIO_characteristic, type: .withResponse)
|
||||
|
||||
} catch {
|
||||
|
||||
context!.rollback()
|
||||
|
||||
let nsError = error as NSError
|
||||
print("💥 Error Inserting New Core Data MessageEntity: \(nsError)")
|
||||
}
|
||||
}
|
||||
return newMessageId
|
||||
}
|
||||
|
||||
public func saveExternalNotificationModuleConfig(config: ModuleConfig.ExternalNotificationConfig, fromUser: UserEntity, toUser: UserEntity, wantResponse: Bool) -> Int64 {
|
||||
|
||||
|
|
@ -1547,4 +1601,35 @@ class BLEManager: NSObject, ObservableObject, CBCentralManagerDelegate, CBPeriph
|
|||
}
|
||||
return newMessageId
|
||||
}
|
||||
|
||||
// Send an admin message to a radio, save a message to core data for logging
|
||||
private func sendAdminMessageToRadio(adminDescription: String, messageId: Int64, fromUser: UserEntity, toUser: UserEntity, binaryData: Data) {
|
||||
|
||||
if connectedPeripheral!.peripheral.state == CBPeripheralState.connected {
|
||||
|
||||
let newMessage = MessageEntity(context: context!)
|
||||
newMessage.messageId = Int64(messageId)
|
||||
newMessage.messageTimestamp = Int32(Date().timeIntervalSince1970)
|
||||
newMessage.receivedACK = false
|
||||
newMessage.admin = true
|
||||
newMessage.adminDescription = adminDescription
|
||||
newMessage.fromUser = fromUser
|
||||
newMessage.toUser = toUser
|
||||
|
||||
do {
|
||||
|
||||
try context!.save()
|
||||
|
||||
if meshLoggingEnabled { MeshLogger.log("💾 \(adminDescription)") }
|
||||
connectedPeripheral.peripheral.writeValue(binaryData, for: TORADIO_characteristic, type: .withResponse)
|
||||
|
||||
} catch {
|
||||
|
||||
context!.rollback()
|
||||
|
||||
let nsError = error as NSError
|
||||
print("💥 Error inserting new core data MessageEntity: \(nsError)")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1299,6 +1299,8 @@ func telemetryPacket(packet: MeshPacket, meshLogging: Bool, context: NSManagedOb
|
|||
telemetry.gasResistance = telemetryMessage.environmentMetrics.gasResistance
|
||||
telemetry.relativeHumidity = telemetryMessage.environmentMetrics.relativeHumidity
|
||||
telemetry.temperature = telemetryMessage.environmentMetrics.temperature
|
||||
telemetry.current = telemetryMessage.environmentMetrics.current
|
||||
telemetry.voltage = telemetryMessage.environmentMetrics.voltage
|
||||
telemetry.metricsType = 1
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -26,8 +26,10 @@ struct TelemetryLog: View {
|
|||
|
||||
if UIDevice.current.userInterfaceIdiom == .pad || UIDevice.current.userInterfaceIdiom == .mac {
|
||||
|
||||
|
||||
if tel.metricsType == 0 {
|
||||
|
||||
// Device Metrics
|
||||
HStack {
|
||||
|
||||
Text("Device Metrics")
|
||||
|
|
@ -75,6 +77,101 @@ struct TelemetryLog: View {
|
|||
.foregroundColor(.gray)
|
||||
.font(.callout)
|
||||
}
|
||||
|
||||
} else if tel.metricsType == 1 {
|
||||
|
||||
// Environment Metrics
|
||||
HStack {
|
||||
|
||||
Text("Environment Metrics")
|
||||
.font(.title3)
|
||||
|
||||
let sensor = SensorTypes(rawValue: Int(node.telemetryConfig?.environmentSensorType ?? 0))
|
||||
|
||||
let tempReadingType = (!(node.telemetryConfig?.environmentDisplayFahrenheit ?? true)) ? "°F" : "°C"
|
||||
|
||||
if sensor == SensorTypes.bme280 ||
|
||||
sensor == SensorTypes.bme680 ||
|
||||
sensor == SensorTypes.shtc3 ||
|
||||
sensor == SensorTypes.mcp9808 {
|
||||
|
||||
Image(systemName: "thermometer")
|
||||
.font(.callout)
|
||||
.foregroundColor(.accentColor)
|
||||
.symbolRenderingMode(.hierarchical)
|
||||
Text("Temperature: \(String(format: "%.2f", tel.temperature))\(tempReadingType)")
|
||||
.foregroundColor(.gray)
|
||||
.font(.callout)
|
||||
}
|
||||
|
||||
if sensor == SensorTypes.bme280 ||
|
||||
sensor == SensorTypes.bme680 ||
|
||||
sensor == SensorTypes.shtc3 {
|
||||
|
||||
Image(systemName: "humidity")
|
||||
.font(.callout)
|
||||
.foregroundColor(.accentColor)
|
||||
.symbolRenderingMode(.hierarchical)
|
||||
Text("Relative Humidity: \(String(format: "%.2f", tel.relativeHumidity))")
|
||||
.foregroundColor(.gray)
|
||||
.font(.callout)
|
||||
}
|
||||
|
||||
if sensor == SensorTypes.bme280 ||
|
||||
sensor == SensorTypes.bme680 {
|
||||
|
||||
Image(systemName: "barometer")
|
||||
.font(.callout)
|
||||
.foregroundColor(.accentColor)
|
||||
.symbolRenderingMode(.hierarchical)
|
||||
Text("Barometric Pressure: \(String(format: "%.2f", tel.barometricPressure))")
|
||||
.foregroundColor(.gray)
|
||||
.font(.callout)
|
||||
}
|
||||
|
||||
if sensor == SensorTypes.bme680 {
|
||||
|
||||
Image(systemName: "aqi.medium")
|
||||
.font(.callout)
|
||||
.foregroundColor(.accentColor)
|
||||
.symbolRenderingMode(.hierarchical)
|
||||
Text("Gas Resistance: \(String(format: "%.2f", tel.gasResistance))")
|
||||
.foregroundColor(.gray)
|
||||
.font(.callout)
|
||||
}
|
||||
|
||||
if sensor == SensorTypes.ina219 ||
|
||||
sensor == SensorTypes.ina260 {
|
||||
|
||||
Image(systemName: "directcurrent")
|
||||
.font(.callout)
|
||||
.foregroundColor(.accentColor)
|
||||
.symbolRenderingMode(.hierarchical)
|
||||
Text("Current: \(String(format: "%.2f", tel.current))")
|
||||
.foregroundColor(.gray)
|
||||
.font(.callout)
|
||||
|
||||
Image(systemName: "bolt")
|
||||
.font(.callout)
|
||||
.foregroundColor(.accentColor)
|
||||
.symbolRenderingMode(.hierarchical)
|
||||
Text("Voltage: \(String(format: "%.2f", tel.voltage))")
|
||||
.foregroundColor(.gray)
|
||||
.font(.callout)
|
||||
}
|
||||
|
||||
Image(systemName: "clock.badge.checkmark.fill")
|
||||
.font(.callout)
|
||||
.foregroundColor(.accentColor)
|
||||
.symbolRenderingMode(.hierarchical)
|
||||
Text("Time:")
|
||||
.foregroundColor(.gray)
|
||||
.font(.callout)
|
||||
DateTimeText(dateTime: tel.time)
|
||||
.foregroundColor(.gray)
|
||||
.font(.callout)
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
} else {
|
||||
|
|
|
|||
|
|
@ -316,7 +316,7 @@ struct CannedMessagesConfig: View {
|
|||
cmc.inputbrokerEventCcw = InputEventChars(rawValue: inputbrokerEventCcw)!.protoEnumValue()
|
||||
cmc.inputbrokerEventPress = InputEventChars(rawValue: inputbrokerEventPress)!.protoEnumValue()
|
||||
|
||||
let adminMessageId = bleManager.saveCannedMessageModuleConfig(config: cmc, messages: "Where are you garth?, Hello",fromUser: node!.user!, toUser: node!.user!, wantResponse: true)
|
||||
let adminMessageId = bleManager.saveCannedMessageModuleConfig(config: cmc, fromUser: node!.user!, toUser: node!.user!, wantResponse: true)
|
||||
|
||||
if adminMessageId > 0 {
|
||||
// Should show a saved successfully alert once I know that to be true
|
||||
|
|
|
|||
|
|
@ -272,6 +272,7 @@ struct SerialConfig: View {
|
|||
.font(.caption)
|
||||
}
|
||||
}
|
||||
.disabled(!(node!.myInfo?.hasWifi ?? false))
|
||||
|
||||
Button {
|
||||
|
||||
|
|
@ -281,7 +282,7 @@ struct SerialConfig: View {
|
|||
|
||||
Label("Save", systemImage: "square.and.arrow.down")
|
||||
}
|
||||
.disabled(bleManager.connectedPeripheral == nil || !hasChanges)
|
||||
.disabled(bleManager.connectedPeripheral == nil || !hasChanges || !(node!.myInfo?.hasWifi ?? false))
|
||||
.buttonStyle(.bordered)
|
||||
.buttonBorderShape(.capsule)
|
||||
.controlSize(.large)
|
||||
|
|
|
|||
|
|
@ -135,7 +135,7 @@ struct Settings: View {
|
|||
Image(systemName: "point.3.connected.trianglepath.dotted")
|
||||
.symbolRenderingMode(.hierarchical)
|
||||
|
||||
Text("Range Test")
|
||||
Text("Range Test (ESP32 Only)")
|
||||
}
|
||||
.disabled(bleManager.connectedPeripheral == nil)
|
||||
|
||||
|
|
@ -146,7 +146,7 @@ struct Settings: View {
|
|||
Image(systemName: "terminal")
|
||||
.symbolRenderingMode(.hierarchical)
|
||||
|
||||
Text("Serial")
|
||||
Text("Serial (ESP32 Only)")
|
||||
}
|
||||
.disabled(bleManager.connectedPeripheral == nil)
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue