Просмотр исходного кода

dev: eemalda diagnostilised veerud temperatuur/ukseandur tabelitest

- nende muutused on nüüd uus67.vead tabelis (low_battery, weak_signal, low_voltage, ...)
- temperatuur: eemaldatud battery, linkquality
- ukseandur: eemaldatud battery, voltage, linkquality, battery_low
- collector: HourBucket/DoorTracker ei kirjuta neid enam; _as_int eemaldatud
- LOEMIND: skeemid uuendatud
ardo 1 месяц назад
Родитель
Сommit
0675c97efc
2 измененных файлов с 7 добавлено и 29 удалено
  1. 7 10
      dev/LOEMIND.md
  2. 0 19
      dev/zigbee-collector/collector.py

+ 7 - 10
dev/LOEMIND.md

@@ -68,8 +68,8 @@ Valvurile ei lähe andmebaasi kredentiaale.
 **Loogika:**
 - **Temperatuur** (`MQTT_TOPIC`): mõõtmised kogutakse mälus täistunni kaupa ja
   kirjutatakse iga täistunni järel üks agregeeritud rida (`temperature`/`humidity`
-  = keskmine, lisaks min/max, `samples`, `battery`, `linkquality`). Andur
-  raporteerib u. iga 10 min → tunnis mitu mõõtmist.
+  = keskmine, lisaks min/max, `samples`). Andur raporteerib u. iga 10 min →
+  tunnis mitu mõõtmist.
 - **Uksed** (`DOOR_TOPICS`): salvestatakse **ainult olekumuutused**. Perioodilised
   ~2 h südamelöögid (sama `contact`) jäetakse vahele. Käivitusel seemendatakse
   viimane teadaolev olek andmebaasist; esimene nähtud olek salvestatakse baasreana.
@@ -91,9 +91,7 @@ CREATE TABLE uus67.temperatuur (
     temp_max      Nullable(Float32),
     humidity_min  Nullable(Float32),
     humidity_max  Nullable(Float32),
-    samples       UInt32,
-    battery       Nullable(UInt8),
-    linkquality   Nullable(UInt8)
+    samples       UInt32
 ) ENGINE = MergeTree
 PARTITION BY toYYYYMM(hour)
 ORDER BY (device, hour);
@@ -106,16 +104,15 @@ CREATE TABLE uus67.ukseandur (
     ts          DateTime('Europe/Tallinn'),
     device      LowCardinality(String),
     contact     Bool,                   -- toorväärtus Z2M-st
-    olek        LowCardinality(String), -- 'avatud' / 'suletud'
-    battery     Nullable(UInt8),
-    voltage     Nullable(UInt16),
-    linkquality Nullable(UInt8),
-    battery_low Nullable(Bool)
+    olek        LowCardinality(String)  -- 'avatud' / 'suletud'
 ) ENGINE = MergeTree
 PARTITION BY toYYYYMM(ts)
 ORDER BY (device, ts);
 ```
 
+> Diagnostilised veerud (aku, pinge, signaal) on nendest tabelitest teadlikult
+> eemaldatud — nende **muutused** on `uus67.vead` tabelis.
+
 > **`contact` semantika (SNZB-04PR2):** `contact: true` = **suletud**,
 > `contact: false` = **avatud**. Kinnitatud Zigbee2MQTT HA-discovery'st
 > (`device_class: door`, `payload_on: false`, `payload_off: true`).

+ 0 - 19
dev/zigbee-collector/collector.py

@@ -96,12 +96,6 @@ def current_hour(now: datetime | None = None) -> datetime:
     return now.replace(minute=0, second=0, microsecond=0)
 
 
-def _as_int(value: Any) -> int | None:
-    if isinstance(value, bool) or not isinstance(value, (int, float)):
-        return None
-    return int(value)
-
-
 def _as_float(value: Any) -> float | None:
     if isinstance(value, bool) or not isinstance(value, (int, float)):
         return None
@@ -133,18 +127,12 @@ class HourBucket:
         self.hour = hour
         self.temps: list[float] = []
         self.hums: list[float] = []
-        self.battery: int | None = None
-        self.linkquality: int | None = None
 
     def add(self, payload: dict[str, Any]) -> None:
         if isinstance(payload.get("temperature"), (int, float)):
             self.temps.append(float(payload["temperature"]))
         if isinstance(payload.get("humidity"), (int, float)):
             self.hums.append(float(payload["humidity"]))
-        if isinstance(payload.get("battery"), (int, float)):
-            self.battery = int(payload["battery"])
-        if isinstance(payload.get("linkquality"), (int, float)):
-            self.linkquality = int(payload["linkquality"])
 
     @property
     def empty(self) -> bool:
@@ -164,8 +152,6 @@ class HourBucket:
             "humidity_min": min(self.hums) if self.hums else None,
             "humidity_max": max(self.hums) if self.hums else None,
             "samples": max(len(self.temps), len(self.hums)),
-            "battery": self.battery,
-            "linkquality": self.linkquality,
         }
 
 
@@ -189,7 +175,6 @@ class DoorTracker:
         if device in self.last and self.last[device] == contact:
             return None
         self.last[device] = contact
-        battery_low = payload.get("battery_low")
         return {
             "ts": ts.strftime("%Y-%m-%d %H:%M:%S"),
             "device": device,
@@ -197,10 +182,6 @@ class DoorTracker:
             # SNZB-04P: contact=true = suletud, false = avatud (Z2M HA discovery
             # payload_on=false, payload_off=true, device_class=door).
             "olek": "suletud" if contact else "avatud",
-            "battery": _as_int(payload.get("battery")),
-            "voltage": _as_int(payload.get("voltage")),
-            "linkquality": _as_int(payload.get("linkquality")),
-            "battery_low": battery_low if isinstance(battery_low, bool) else None,
         }