From 397b4ab5259319dc559d08d10f2134d623d600e9 Mon Sep 17 00:00:00 2001
From: "th.l" <thl-cmk@outlook.com>
Date: Tue, 9 Jan 2024 18:36:44 +0100
Subject: [PATCH] update project

---
 mkp/fritzbox_smarthome-0.8.8-20240109.mkp     | Bin 16744 -> 16947 bytes
 .../fritzbox_smarthome_power_meter.py         |  59 +---------
 .../fritzbox_smarthome_power_socket.py        |  26 +++--
 .../fritzbox_smarthome_thermostat.py          |   2 +-
 .../agent_based/utils/fritzbox_smarthome.py   |  56 +++++++++
 .../check_parameters/fritzbox_smarthome.py    |   5 +
 .../fritzbox_smarthome_power_coscket.py       | 107 ++++++++++++++++++
 source/packages/fritzbox_smarthome            |   3 +-
 8 files changed, 191 insertions(+), 67 deletions(-)
 create mode 100644 source/gui/wato/check_parameters/fritzbox_smarthome_power_coscket.py

diff --git a/mkp/fritzbox_smarthome-0.8.8-20240109.mkp b/mkp/fritzbox_smarthome-0.8.8-20240109.mkp
index 55f50e4a6086bd6befc34d4543250fdd1f40da67..581710903fe925e3e585000d1f839647ce19e431 100644
GIT binary patch
literal 16947
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

literal 16744
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

diff --git a/source/agent_based/fritzbox_smarthome_power_meter.py b/source/agent_based/fritzbox_smarthome_power_meter.py
index b7107ea..d966c89 100644
--- a/source/agent_based/fritzbox_smarthome_power_meter.py
+++ b/source/agent_based/fritzbox_smarthome_power_meter.py
@@ -9,14 +9,10 @@
 # File  : fritzbox_smarthome_power_meter.py (check plugin)
 #
 #
-# import time
+
 from time import localtime, time as time_now
 from typing import Dict
-from os import environ
-from pathlib import Path
-from json import loads, dumps
 
