Skip to content

Commit

Permalink
Merge branch 'smarthomeNG:develop' into develop
Browse files Browse the repository at this point in the history
  • Loading branch information
CannonRS authored Dec 30, 2023
2 parents 5c5ffdb + 97b8f0c commit c32ef7b
Show file tree
Hide file tree
Showing 24 changed files with 245 additions and 1,122 deletions.
3 changes: 1 addition & 2 deletions avm/requirements.txt
Original file line number Diff line number Diff line change
@@ -1,2 +1 @@
requests
lxml>=4.9.2
lxml>=4.9.2,<=4.9.4
File renamed without changes
7 changes: 3 additions & 4 deletions kodi/user_doc.rst
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ Damit ist die alte Item-Struktur 1:1 übernommen und nutzt die neuen Funktionen.
Wenn die Items einzeln erstellt und konfiguriert wurden, muss die alte Item-Konfiguration
manuell umgestellt werden, indem die entsprechenden Item-Attribute des kodi-Plugins ersetzt werden.

.. code-block:: yaml
.. code-block:: yaml
kodi:
volume:
Expand Down Expand Up @@ -92,8 +92,7 @@ Konfiguration
Hinweise zu Verbindungen
========================

Über die plugin-Parameter `connect_retries` (Anzahl) und `connect_cycle (Wartezeit) kann eingestellt werden, wie oft das Plugin versucht, eine Verbindung zu Kodi aufzubauen.
Über die plugin-Parameter `connect_retries` (Anzahl) und `connect_cycle` (Wartezeit) kann eingestellt werden, wie oft das Plugin versucht, eine Verbindung zu Kodi aufzubauen.

Das weitere Verhalten wird über die Parameter `retry_cycle` (Wartezeit) und `retry_suspend` (Anzahl Zyklen) eingestellt. Nach Ablauf dieser Versuche wartet das Plugin 30 Sekunden (bzw. die in `retry_cycle` eingestellte Zeit), bevor das Ganze wiederholt wird. Wenn `retry_suspend` gesetzt ist, wechselt das Plugin nach dieser Anzahl von `retry_cycles` in den Suspend-Modus und beendet die Verbindungsversuche.
Das weitere Verhalten wird über die Parameter `retry_cycle` (Wartezeit) und `retry_suspend` (Anzahl Zyklen) eingestellt. Nach Ablauf dieser Versuche wartet das Plugin 30 Sekunden (bzw. die in `retry_cycle` eingestellte Zeit), bevor das Ganze wiederholt wird. Wenn `retry_suspend` gesetzt ist, wechselt das Plugin nach dieser Anzahl von `retry_cycles` in den Suspend-Modus und beendet die Verbindungsversuche.
Um den Suspend-Modus zu beenden, kann mit dem Plugin-Attribut `suspend_item` ein Item konfiguriert werden, mit dem der Suspend-Modus ein- und ausgeschaltet werden kann. Alternativ stehen die Plugin-Funktionen `suspend()` und `resume()` zur Verfügung.

86 changes: 7 additions & 79 deletions mailsend/user_doc.rst
Original file line number Diff line number Diff line change
@@ -1,11 +1,9 @@
.. index:: Plugins; sample
.. index:: sample
.. index:: Plugins; mailsend
.. index:: mailsend

======
sample
======

Hier sollte eine allgemeine Beschreibung stehen, wozu das Plugin gut ist (was es tut).
========
mailsend
========

.. image:: webif/static/img/plugin_logo.png
:alt: plugin logo
Expand All @@ -15,84 +13,14 @@ Hier sollte eine allgemeine Beschreibung stehen, wozu das Plugin gut ist (was es
:align: left


Anforderungen
=============

Anforderungen des Plugins auflisten. Werden spezielle Soft- oder Hardwarekomponenten benötigt?


Notwendige Software
-------------------

* die
* benötigte
* Software
* auflisten

Dies beinhaltet Python- und SmartHomeNG-Module

Unterstützte Geräte
-------------------

* die
* unterstütze
* Hardware
* auflisten

|
Konfiguration
=============

Die Plugin Parameter und die Informationen zur Item-spezifischen Konfiguration des Plugins sind
unter :doc:`/plugins_doc/config/sample` beschrieben.

plugin.yaml
-----------

Bitte die Dokumentation lesen, die aus den Metadaten der plugin.yaml erzeugt wurde.


items.yaml
----------

Bitte die Dokumentation lesen, die aus den Metadaten der plugin.yaml erzeugt wurde.
unter :doc:`/plugins_doc/config/mailsend` beschrieben.


logic.yaml
----------

Bitte die Dokumentation lesen, die aus den Metadaten der plugin.yaml erzeugt wurde.


Funktionen
----------

Bitte die Dokumentation lesen, die aus den Metadaten der plugin.yaml erzeugt wurde.

|
Beispiele
=========

Hier können ausführlichere Beispiele und Anwendungsfälle beschrieben werden. (Sonst ist der Abschnitt zu löschen)

|
Web Interface
=============

Die Datei ``dev/sample_plugin/webif/templates/index.html`` sollte als Grundlage für Webinterfaces genutzt werden. Um Tabelleninhalte nach Spalten filtern und sortieren zu können, muss der entsprechende Code Block mit Referenz auf die relevante Table ID eingefügt werden (siehe Doku).

SmartHomeNG liefert eine Reihe Komponenten von Drittherstellern mit, die für die Gestaltung des Webinterfaces genutzt werden können. Erweiterungen dieser Komponenten usw. finden sich im Ordner ``/modules/http/webif/gstatic``.

Wenn das Plugin darüber hinaus noch Komponenten benötigt, werden diese im Ordner ``webif/static`` des Plugins abgelegt.

|
Version History
===============

In diesem Abschnitt kann die Versionshistorie dokumentiert werden, falls der Plugin Autor dieses möchte. Diese Abschnitt
ist optional.

Das Plugin verfügt über kein Web Interface.
52 changes: 46 additions & 6 deletions nuki/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@


class Nuki(SmartPlugin):
PLUGIN_VERSION = "1.6.1"
PLUGIN_VERSION = "1.6.3"

def __init__(self, sh, *args, **kwargs):

Expand Down Expand Up @@ -103,14 +103,13 @@ def run(self):
self._clear_callbacks()
self.scheduler_add(__name__, self._scheduler_job, prio=3, cron=None, cycle=300, value=None,
offset=None, next=None)

self._register_callback()
self.alive = True

def _scheduler_job(self):
# will also be executed at start
self._get_paired_nukis()
self._register_callback()
self._get_nuki_status()
self._get_nuki_status_via_list()

def stop(self):
self.alive = False
Expand Down Expand Up @@ -161,11 +160,39 @@ def update_item(self, item, caller=None, source=None, dest=None):
if response is not None:
if response['success']:
# self._get_nuki_status()
self.logger.info(
self.logger.debug(
"Plugin '{0}': update item: {1}".format(self.get_shortname(), item.property.path))
# immediatly update lock state via list, to e.g. the status information that lock is locking
self._get_nuki_status_via_list()
else:
self.logger.error("Plugin '{}': no response.".format(self.get_shortname()))

@staticmethod
def update_lock_state_via_list(nuki_id, nuki_data):
nuki_battery = None
nuki_state = None
nuki_doorstate = None

lock_state=nuki_data['lastKnownState']

if 'state' in lock_state:
nuki_state = lock_state['state']
if 'doorsensorState' in lock_state:
nuki_doorstate = lock_state['doorsensorState']
if 'batteryCritical' in lock_state:
nuki_battery = 0 if not lock_state['batteryCritical'] else 1

for item, key in nuki_event_items.items():
if key == nuki_id:
item(nuki_state, 'NUKI')
for item, key in nuki_door_items.items():
if key == nuki_id:
item(nuki_doorstate, 'NUKI')
for item, key in nuki_battery_items.items():
if key == nuki_id:
item(nuki_battery, 'NUKI')


@staticmethod
def update_lock_state(nuki_id, lock_state):

Expand Down Expand Up @@ -244,6 +271,20 @@ def _register_callback(self):
"Plugin '{}': No callback ip set. Automatic Nuki lock status updates not available.".format
(self.get_shortname()))

def _get_nuki_status_via_list(self):
self.logger.info("Plugin '{}': Getting Nuki status ...".format
(self.get_shortname()))

response = self._api_call(self._base_url, endpoint='list', token=self._token,
no_wait=self._noWait)
if response is None:
self.logger.info("Plugin '{}': Getting Nuki status ... Response is None.".format(self.get_shortname()))
return
for nuki_id in paired_nukis:
for nuki_data in response:
if nuki_data['nukiId'] == int(nuki_id):
Nuki.update_lock_state_via_list(nuki_id, nuki_data)

def _get_nuki_status(self):
self.logger.info("Plugin '{}': Getting Nuki status ...".format
(self.get_shortname()))
Expand Down Expand Up @@ -387,7 +428,6 @@ def index(self):
self.plugin.logger.debug(
"Plugin '{pluginname}' - NukiWebServiceInterface: Status Smartlock: ID: {nuki_id} Status: {state_name}".
format(pluginname=self.plugin.get_shortname(), nuki_id=nuki_id, state_name=state_name))

Nuki.update_lock_state(nuki_id, input_json)
except Exception as err:
self.plugin.logger.error(
Expand Down
2 changes: 1 addition & 1 deletion nuki/plugin.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ plugin:
# documentation: https://github.com/smarthomeNG/smarthome/wiki/CLI-Plugin # url of documentation (wiki) page
support: https://knx-user-forum.de/node/1052437

version: 1.6.1 # Plugin version
version: 1.6.3 # Plugin version
sh_minversion: 1.9.0 # minimum shNG version to use this plugin
# sh_maxversion: # maximum shNG version to use this plugin (leave empty if latest)
multi_instance: False # plugin supports multi instance
Expand Down
24 changes: 10 additions & 14 deletions resol/user_doc.rst
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,8 @@ Allgemein

Resol plugin, mit Unterstützung für Resol Solar Datenlogger, Frischwasserwärmetauscher und Regler.

http://www.resol.de/index/produktdetail/kategorie/4/id/8/sprache/de

http://www.cosmo-info.de/fileadmin/user_upload/DL/COSMO-Solarregelung/COSMO-Multi.pdf
`Resol Webseite <http://www.resol.de/index/produktdetail/kategorie/4/id/8/sprache/de>`_
`Cosmo Solarregelung <http://www.cosmo-info.de/fileadmin/user_upload/DL/COSMO-Solarregelung/COSMO-Multi.pdf>`_


