Skip to content

Commit

Permalink
Merge pull request #11 from Cyberbeni/server-state-reporting
Browse files Browse the repository at this point in the history
Publish server state
  • Loading branch information
Cyberbeni authored Nov 3, 2024
2 parents 610284b + 7e191bb commit 4951c1b
Showing 6 changed files with 41 additions and 2 deletions.
30 changes: 30 additions & 0 deletions Sources/Wiring/App/App+BridgeStatus.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
extension App {
func setupServerState() async {
guard generalConfig.publishServerState else { return }
let mqttConfig = generalConfig.mqtt
let name = if mqttConfig.baseTopic == "wiring" {
"Wiring server"
} else {
"Wiring server (\(mqttConfig.baseTopic))"
}
let stateTopic = mqttClient.stateTopic
let config = Mqtt.BinarySensor(
availabilityTopic: nil,
device: .init(
identifiers: stateTopic,
name: name
),
deviceClass: .connectivity,
name: nil,
objectId: nil,
payloadOff: Mqtt.Availability.offline.rawValue,
payloadOn: Mqtt.Availability.online.rawValue,
stateTopic: stateTopic,
uniqueId: stateTopic.replacingOccurrences(of: "/", with: "_")
)
await mqttClient.setOnConnectMessage(
topic: "\(mqttConfig.homeAssistantBaseTopic)/binary_sensor/\(mqttConfig.baseTopic)-server/state/config",
message: config
)
}
}
2 changes: 2 additions & 0 deletions Sources/Wiring/App/App+Presence.swift
Original file line number Diff line number Diff line change
@@ -39,6 +39,8 @@ extension App {
deviceClass: .presence,
name: name,
objectId: name,
payloadOff: nil,
payloadOn: nil,
stateTopic: stateTopic,
uniqueId: stateTopic.replacingOccurrences(of: "/", with: "_")
)
1 change: 1 addition & 0 deletions Sources/Wiring/App/App.swift
Original file line number Diff line number Diff line change
@@ -34,6 +34,7 @@ import Foundation
}

func run() async {
await setupServerState()
await setupPresenceDetectors()
await mqttClient.start()

3 changes: 3 additions & 0 deletions Sources/Wiring/Config/GeneralConfig.swift
Original file line number Diff line number Diff line change
@@ -3,11 +3,14 @@ import Foundation
extension Config {
struct General: Decodable {
let mqtt: Mqtt
private let _publishServerState: Bool?
var publishServerState: Bool { _publishServerState ?? true }
private let _enableDebugLogging: Bool?
var enableDebugLogging: Bool { _enableDebugLogging ?? false }

private enum CodingKeys: String, CodingKey {
case mqtt
case _publishServerState = "publishServerState"
case _enableDebugLogging = "enableDebugLogging"
}
}
6 changes: 4 additions & 2 deletions Sources/Wiring/HomeAssistantMqtt/MqttBinarySensor.swift
Original file line number Diff line number Diff line change
@@ -3,11 +3,13 @@ import Foundation
extension Mqtt {
/// https://www.home-assistant.io/integrations/binary_sensor.mqtt/
struct BinarySensor: Encodable {
let availabilityTopic: String
let availabilityTopic: String?
let device: Device
let deviceClass: DeviceClass?
let deviceClass: DeviceClass
let name: String?
let objectId: String?
let payloadOff: String?
let payloadOn: String?
let stateTopic: String
let uniqueId: String

1 change: 1 addition & 0 deletions sample_config/config/config.general.json
Original file line number Diff line number Diff line change
@@ -7,5 +7,6 @@
"base_topic": "wiring", // optional
"home_assistant_base_topic": "homeassistant" // optional
},
"publish_server_state": true, // optional
"enable_debug_logging": false // optional
}

0 comments on commit 4951c1b

Please sign in to comment.