-from cmk.checkers import plugin_contexts
 from cmk.base.plugins.agent_based.agent_based_api.v1 import (
     Metric,
     Result,
@@ -27,58 +23,7 @@ from cmk.base.plugins.agent_based.agent_based_api.v1 import (
 )
 from cmk.base.plugins.agent_based.agent_based_api.v1.type_defs import CheckResult, DiscoveryResult
 from cmk.utils.render import physical_precision
-from cmk.base.plugins.agent_based.utils.fritzbox_smarthome import AvmSmartHomeDevice
-
-OMD_ROOT = environ["OMD_ROOT"]
-
-
-class FritzBoxValueStore:
-    """
-    Persistent kind of value_store. Located under ~/var/fritzbox_smarthome/{hostname}_{service_description}
-    """
-    def __init__(self):
-        self._host_name = plugin_contexts.host_name()
-        self._service_description = plugin_contexts.service_description().replace(' ', '_')
-        self._file = Path(f'{OMD_ROOT}/var/firtzbox_smarthome/{self._host_name}_{self._service_description}')
-        self._counters = {}
-        if self._file.exists():
-            self._counters = loads(self._file.read_text())
-        else:
-            self._counters = {}
-
-    def get(self, key: str, default_value: int | str | float | bool | None = None):
-        """
-        Get a value from the value store
-        Args:
-            key: the key in the value store
-            default_value: the default value to return if key not found
-
-        Returns:
-            The value for key from the value store. If key not exists the default_value or None
-        """
-        return self._counters.get(key, default_value)
-
-    def set(self, key: str, value: str | int | float | None) -> None:
-        """
-        Set a value in the value stare. Use "None" as value to remove a key.
-        Args:
-            key: the key in the value store
-            value: the value to set
-        """
-        if value is None:
-            try:
-                self._counters.pop(key)
-            except KeyError:
-                pass
-        else:
-            self._counters[key] = value
-
-    def save(self) -> None:
-        """
-        Save the value_store as json to file
-        """
-        self._file.parent.mkdir(exist_ok=True, parents=True)
-        self._file.write_text(dumps(self._counters))
+from cmk.base.plugins.agent_based.utils.fritzbox_smarthome import AvmSmartHomeDevice, FritzBoxValueStore
 
 
 def discovery_fritzbox_smarthome_voltage_single(
diff --git a/source/agent_based/fritzbox_smarthome_power_socket.py b/source/agent_based/fritzbox_smarthome_power_socket.py
index 3a96807..63439f8 100644
--- a/source/agent_based/fritzbox_smarthome_power_socket.py
+++ b/source/agent_based/fritzbox_smarthome_power_socket.py
@@ -46,14 +46,24 @@ def check_fritzbox_smarthome_power_socket_single(
         return
 
     def _get_status(status: int):
-        _switch_state = {
-            0: 'off',
-            1: 'on',
+        _state = {
+            0: ('off', params.get('state', {}).get('off', 0)),
+            1: ('on', params.get('state', {}).get('on', 0)),
         }
-        return _switch_state.get(status, f'unknown ({status})')
+        return _state.get(status, (f'unknown ({status})', 3))
 
-    yield Result(state=State.OK, summary=f'State: {_get_status(section.switch.state)}')
-    yield Result(state=State.OK, summary=f'Mode: {section.switch.mode}')
+    state_readable, state = _get_status(section.switch.state)
+    yield Result(state=State(state), summary=f'State: {state_readable}')
+
+    def _get_mode(mode: str):
+        _mode = {
+            'manuell': ('manuell', params.get('mode', {}).get('manuell', 0)),
+            'automatic': ('automatic', params.get('mode', {}).get('automatic', 0)),
+        }
+        return _mode.get(mode, (f'unknown ({mode})', 3))
+
+    mode_readable, mode = _get_mode(section.switch.mode)
+    yield Result(state=State(mode), summary=f'Mode: {mode_readable}')
 
 
 def check_fritzbox_smarthome_power_socket_multiple(
@@ -72,7 +82,7 @@ register.check_plugin(
     sections=['fritzbox_smarthome'],
     discovery_function=discovery_fritzbox_smarthome_power_socket_single,
     check_function=check_fritzbox_smarthome_power_socket_single,
-    # check_ruleset_name='fritzbox_smarthome_power_socket',
+    check_ruleset_name='fritzbox_smarthome_power_socket_single',
     check_default_parameters={}
 )
 
@@ -83,6 +93,6 @@ register.check_plugin(
     sections=['fritzbox_smarthome'],
     discovery_function=discovery_fritzbox_smarthome_power_socket_multiple,
     check_function=check_fritzbox_smarthome_power_socket_multiple,
-    # check_ruleset_name='fritzbox_smarthome_power_socket',
+    check_ruleset_name='fritzbox_smarthome_power_socket_multiple',
     check_default_parameters={}
 )
diff --git a/source/agent_based/fritzbox_smarthome_thermostat.py b/source/agent_based/fritzbox_smarthome_thermostat.py
index fcd6244..9828c3c 100644
--- a/source/agent_based/fritzbox_smarthome_thermostat.py
+++ b/source/agent_based/fritzbox_smarthome_thermostat.py
@@ -65,7 +65,7 @@ def check_fritzbox_smarthome_thermostat_single(
 
     if thermostat.temp_target == 126.5:  # == radiator off
         yield Result(state=State.OK, summary=f'Temperature current: {thermostat.temp_current}°C')
-        yield Result(state=State.OK, summary=f'Temperature target: radiator off')
+        yield Result(state=State(params.get('state_off', 0)), summary=f'Temperature target: radiator off')
     else:
         deviation = thermostat.temp_current - thermostat.temp_target
         if deviation == 0:
diff --git a/source/agent_based/utils/fritzbox_smarthome.py b/source/agent_based/utils/fritzbox_smarthome.py
index 25c4b8b..b361852 100644
--- a/source/agent_based/utils/fritzbox_smarthome.py
+++ b/source/agent_based/utils/fritzbox_smarthome.py
@@ -14,6 +14,11 @@
 
 from dataclasses import dataclass
 from typing import Any, List, Dict
+from os import environ
+from pathlib import Path
+from json import loads, dumps
+
+from cmk.checkers import plugin_contexts
 
 
 @dataclass(frozen=True)
@@ -93,6 +98,57 @@ _AVM_TEMPERATURE = 'temperature'
 _AVM_SIMPLE_ON_OFF = 'simpleonoff'
 _AVM_NEXT_CHANGE = 'nextchange'
 
+_OMD_ROOT = environ["OMD_ROOT"]
+
+
+class FritzBoxValueStore:
+    """
+    Persistent kind of value_store. Located under ~/var/fritzbox_smarthome/{hostname}_{service_description}
+    """
+    def __init__(self):
+        self._host_name = plugin_contexts.host_name()
+        self._service_description = plugin_contexts.service_description().replace(' ', '_')
+        self._file = Path(f'{_OMD_ROOT}/var/firtzbox_smarthome/{self._host_name}_{self._service_description}')
+        self._counters = {}
+        if self._file.exists():
+            self._counters = loads(self._file.read_text())
+        else:
+            self._counters = {}
+
+    def get(self, key: str, default_value: int | str | float | bool | None = None):
+        """
+        Get a value from the value store
+        Args:
+            key: the key in the value store
+            default_value: the default value to return if key not found
+
+        Returns:
+            The value for key from the value store. If key not exists the default_value or None
+        """
+        return self._counters.get(key, default_value)
+
+    def set(self, key: str, value: str | int | float | None) -> None:
+        """
+        Set a value in the value stare. Use "None" as value to remove a key.
+        Args:
+            key: the key in the value store
+            value: the value to set
+        """
+        if value is None:
+            try:
+                self._counters.pop(key)
+            except KeyError:
+                pass
+        else:
+            self._counters[key] = value
+
+    def save(self) -> None:
+        """
+        Save the value_store as json to file
+        """
+        self._file.parent.mkdir(exist_ok=True, parents=True)
+        self._file.write_text(dumps(self._counters))
+
 
 def _get_battery_low(device: Dict[str, Any]) -> int | None:
     try:
diff --git a/source/gui/wato/check_parameters/fritzbox_smarthome.py b/source/gui/wato/check_parameters/fritzbox_smarthome.py
index 3dc4c80..cf75d6a 100644
--- a/source/gui/wato/check_parameters/fritzbox_smarthome.py
+++ b/source/gui/wato/check_parameters/fritzbox_smarthome.py
@@ -73,6 +73,11 @@ def _parameter_valuespec_fritzbox_smarthome_thermostat():
                      Integer(title=_('Warning'), default_value=3, unit=_('°C')),
                      Integer(title=_('Critical'), default_value=5, unit=_('°C')),
                  ])),
+            ('state_off',
+             MonitoringState(
+                 title=_('Monitoring state if thermostat is off'),
+                 default_value=0,
+             )),
             ('state_on_error',
              MonitoringState(
                  title=_('Monitoring state on error'),
diff --git a/source/gui/wato/check_parameters/fritzbox_smarthome_power_coscket.py b/source/gui/wato/check_parameters/fritzbox_smarthome_power_coscket.py
new file mode 100644
index 0000000..d22482e
--- /dev/null
+++ b/source/gui/wato/check_parameters/fritzbox_smarthome_power_coscket.py
@@ -0,0 +1,107 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+#
+# License: GNU General Public License v2
+#
+# Author: thl-cmk[at]outlook[dot]com
+# URL   : https://thl-cmk.hopto.org
+# Date  : 2024-01-09
+# File  : fritzbox_smarthome_lock.py (WATO check plugin)
+#
+
+
+from cmk.gui.i18n import _
+from cmk.gui.valuespec import (
+    Dictionary,
+    MonitoringState,
+    TextInput,
+    Alternative,
+)
+from cmk.gui.plugins.wato.utils import (
+    CheckParameterRulespecWithItem,
+    CheckParameterRulespecWithoutItem,
+    RulespecGroupCheckParametersApplications,
+    rulespec_registry,
+)
+
+
+def _parameter_valuespec_fritzbox_smarthome_power_socket():
+    return Dictionary(
+        title=_('Parameter'),
+        elements=[
+            ('state',
+             Alternative(
+                 title=_('Power Socket state'),
+                 elements=[
+                     Dictionary(
+                         title=_('Switched On'),
+                         optional_keys=False,
+                         elements=[
+                             ('on',
+                              MonitoringState(
+                                  title=_('Monitoring state'),
+                                  default_value=0,
+                              )),
+                         ]),
+                     Dictionary(
+                         title=_('Switched off'),
+                         optional_keys=False,
+                         elements=[
+                             ('off',
+                              MonitoringState(
+                                  title=_('Monitoring state'),
+                                  default_value=0,
+                              ))
+                         ]),
+                 ]
+             )),
+            ('mode',
+             Alternative(
+                 title=_('Power Socket switching mode'),
+                 elements=[
+                     Dictionary(
+                         title=_('Manuell'),
+                         optional_keys=False,
+                         elements=[
+                             ('manuell',
+                              MonitoringState(
+                                  title=_('Monitoring state'),
+                                  default_value=0,
+                              )),
+                         ]),
+                     Dictionary(
+                         title=_('Automatic'),
+                         optional_keys=False,
+                         elements=[
+                             ('automatic',
+                              MonitoringState(
+                                  title=_('Monitoring state'),
+                                  default_value=0,
+                              ))
+                         ]),
+                 ]
+             )),
+        ],
+    )
+
+
+rulespec_registry.register(
+    CheckParameterRulespecWithoutItem(
+        check_group_name="fritzbox_smarthome_power_socket_single",
+        group=RulespecGroupCheckParametersApplications,
+        match_type="dict",
+        parameter_valuespec=_parameter_valuespec_fritzbox_smarthome_power_socket,
+        title=lambda: _('Fritz!Box Smarthome Power socket')
+    )
+)
+
+rulespec_registry.register(
+    CheckParameterRulespecWithItem(
+        check_group_name="fritzbox_smarthome_power_socket_multiple",
+        group=RulespecGroupCheckParametersApplications,
+        match_type="dict",
+        parameter_valuespec=_parameter_valuespec_fritzbox_smarthome_power_socket,
+        title=lambda: _('Fritz!Box Smarthome Power Socket (with Device-ID)'),
+        item_spec=lambda: TextInput(title=_('Device-ID')),
+    )
+)
diff --git a/source/packages/fritzbox_smarthome b/source/packages/fritzbox_smarthome
index bd5b1eb..adf1f52 100644
--- a/source/packages/fritzbox_smarthome
+++ b/source/packages/fritzbox_smarthome
@@ -44,7 +44,8 @@
                    'metrics/fritzbox_smarthome.py',
                    'wato/check_parameters/temperature_single.py',
                    'wato/check_parameters/voltage_single.py',
-                   'wato/check_parameters/fritzbox_smarthome_lock.py'],
+                   'wato/check_parameters/fritzbox_smarthome_lock.py',
+                   'wato/check_parameters/fritzbox_smarthome_power_coscket.py'],
            'lib': ['python3/cmk/special_agents/agent_fritzbox_smarthome.py'],
            'web': ['plugins/wato/agent_fritzbox_smarthome.py',
                    'plugins/views/fritzbox_smarthome.py']},
-- 
GitLab