Konfiguration
Expand Down Expand Up @@ -53,7 +52,7 @@ Beispiel
enforce_updates: 'true'
resol_offset: 2
resol_bituse: 15
resol_factor:
resol_factor:
- '0.1'
- '25.6'
Expand All @@ -63,7 +62,7 @@ Beispiel
enforce_updates: 'true'
resol_offset: 28
resol_bituse: 48
resol_factor:
resol_factor:
- '1'
- '256'
- '1000'
Expand Down Expand Up @@ -93,15 +92,13 @@ Beispiel
database_maxage: 62
resol_offset@solar: 0
resol_bituse@solar: 16
resol_factor@solar:
resol_factor@solar:
- '0.1'
- '25.6'
resol_isSigned@solar:
- False
- True
Resol Protokoll
===============

Expand All @@ -110,23 +107,22 @@ Informationen

Weitere Informationen zu Resol Parametern und Quellen sind hier zu finden:

https://github.com/danielwippermann/resol-vbus

https://danielwippermann.github.io/resol-vbus/#/vsf
`Github <https://github.com/danielwippermann/resol-vbus>`_
`Daniel Wippermann <https://danielwippermann.github.io/resol-vbus/#/vsf>`_

Über die Installation der Resol Software Service Center können weitere Offsets und Bitmasken ausgelesen werden.
Diese werden im XML Format von RESOL als Teil der RSC Software (Resol Service Center) bereitgestellt. Hierzu
einfach download, installieren (unter Linux ``wine`` nutzen) und die benötigten XML Dateien von hier beziehen: {Install_dir}/eclipse/plugins/de.resol.servicecenter.vbus.resol_2.0.0/ -

