manuelle / automatische Bedienung

Begonnen von Per, 15 April 2016, 18:28:07

Vorheriges Thema - Nächstes Thema

Per

Nachdem doch einige (u.a. ich ;)) Probleme mit den Unterscheiden zwischen manueller und automatischer Bedienung von Geräten haben, stelle ich mal den Versuch einer Lösung vor:

54_MANU.pm

Aufruf einfach mit
define <name> MANU <targetdevice>
Ändert sich der Status des <targetdevice> (am Gerät oder direkt geändert), geht das Modul von einer manuellen Betätigung aus, wird über Modul betätigt, von einer automatischen.
Über folgende Attribute lässt sich das Modul steuern:

  • Cmd <aus:an>: Änderung der Standardbefehle off/on in aus/an.
  • Cmd <aus,0:an,100:dunkel:50>: Änderung der Standardbefehle off/on in aus/an/dunkel und prüfen des Gerätestatus auf 0/100/50
  • IconPrefix <xxx>: Nutzen der vier Icons xxxmanu_on.png, xxxmanu_off.png, xxxauto_on.png und xxxauto_off.png (control) bzw. der zwei Icons xxxmanu.png und xxxauto.png (view). Ein Punkt bzw. Unterstrich im Prefix zu setzen ist angebracht.
  • IconState <control>|<view>: als control kann das Modul aktiv (Webfrontend) das Targetdevice steuern, als view nur über set(bzw. Source-Notify). Interessant, um mittels Rahmen den Status das Targetdevice anzuzeigen.
  • Source <device>: Device, welches überwacht wird zum Setzen des Targetdevice
  • SourceCmd <aus:an>: ähnlich wie Cmd, aber das Source-Device betreffend. Die Abbildung der Befehle erfolgt 1:1 in gleicher Reihenfolge wie bei Cmd: SourceCmd[0] => Cmd[0]; SourceCmd[n] => Cmd[n]
  • TimerAuto <sek>: erst nach ab von sek Sekunden kann (!) das Targetdevice wieder automatisch betätigt werden.
  • TimerEnd <sek>: nach sek Sekunden wird das Targetdevice auf den aktuellen automatischen Status geschaltet.
TimerAuto und TimerEnd können jeweils 0 sein, TimerEnd startet erst nach TimerAuto.
Beide Zeiten werden als reading abgelegt, TimerEnd dürfte aber, als InternalTimer nicht rebootfest sein (falls Fhem da nichts vorgesehen hat).

Mittels
Cmd kipp,100|zu,locked
TimerAuto 300
TimerEnd 300

kann man z.B. ein Fenster 10 lang geöffnet lassen, wobei es 5 min mindestens offen ist.
Bei meinem WinMatic habe ich ohnehin
attr .*.Window.cul.Win eventMap /level lock ignore 100:zu/level 100 ignore 100:kipp/
attr .*.Window.cul.Win webCmd zu:kipp

definiert gehabt, da passte das.

Per

#1
Hm, ein Problem machen z.Zt. die GHoma, weil die neben dem state noch ein source liefern. Aber eigentlich sollte das abgefangen werden, weiss nicht, warum das durchkommt.

Tante Edit hat die Ursache: Regex-Fehler.
Muss noch nen bisschen testen. Dann kommt die Version 0.9a ;)

Per

#2
So, o.a. Fehler beseitigt, dazu kommt ein neuer Befehl:
set XXX auto
setzt auf den Automatik-State, auch innerhalb der TimerAuto-Zeit. Die Timer werden dabei zurückgesetzt.

PS: die aktuelle Version findet sich in Post 1.

Per

Neue Version: benötigt kein set mehr, sondern kann andere Devices (Thermometer?) triggern.
set geht natürlich immer noch.
Leider eine kleine Inkompatibilität zum Vorgänger: statt Cmd on(,ein)|off(,aus) muss jetzt Cmd off(,aus):on(,ein)(:x2(,y2) geschrieben werden.
Grund sind interne Vereinfachung und Vorbereitungen zu Erweiterungen.
Der erste Term ist die Grundstellung (aus, zu...) und wird bei Problemen oder Fehlern angesteuert. Eine Notbeleuchtung sollte da natürlich an/on/ein haben ;).
Aktuelle Version wie immer im ersten Beitrag.

