Gerätekonfiguration als sub ablegen

Begonnen von wkarl, 01 Juli 2013, 08:29:03

Vorheriges Thema - Nächstes Thema

wkarl

Hallo Marc,

danke für den Tipp. Hab das PDF gekauft und gleich folgende Erkenntnis gewonnen.

Zitat3) wenn du die Conditiontable ausschalten willst solltest du shCtValLo = 0 und alle CT entries auf geLo setzen

mit
set Markise regSet lgActionType Schalter_Terasse_Btn_01
geht es einfacher.

ciao walter
FHEM 5.7 & TabletUI 2.2 auf Fedora22 Server auf NUC5i5RYK
CUL 868 > FAST EnergyCam
HMLAN > HomeMatic TCs & VDs, Bewegungsmelder, Schalter, Taster, Steckdosen

martinp876

Hallo Walter,

Zitatset Markise regSet lgActionType Schalter_Terasse_Btn_01
verstehe ich nicht. der Parameter fuer lgActionType fehlt.

Auch das Ziel verstehen ich nicht. ConditionTable und JumpTable sid Grundverschieden. Was willst du erreichen?
Wenn du einen trigger komplett ignorieren willst musst du
   lgActionType off
setzen - also keinen "lang" trigger DIESER quelle
wenn du die ganze Quelle ignorieren willst, dann auch noch short:
   shActionType off

Beim Schreiben merke ich, wir brauchen erst einmal Begriffe
TriggerQuelle: ein Button oder ein MDIR... - jeweils ein SensorKanal
TriggerTyp: long oder short (MDIR und ein paar Buttons koennen nur short!)
TriggerParam: ein MDIR gibt die Helligkeit im Trigger mit. Buttons natuerlich nicht.

Einer TriggerQuelle ist ein ganzer Satz register zugeordnet. Die Haelfte dem Typ short und die andere long.
Wenn der Trigger kommt wird  ueber ActionType primaer die Reaktion festgelegt. Nur wenn es jumpToTarget ist, ist auch die jumptable integessant. Bei "off" wird der Trigger ignoriert.
EGAL was in ActionType steht - der Actor arbeitet immer noch in seiner statemachine. Auch wenn die Spezial-Spruenge nicht genutzt werden - "ActionType ne jumpToTarget". Ohne statemachine geht es nie.

Bevor das Ganze ausgewertet wird - und wenn der Trigger einen TriggerParam mitbringt - wird in der ConditionTable geprueft, ob der Trigger gueltig ist. Also je nachdem in welchen State der Aktor bei eintreffen des Triggers gerade ist wird geschaut welche condition-bedingung genutzt werden muss (eine ist es immer).
Ist also der Aktor in 'on' und es kommt ein short-trigger wird in shCtOn nachgesehen. Steht da geLo wird eben geprueft, ob der TriggerParam groesser als der shCtValLo ist. Nur wenn die Bedingung stimmt!!! ist der Trigger gueltig - ansonsten wird er verworfen.

CtValLo und shCtValHi sind nur Namen. Man kann (siehe Bedingungen) beide als obere oder untere Grenze nutzen.
Wenn ich also die Condition-table nicht nutzen will sollte ich erreichen, dass die Bedingung immer wahr ist. Wenn ich den Trigger nicht nutzen will sollte ich mich an ActionType halten.

Hoffe, man kann es verstehen.

Gruss Martin



martinp876

Hallo Walter,

Zitatset Markise regSet lgActionType Schalter_Terasse_Btn_01
verstehe ich nicht. der Parameter fuer lgActionType fehlt.

Auch das Ziel verstehen ich nicht. ConditionTable und JumpTable sid Grundverschieden. Was willst du erreichen?
Wenn du einen trigger komplett ignorieren willst musst du
   lgActionType off
setzen - also keinen "lang" trigger DIESER quelle
wenn du die ganze Quelle ignorieren willst, dann auch noch short:
   shActionType off

Beim Schreiben merke ich, wir brauchen erst einmal Begriffe
TriggerQuelle: ein Button oder ein MDIR... - jeweils ein SensorKanal
TriggerTyp: long oder short (MDIR und ein paar Buttons koennen nur short!)
TriggerParam: ein MDIR gibt die Helligkeit im Trigger mit. Buttons natuerlich nicht.