Synch byte zwischen verschiedenen Messages: 0xAA
Sync byte zwischen verschiedenen Messages: 0xAA

Message:
=============== =========================================================================
Byte(s) Inhalt
Byte(s) Inhalt
=============== =========================================================================
0-1 Destination
2-3 Source
4 Protocol Version, 0x10 -> "PV1", 0x20 -> "PV2", 0x30 -> "PV3"
4 Protocol Version, 0x10 -> "PV1", 0x20 -> "PV2", 0x30 -> "PV3"
5-6 Command
7-8 Frame count, Example 0x1047-> 104 bytes
=============== =========================================================================
19 changes: 1 addition & 18 deletions smartvisu/tplNG/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -12,26 +12,9 @@

{% block sidebar %}

{% import "lib.html" as lib %}
{{ lib.updatecheck() }}

{% import "clock.html" as clock %}
{{ clock.digiclock('clock') }}

<div class="center">
{{ now|smartdate('l') }}, {{ now|smartdate() }}
</div>

<hr>

{% import "weather.html" as weather %}
{{ weather.current('weather') }}

<hr>

{{ weather.forecastweek('weather_forecast') }}

<hr>
{% include 'infoblock.html' %}

{% endblock %}

Expand Down
2 changes: 0 additions & 2 deletions smartvisu/tplNG/infoblock.html
Original file line number Diff line number Diff line change
Expand Up @@ -10,15 +10,13 @@
* -----------------------------------------------------------------------------
*/

