Scrounger / ioBroker.linkeddevices

Create linked objects (datapoints) of your devices with a self-defined structure. This makes it possible to create a structure in ioBroker, where all objects are centralized, e.g. to be used in the vis or scripts.
https://forum.iobroker.net/topic/22301/neuer-adapter-linkeddevices
MIT License
17 stars 11 forks source link

[Feature Request] Debounce/Delay beim Übertragen? #11

Closed Xyolyp closed 5 years ago

Xyolyp commented 5 years ago

Es wäre stellenweise für mich von Vorteil, wenn beim Übertragen von Werten einstellbar wäre, dass für x Zeiteinheiten der Wert ein bestimmter sein muss, damit der virtuelle Datenpunkt auf diesen gestellt wird. Bei booleans würde das bedeuten, dass gewählt werden kann, dass der Quelldatenpunkt mindestens x Zeiteinheiten auf einem bestimmten Wert stehen muss, damit der virtuelle Datenpunkt umgestellt wird. Wenn in der Zwischenzeit einmal der Quelldatenpunkt auf den anderen Wert und zurück wechselt sollte der virtuelle Datenpunkt das Timeout erneut beginnen. Wenn der Quell- und der virtuelle Datenpunkt beide auf dem eingestellten Wert sind, weil das Timeout abgelaufen ist und der Quelldatenpunkt auf den anderen wechselt soll der virtuelle Datenpunkt sofort auf den neuen Wert wechseln. Konkretes Beispiel: Die Anwesenheitserkennung setzt sporadisch für 30 Sekunden aus. Wenn ich einstelle, dass der Quelldatenpunkt eine Minute false sein muss, damit der virtuelle Datenpunkt auf false wechselt sind diese kurzen Ausfälle somit herausgefiltert und der virtuelle Datenpunkt bleibt auf true stehen bis ich länger als eine Minute am Stück abwesend bin. Beispiel für Zahlwerte: Hier stelle ich es mir so vor, dass wählbar ist, ob ein Wert beim größer oder beim kleiner werden träge ist. Ich erfasse den Stromverbrauch meiner Waschmaschine, welche fertig ist, wenn sie mindestens eine Minute unter 3 Watt verbraucht. Es kommt immer wieder vor, dass sie für unter 10 Sekunden unter 3 Watt verbraucht. Wenn also eingestellt werden würde, dass ein Wert für mindestens 60 Sekunden niedrig sein muss, damit er sinkt würde folgendes passieren: Start um Mitternacht (00:00:00 Uhr): gemessen 100, virtueller Datenpunkt: 100 00:10:00 Uhr: gemessen 50, virtueller Datenpunkt 100 (Timer startet) 00:10:30 Uhr: gemessen 90, virtueller Datenpunkt 100 (Timer zur Hälfte abgelaufen, zweiter Timer für 90 startet) 00:11:00 Uhr: gemessen 90, virtueller Datenpunkt wechselt auf 90, da der Wert seit einer Minute unter oder auf 90 ist. 00:11:30 Uhr gemessen 50, virtueller Datenpunkt bleibt auf 90, Timer für 50 wird gestartet 00:12:00 Uhr: gemessen 1000, virtueller Datenpunkt wechselt sofort auf 1000, da der Wert größer als vorher ist. 00:15:00 Uhr: gemessen 100, virtueller Datenpunkt bleibt auf 1000, Timer startet 00:15:30 Uhr: gemessen 10, virtueller Datenpunkt bleibt auf 1000, zweiter Timer startet 00:15:45 Uhr: gemessen 100, virtueller Datenpunkt bleibt auf 1000, zweiter Timer wird abgebrochen, da der Wert wieder so hoch ist wie vor der Änderung, die zum Starten des Timers geführt hat. 00:16:00 Uhr gemessen 200, virtueller Datenpunkt wechselt auf 200, da der Wert eine Minute unter 1000 war und 200 der höchste Wert innerhalb der Zeitspanne war.

Ich hoffe es ist klar geworden was ich mir wünsche. Sollte irgendetwas unklar sein einfach nachfragen. Ob dieses Scenario durch diesen Adapter abgedeckt werden sollte oder nicht überlasse ich dem Entwickler. Aktuell habe ich ein "dummes" Skript, dass bei meiner Waschmaschine nur prüft, ob der Verbrauch der Waschmaschine länger als eine Minute auf oder unter 3 Watt ist. Das Skript könnte vollständig durch diesen Adapter ersetzt werden. Ein Datenpunkt überträgt den Verbrauch mit Trägheit und ein anderer Datenpunkt wandelt diesen dann in einen Boolean um, wenn der Wert auf oder unter 3 ist.

Scrounger commented 5 years ago

Sorry aber das ist nicht die Idee bzw. Konzept für den Adapter, da der Adapter dafür gedacht ist immer den verlinkten datenpunkt abzubilden, ggf. mit einer Konvertierung.

Das beschriebene Szenario von Dir kenne ich sehr genau ;) Ich hab das wie folgt gelöst:

  1. Hab mir einen verlinkten DP der Energie der Waschmine erstellt.
  2. Diesen nutze ich dann in einem Javascript um so ein ähnliches reagieren wie von dir beschrieben zu realisieren. Das Skript erstellt und aktualisert dann einen weiteren DP
  3. Für diesen habe ich dann wieder einen verlinkten DP erstellt.

Vorteil, sollte man mal die Hardware tauschen, musst du nur den DP unter 1. wieder neu verlinken und alles geht wieder. Wenn du es richitg smart machen willst, dann zeichne die Energieaufnahme jedes einzelnen Waschprogrammes, analyisiere diese und schreib dir ein entsprechendes Skript ;)