Einer TriggerQuelle ist ein ganzer Satz register zugeordnet. Die Haelfte dem Typ short und die andere long.
Wenn der Trigger kommt wird  ueber ActionType primaer die Reaktion festgelegt. Nur wenn es jumpToTarget ist, ist auch die jumptable integessant. Bei "off" wird der Trigger ignoriert.
EGAL was in ActionType steht - der Actor arbeitet immer noch in seiner statemachine. Auch wenn die Spezial-Spruenge nicht genutzt werden - "ActionType ne jumpToTarget". Ohne statemachine geht es nie.

Bevor das Ganze ausgewertet wird - und wenn der Trigger einen TriggerParam mitbringt - wird in der ConditionTable geprueft, ob der Trigger gueltig ist. Also je nachdem in welchen State der Aktor bei eintreffen des Triggers gerade ist wird geschaut welche condition-bedingung genutzt werden muss (eine ist es immer).
Ist also der Aktor in 'on' und es kommt ein short-trigger wird in shCtOn nachgesehen. Steht da geLo wird eben geprueft, ob der TriggerParam groesser als der shCtValLo ist. Nur wenn die Bedingung stimmt!!! ist der Trigger gueltig - ansonsten wird er verworfen.

CtValLo und shCtValHi sind nur Namen. Man kann (siehe Bedingungen) beide als obere oder untere Grenze nutzen.
Wenn ich also die Condition-table nicht nutzen will sollte ich erreichen, dass die Bedingung immer wahr ist. Wenn ich den Trigger nicht nutzen will sollte ich mich an ActionType halten.

Hoffe, man kann es verstehen.
Gruss Martin

wkarl

Hallo Martin,

mein Fehler
Zitatset Markise regSet lgActionType off Schalter_Terasse_Btn_01
muss es natürlich heißen.

Es soll damit erreicht werden, dass alle lg-TriggerTypen ausgeschalten werden. Habe dies für alle Triggerquellen gesetzt. Warum? Meine drei Mädchen sind leider nicht so technikbegeistert. Also muss ich mögliche Fehlerquellen/Fehlverhalten weitestgehend ausschließen ;-)

Und noch ein Fehler meinerseits. Du hast Recht, die CTs der sh-TriggerTypen explizit zu behandeln.

Du schreibst in Deiner vorherigen note, den CtValLo auf 0 zu setzen und die Cts mit ge zu prüfen. Müsste es nicht lt sein, damit die Überprüfung immer negativ ist?

ciao walter
FHEM 5.7 & TabletUI 2.2 auf Fedora22 Server auf NUC5i5RYK
CUL 868 > FAST EnergyCam
HMLAN > HomeMatic TCs & VDs, Bewegungsmelder, Schalter, Taster, Steckdosen

martinp876

Hallo Walter,

CT<state> geLo
TriggerParam groesser als CtValLo
TriggerParam groesser als 0
==> das ist immer wahr, es werden also keine Trigger unterdrueckt.

Alternativ sollte

CtValLo = 255
CT<state> ltLo
dann ist
TriggerParam <ltLo fuer alle TriggerParam [0-255[  - oder bei integer:TriggerParam [0-254]

identisches bewirken - nur wenn TriggerParam = 255 waere klappt es nicht (lt, nicht le!)
255 ist aber unwahrscheinlich, da HM bisher bei 200 aufhoert.


martinp876

Hallo Walter,

ich habe gerade in HMinfo eine "template" Methode eingebaut. Hatte so etwas in der Art schon länger vor... und duhast mir jetzt den Anschub gegeben.
Die Beschreibung der Kommandos ist in HMinfo vorhanden. Zum Überblick:
man kann
- templateDef: definieren
- templateLst: definierte templates anzeigen
- templateChk: prüfen, ob ein Device/peering dem Template entspricht
- templateSet: schreiben eines templates in ein Device

Templates ein unabhängig von short und long. Man kann also das gleiche template für short und/oder long nutzen - und natürlich für jeden peer einzeln.

Templates gehen mit jedem reload verloren - man sollte sie also im fhem.cfg beschreiben ( nur templateDef )

Es sind 2 oder 3 Templates exemplarisch vorhanden, ist aber nur Beispielhaft.

Ein Vorteil ist, dass das schreiben extrem vekürzt ist, es wird bei set nicht jedes Register separat geschrieben.

Ausserdem kann man die templates parametrisieren - also ein treppenhausschalter-template und die Schaltzeit kommt per parameter hinzu.

Würde mich freuen, wenn du es einmal ansiehst. Gerne auch Anregungen - es sind noch ein paar Punkte offen zum wirklich einfachen Handling.

EIN nächster Schritt ist dann, templates für simple-user bereitzustellen. Man koennte dies in Wiki sammeln.

Gruss Martin