From 0c82f284e894c731932f42cd20f8cbc6cd2a34a3 Mon Sep 17 00:00:00 2001 From: Christian Risi <75698846+CnF-Gris@users.noreply.github.com> Date: Fri, 29 Nov 2024 19:07:37 +0000 Subject: [PATCH] Added sensors support and implemented other classes --- .vscode/settings.json | 1 + .../Classes/Devices/AsyncEdgeDevice.swift | 0 .../Classes/Devices/EdgeDevice.swift | 0 .../Classes/Devices/Sensors.swift | 92 +++++++++++++++++++ .../Classes/Utils/Field.swift | 11 +++ .../Classes/Utils/Location3D.swift | 12 +++ .../Classes/Utils/Message.swift | 23 +++++ .../Classes/Utils/PhysicalData.swift | 6 +- .../Enums/MessageType.swift | 7 ++ 9 files changed, 151 insertions(+), 1 deletion(-) create mode 100644 .vscode/settings.json create mode 100644 Sources/IoT-Simulator-Core/Classes/Devices/AsyncEdgeDevice.swift create mode 100644 Sources/IoT-Simulator-Core/Classes/Devices/EdgeDevice.swift create mode 100644 Sources/IoT-Simulator-Core/Classes/Devices/Sensors.swift create mode 100644 Sources/IoT-Simulator-Core/Classes/Utils/Field.swift create mode 100644 Sources/IoT-Simulator-Core/Classes/Utils/Location3D.swift create mode 100644 Sources/IoT-Simulator-Core/Enums/MessageType.swift diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..9e26dfe --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/Sources/IoT-Simulator-Core/Classes/Devices/AsyncEdgeDevice.swift b/Sources/IoT-Simulator-Core/Classes/Devices/AsyncEdgeDevice.swift new file mode 100644 index 0000000..e69de29 diff --git a/Sources/IoT-Simulator-Core/Classes/Devices/EdgeDevice.swift b/Sources/IoT-Simulator-Core/Classes/Devices/EdgeDevice.swift new file mode 100644 index 0000000..e69de29 diff --git a/Sources/IoT-Simulator-Core/Classes/Devices/Sensors.swift b/Sources/IoT-Simulator-Core/Classes/Devices/Sensors.swift new file mode 100644 index 0000000..d76afc1 --- /dev/null +++ b/Sources/IoT-Simulator-Core/Classes/Devices/Sensors.swift @@ -0,0 +1,92 @@ +public class Sensor { + + public let sensorID: Int + public let sensorType: DataType + public var faulty: Bool + + public init(id: Int, sensorType: DataType, faulty: Bool) { + self.sensorID = id + self.sensorType = sensorType + self.faulty = faulty + } + + public init(id: Int, sensorType: DataType) { + self.sensorID = id + self.sensorType = sensorType + self.faulty = false + } + + public func read(_ environment: PhysicalEnvironment) -> PhysicalData { + + let datum = self._read(environment) + + return self.faulty ? datum : datum + Float.random(in: 1E2...1E10) + + } + + internal func _read(_ environment: PhysicalEnvironment) -> PhysicalData{ + let datum : PhysicalData + + do { + datum = try environment.getPhysicalData(self.sensorType) + } catch CoreError.NoPhysicalDataAvailable { + datum = self._defaultReadValue() + } catch { + print( + "This is really a weird problem, to be investigated, but here we are...\n" + + "nonetheless, the error will be handled silently, sowwy :3" + ) + datum = self._defaultReadValue() + } + + return datum + } + + internal func _defaultReadValue() -> PhysicalData{ + return PhysicalData(self.sensorType, 0) + } + + + +} + +public class RealSensor: Sensor { + + public var meanNoise: Float { get{ return _meanNoise}} + public var stdNoise: Float { get{ return _stdNoise}} + public var quantizationBits: Int { get{ return _quantizationBits}} + + private var _meanNoise: Float + private var _stdNoise: Float + private let _quantizationBits: Int + + public init( + sensorID: Int, + sensorType: DataType, + faulty: Bool, + meanNoise: Float, + stdNoise: Float, + quantizationBits: Int + ) { + self._meanNoise = meanNoise + self._stdNoise = stdNoise + self._quantizationBits = quantizationBits + super.init(id: sensorID, sensorType: sensorType, faulty: faulty) + } + + public init( + sensorID: Int, + sensorType: DataType, + meanNoise: Float, + stdNoise: Float, + quantizationBits: Int + ) { + self._meanNoise = meanNoise + self._stdNoise = stdNoise + self._quantizationBits = quantizationBits + super.init(id: sensorID, sensorType: sensorType) + } + + // TODO: Override and implement read with Vincenzo lib here + +} \ No newline at end of file diff --git a/Sources/IoT-Simulator-Core/Classes/Utils/Field.swift b/Sources/IoT-Simulator-Core/Classes/Utils/Field.swift new file mode 100644 index 0000000..81311ae --- /dev/null +++ b/Sources/IoT-Simulator-Core/Classes/Utils/Field.swift @@ -0,0 +1,11 @@ +public class Field { + + public let key: String + public let value: String + + public init(key: String, value: String) { + self.key = key + self.value = value + } + +} \ No newline at end of file diff --git a/Sources/IoT-Simulator-Core/Classes/Utils/Location3D.swift b/Sources/IoT-Simulator-Core/Classes/Utils/Location3D.swift new file mode 100644 index 0000000..7d9f430 --- /dev/null +++ b/Sources/IoT-Simulator-Core/Classes/Utils/Location3D.swift @@ -0,0 +1,12 @@ +public class Location3D { + + public let x : Float + public let y : Float + public let z : Float + + public init(_ x: Float, _ y: Float, _ z : Float) { + self.x = x + self.y = y + self.z = z + } +} \ No newline at end of file diff --git a/Sources/IoT-Simulator-Core/Classes/Utils/Message.swift b/Sources/IoT-Simulator-Core/Classes/Utils/Message.swift index e31a0a8..ea1a731 100644 --- a/Sources/IoT-Simulator-Core/Classes/Utils/Message.swift +++ b/Sources/IoT-Simulator-Core/Classes/Utils/Message.swift @@ -1,3 +1,26 @@ +import Foundation public class Message { + public let messageType : MessageType + public let timestamp : Date + public let deviceID : String + public let location : Location3D + public let fields : [Field] + public let signature : [UInt8] + + public init( + msgType: MessageType, + timestamp: Date, + deviceID: String, + location: Location3D, + fields: [Field], + signature: [UInt8] + ) { + self.messageType = msgType + self.timestamp = timestamp + self.deviceID = deviceID + self.location = location + self.fields = fields + self.signature = signature + } } \ No newline at end of file diff --git a/Sources/IoT-Simulator-Core/Classes/Utils/PhysicalData.swift b/Sources/IoT-Simulator-Core/Classes/Utils/PhysicalData.swift index 9782b82..2e052f2 100644 --- a/Sources/IoT-Simulator-Core/Classes/Utils/PhysicalData.swift +++ b/Sources/IoT-Simulator-Core/Classes/Utils/PhysicalData.swift @@ -3,11 +3,15 @@ public class PhysicalData { public let type: DataType - public let value: Float + public let value: Float public init(_ dataType: DataType, _ value: Float) { self.type = dataType self.value = value } + public static func + (left: PhysicalData, right: Float) -> PhysicalData { + return PhysicalData(left.type, left.value + right) + } + } \ No newline at end of file diff --git a/Sources/IoT-Simulator-Core/Enums/MessageType.swift b/Sources/IoT-Simulator-Core/Enums/MessageType.swift new file mode 100644 index 0000000..4114b4e --- /dev/null +++ b/Sources/IoT-Simulator-Core/Enums/MessageType.swift @@ -0,0 +1,7 @@ +public enum MessageType { + case KeepAlive + case Data + case Info + case Warning + case Critical +} \ No newline at end of file