{% import "clock.html" as clock %}
{{ clock.digiclock('clock') }}

<div class="center">
{{ clock.miniclock('', 'l, ' ~ lang('format','date') ) }}
</div>

<hr>
{% import "weather.html" as weather %}
{{ weather.current('weather') }}

<hr>
Expand Down
2 changes: 1 addition & 1 deletion sml/plugin.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ plugin:
en: 'Read data from powermeter device using SML protocol'
maintainer: ohinckel
tester: '?' # Who tests this plugin?
state: ready
state: deprecated
# keywords: iot xyz
documentation: http://smarthomeng.de/user/plugins_doc/config/sml.html
# support: https://knx-user-forum.de/forum/supportforen/smarthome-py
Expand Down
1 change: 1 addition & 0 deletions sml/tests/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@ def plugin(self):

self.sh = MockSmartHome()
plugin = Sml(self.sh)
plugin.alive = True
plugin.connect()
plugin.data = SmlPacketReader()
plugin._serial = plugin.data
Expand Down
6 changes: 3 additions & 3 deletions solarforecast/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@


class Solarforecast(SmartPlugin):
PLUGIN_VERSION = '1.9.2'
PLUGIN_VERSION = '1.9.3'

def __init__(self, sh):
"""
Expand All @@ -53,8 +53,8 @@ def __init__(self, sh):
self.longitude = self.get_parameter_value('longitude')
else:
self.logger.debug("__init__: latitude and longitude not provided, using shng system values instead.")
self.latitude = self.get_sh().lat
self.longitude = self.get_sh().lon
self.latitude = self.get_sh()._lat
self.longitude = self.get_sh()._lon

self.declination = self.get_parameter_value('declination')
self.azimuth = self.get_parameter_value('azimuth')
Expand Down
Loading

0 comments on commit c32ef7b

Please sign in to comment.