v0.14.2-connectivity

This commit is contained in:
Mateusz Gruszczyński
2026-09-15 10:02:49 +02:00
parent 2fd7e47eb9
commit c3f6e773f8
41 changed files with 1295 additions and 108 deletions
+21 -1
View File
@@ -11,6 +11,9 @@ fn gree_settings(settings: &RuntimeSettings) -> GreeSettings {
zone_interval_seconds: settings.zone_interval_seconds,
discovery_timeout_ms: settings.discovery_timeout_ms,
discovery_broadcast: settings.discovery_broadcast.clone(),
ping_metrics_enabled: settings.ping_metrics_enabled,
ping_interval_seconds: settings.ping_interval_seconds,
ping_sample_count: settings.ping_sample_count,
suppress_device_beep: settings.suppress_device_beep,
compressor_protection_enabled: settings.compressor_protection_enabled,
compressor_protection_seconds: settings.compressor_protection_seconds,
@@ -24,6 +27,9 @@ fn gree_cloud_settings(settings: &RuntimeSettings) -> GreeCloudSettingsView {
username: settings.gree_cloud.username.clone(),
password_configured: !settings.gree_cloud.password.is_empty(),
polling_interval_seconds: settings.gree_cloud.polling_interval_seconds,
connectivity_metrics_enabled: settings.gree_cloud.connectivity_metrics_enabled,
connectivity_metrics_interval_seconds: settings.gree_cloud.connectivity_metrics_interval_seconds,
connectivity_metrics_sample_count: settings.gree_cloud.connectivity_metrics_sample_count,
installation_id: settings.gree_cloud.installation_id.clone(),
account_id: settings.gree_cloud.account_id.clone(),
last_successful_contact: settings.gree_cloud.last_successful_contact,
@@ -138,6 +144,8 @@ fn normalize_gree_settings(mut input: GreeSettings) -> Result<GreeSettings, AppE
input.poll_interval_seconds = input.poll_interval_seconds.clamp(2, 3600);
input.zone_interval_seconds = input.zone_interval_seconds.clamp(2, 3600);
input.discovery_timeout_ms = input.discovery_timeout_ms.clamp(300, 30_000);
input.ping_interval_seconds = input.ping_interval_seconds.clamp(10, 3600);
input.ping_sample_count = input.ping_sample_count.clamp(1, 10);
input.compressor_protection_seconds = input.compressor_protection_seconds.clamp(30, 1800);
if !(input.discovery_broadcast.eq_ignore_ascii_case("auto")
|| input
@@ -201,6 +209,9 @@ async fn update_gree_settings(
settings.zone_interval_seconds = input.zone_interval_seconds;
settings.discovery_timeout_ms = input.discovery_timeout_ms;
settings.discovery_broadcast = input.discovery_broadcast;
settings.ping_metrics_enabled = input.ping_metrics_enabled;
settings.ping_interval_seconds = input.ping_interval_seconds;
settings.ping_sample_count = input.ping_sample_count;
settings.suppress_device_beep = input.suppress_device_beep;
settings.compressor_protection_enabled = input.compressor_protection_enabled;
settings.compressor_protection_seconds = input.compressor_protection_seconds;
@@ -216,7 +227,10 @@ async fn update_gree_settings(
"GREE settings updated",
json!({
"compressor_protection_enabled": payload.compressor_protection_enabled,
"compressor_protection_seconds": payload.compressor_protection_seconds
"compressor_protection_seconds": payload.compressor_protection_seconds,
"ping_metrics_enabled": payload.ping_metrics_enabled,
"ping_interval_seconds": payload.ping_interval_seconds,
"ping_sample_count": payload.ping_sample_count
}),
);
state.broadcast("settings.gree.updated", serde_json::to_value(&payload)?);
@@ -246,6 +260,9 @@ fn apply_gree_cloud_update(
next.region = input.region.trim().to_string();
next.username = input.username.trim().to_string();
next.polling_interval_seconds = input.polling_interval_seconds.clamp(30, 3600);
next.connectivity_metrics_enabled = input.connectivity_metrics_enabled;
next.connectivity_metrics_interval_seconds = input.connectivity_metrics_interval_seconds.clamp(30, 3600);
next.connectivity_metrics_sample_count = input.connectivity_metrics_sample_count.clamp(1, 10);
if let Some(password) = input.password {
next.password = password;
}
@@ -292,6 +309,9 @@ async fn update_gree_cloud_settings(
"enabled": payload.enabled,
"region": payload.region,
"polling_interval_seconds": payload.polling_interval_seconds,
"connectivity_metrics_enabled": payload.connectivity_metrics_enabled,
"connectivity_metrics_interval_seconds": payload.connectivity_metrics_interval_seconds,
"connectivity_metrics_sample_count": payload.connectivity_metrics_sample_count,
"password_configured": payload.password_configured
}),
);