reinni123

Nach Umzug auf ein frisches Raspbian Stretch System funktioniert das Modul nicht mehr. Ich bekomme folgende Fehlermeldungen:

017.10.01 00:56:50 1: reload: Error:Modul 54_MANU deactivated: Can't use a hash as a reference at ./FHEM/54_MANU.pm line 136 <$fh> line 497.
2017.10.01 00:56:50 0: Can't use a hash as a reference at ./FHEM/54_MANU.pm line 136, <$fh> line 497.
2017.10.01 00:56:50 1: PERL WARNING: Subroutine MANU_Initialize redefined at ./FHEM/54_MANU.pm line 22, <$fh> line 521.
2017.10.01 00:56:50 1: PERL WARNING: Subroutine MANU_Define redefined at ./FHEM/54_MANU.pm line 37, <$fh> line 521.
2017.10.01 00:56:50 1: PERL WARNING: Subroutine MANU_Undef redefined at ./FHEM/54_MANU.pm line 52, <$fh> line 521.
2017.10.01 00:56:50 1: PERL WARNING: Subroutine MANU_Attr redefined at ./FHEM/54_MANU.pm line 56, <$fh> line 521.
2017.10.01 00:56:50 1: PERL WARNING: Subroutine MANU_Set redefined at ./FHEM/54_MANU.pm line 91, <$fh> line 521.
2017.10.01 00:56:50 1: PERL WARNING: Subroutine MANU_Get redefined at ./FHEM/54_MANU.pm line 106, <$fh> line 521.


Hab ich was vergessen zu installieren?


mrbreil

Ich würde das Modul auch gerne mal ausprobieren. Die Beschreibung klingt genau nach dem was ich Suche. Leider bekomme ich genau den selben Fehler.
In diesem Thread ist zwar schon lange nix mehr passiert, aber vielleicht habe ich ja Glück.
Vielleicht hat ja der Modulautor auch einen anderen Weg gefunden diese Funktion abzubilden, bitte teile deine Weisheit mit uns  ;).

Gruß Christian

CoolTux

line 136 ändern in

my $TransEvent = %{$Cmd_hash->{$event}};

Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

betateilchen

Zitat von: reinni123 am 01 Oktober 2017, 01:38:10
Nach Umzug auf ein frisches Raspbian Stretch System funktioniert das Modul nicht mehr. Ich bekomme folgende Fehlermeldungen:

....

Hab ich was vergessen zu installieren?

Nein, die Meldungen resultieren aus schlechtem Programmierstil.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

mrbreil

Zitat von: CoolTux am 15 Oktober 2018, 09:01:45
line 136 ändern in

my $TransEvent = %{$Cmd_hash->{$event}};


Hallo Cooltux, danke das du dich meiner annimmst. Es hat aber leider nicht funktioniert.

2018.10.15 14:24:22 1: reload: Error:Modul 54_MANU deactivated:
Global symbol "$Cmd_hash" requires explicit package name (did you forget to declare "my $Cmd_hash"?) at ./FHEM/54_MANU.pm line 136.

2018.10.15 14:24:22 0: Global symbol "$Cmd_hash" requires explicit package name (did you forget to declare "my $Cmd_hash"?) at ./FHEM/54_MANU.pm line 136.

CoolTux

Sorry mein Fehler


my $TransEvent = $Cmd_hash{$event};


Der Zeiger hatte mich irritiert.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

mrbreil

Vielen Dank CoolTux.  Das mit dem Zeiger kapier ich zwar gerade nicht, aber es funktioniert.
Werde jetzt testen, es das so macht wie ich es mir Vorstelle.

Gruß Christian