Schaltaktor peeren

Begonnen von stgeran, 16 März 2016, 19:18:26

Vorheriges Thema - Nächstes Thema

stgeran

Ich habe einen Schaltaktor für einen Ventilator im Keller, der über fhem 2 mal am Tag für eine Stunde eingeschaltet wird.
# Ventilator Keller #

define Vent_K CUL_HM 2B8AE2
attr Vent_K IODev HMLAN1
attr Vent_K autoReadReg 4_reqStatus
attr Vent_K expert 2_full
attr Vent_K firmware 1.12
attr Vent_K model HM-LC-SW1-FM
attr Vent_K peerIDs 00000000,
attr Vent_K room CUL_HM
attr Vent_K serialNr LEQ0545314
attr Vent_K subType switch
attr Vent_K webCmd statusRequest:toggle:on:off
define FileLog_Vent_K FileLog ./log/Vent_K-%Y.log Vent_K
attr FileLog_Vent_K logtype text
attr FileLog_Vent_K room CUL_HM
#define Ventilator at *07:00:00 set K_Vent on-for-timer 3600
#define Ventilator at *19:00:00 set K_Vent on-for-timer 3600
define Ventilator DOIF ([07:00-08:00] or [19:00-20:00]) (set Vent_K on) DOELSE (set Vent_K off)

Attribute im Anhang.
Muss ich den trotzdem peeren und wenn ja mit was oder wem?
Es funktioniert, machmal ein "missing Ack". Das liegt aber am schlechten rssi.
FHEM auf Raspberry
CSM 866MHz für EM1010 mit Strom und Gaszähler
CUL 866MHz für MAX! Radiator Thermostat 
CUL 433MHz für Innen und Aussen Temp
HMLAN für HM-LC-Sw1-PI-2

CoolTux

Musst Du nicht. Alles ok so. Es sei denn Du willst einen Hartwaretaster anschließen. Aber wenn FHEM alles machen soll passt es so.
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

RomanticBoy83

Ich versuche mich gerade am peeren und tue mich sehr schwer! Hintergrund sind die gefundenen Beispiele, welche einen Text ohne jede Quellenangabe und Hintergrundinfos herunter rattern.
Hardware:
ein Drehkontakt (HM-Sec-RHS)
ein Jallosieaktor (HM-LC-Bl1PBU-FM)
Ich möchte erreichen, das der Rolladen hoch geht, sobald der Schalter 'on' oder 'tilted' aussendet. 'closed' soll ignoriert werden. Da 'closed' auch nirgends in den weiter unten erwähnten Conditions auftaucht, ist das Ignorieren auch schon erledigt.

erster Versuch bringt schon irgendwelche Reaktionen:
set sensor peerChan 0 aktor single set

meine Fragen:
1) warum geben immer alle Channel 0 an / wo kommt das her / was macht der / wie kann ich die verschiedenen Channels sehen und informationen zu ihnen erhalten
2) Wenn eine Nachricht beim Aktor eintrifft, dann muss diese natürlich durch die Conditions bearbeitet werden. Aber wie entwickelt man eine Strategie in dem 'Wirrwar'? / Wann ist short und wann long ausschlaggebend und wie kann man das sehen? / Wie setze ich die Conditions?

meine Liste vom Aktor gelesen mit dem Befehl 'get aktor regList':
list:         register | range              | peer     | description
   0: confBtnTime      |   1 to 255min      |          | 255=permanent special:permanent
   0: intKeyVisib      |     literal        |          | visibility of internal channel options:visib,invisib
   0: localResDis      |     literal        |          | local reset disable options:off,on
   0: pairCentral      |   0 to 16777215    |          | pairing to central
   1: driveDown        |   0 to 6000s       |          | drive time up
   1: driveTurn        | 0.5 to 25.5s       |          | engine uncharge - fhem min = 0.5s for protection. HM min= 0s (use regBulk if necessary)
   1: driveUp          |   0 to 6000s       |          | drive time up
   1: refRunCounter    |   0 to 255         |          | reference run counter
   1: sign             |     literal        |          | signature (AES) options:on,off
   1: statusInfoMinDly |   0 to 15.5s       |          | status message min delay special:unused
   1: statusInfoRandom |   0 to 7s          |          | status message random delay
   1: transmitTryMax   |   1 to 10          |          | max message re-transmit
   3: lgActionType     |     literal        | required |  options:toggleToCntInv,toggleToCnt,off,jmpToTarget
   3: lgBlJtDlyOff     |     literal        | required | Jump from delayOff options:dlyOn,on,refOn,rampOff,off,no,dlyOff,refOff,rampOn
   3: lgBlJtDlyOn      |     literal        | required | Jump from delayOn options:dlyOff,refOff,rampOn,no,rampOff,off,dlyOn,on,refOn
   3: lgBlJtOff        |     literal        | required | Jump from off options:no,dlyOff,refOff,rampOn,dlyOn,refOn,on,off,rampOff
   3: lgBlJtOn         |     literal        | required | Jump from on options:dlyOff,rampOn,refOff,no,off,rampOff,dlyOn,on,refOn
   3: lgBlJtRampOff    |     literal        | required | Jump from rampOff options:no,dlyOff,rampOn,refOff,dlyOn,on,refOn,rampOff,off
   3: lgBlJtRampOn     |     literal        | required | Jump from rampOn options:refOn,on,dlyOn,rampOff,off,no,rampOn,refOff,dlyOff
   3: lgBlJtRefOff     |     literal        | required | Jump from refOff options:no,refOff,rampOn,dlyOff,refOn,on,dlyOn,off,rampOff
   3: lgBlJtRefOn      |     literal        | required | Jump from refOn options:dlyOff,rampOn,refOff,no,off,rampOff,dlyOn,refOn,on
   3: lgCtDlyOff       |     literal        | required | Jmp on condition from delayOff options:geLo,outside,ltHi,between,ltLo,geHi
   3: lgCtDlyOn        |     literal        | required | Jmp on condition from delayOn options:outside,geLo,geHi,ltHi,between,ltLo
   3: lgCtOff          |     literal        | required | Jmp on condition from off options:geHi,between,ltHi,ltLo,outside,geLo
   3: lgCtOn           |     literal        | required | Jmp on condition from on options:geLo,outside,ltLo,between,ltHi,geHi
   3: lgCtRampOff      |     literal        | required | Jmp on condition from rampOff options:geHi,between,ltLo,ltHi,outside,geLo
   3: lgCtRampOn       |     literal        | required | Jmp on condition from rampOn options:geHi,between,ltHi,ltLo,geLo,outside
   3: lgCtRefOff       |     literal        | required | Jmp on condition from refOff options:outside,geLo,ltHi,between,ltLo,geHi
   3: lgCtRefOn        |     literal        | required | Jmp on condition from refOn options:ltLo,between,ltHi,geHi,outside,geLo
   3: lgCtValHi        |   0 to 255         | required | Condition value high for CT table
   3: lgCtValLo        |   0 to 255         | required | Condition value low for CT table
   3: lgDriveMode      |     literal        | required |  options:viaLowerEnd,viaNextEnd,viaUpperEnd,direct
   3: lgMaxTimeF       |   0 to 25.5s       | required | max time first direction. special:unused
   3: lgMultiExec      |     literal        | required | execution per repeat message options:on,off
   3: lgOffDly         |   0 to 111600s     | required | off delay
   3: lgOffLevel       |   0 to 100%        | required | PowerLevel off
   3: lgOffTime        |   0 to 111600s     | required | off time special:unused
   3: lgOffTimeMode    |     literal        | required | off time meant absolut or at least options:absolut,minimal
   3: lgOnDly          |   0 to 111600s     | required | on delay
   3: lgOnLevel        |   0 to 100.5%      | required | PowerLevel on special:oldLevel
   3: lgOnTime         |   0 to 111600s     | required | on time special:unused
   3: lgOnTimeMode     |     literal        | required | on time meant absolut or at least options:absolut,minimal
   3: shActionType     |     literal        | required |  options:toggleToCntInv,toggleToCnt,off,jmpToTarget
   3: shBlJtDlyOff     |     literal        | required | Jump from delayOff options:dlyOn,on,refOn,rampOff,off,no,dlyOff,refOff,rampOn
   3: shBlJtDlyOn      |     literal        | required | Jump from delayOn options:dlyOff,refOff,rampOn,no,rampOff,off,dlyOn,on,refOn
   3: shBlJtOff        |     literal        | required | Jump from off options:no,dlyOff,refOff,rampOn,dlyOn,refOn,on,off,rampOff
   3: shBlJtOn         |     literal        | required | Jump from on options:dlyOff,rampOn,refOff,no,off,rampOff,dlyOn,on,refOn
   3: shBlJtRampOff    |     literal        | required | Jump from rampOff options:no,dlyOff,rampOn,refOff,dlyOn,on,refOn,rampOff,off
   3: shBlJtRampOn     |     literal        | required | Jump from rampOn options:refOn,on,dlyOn,rampOff,off,no,rampOn,refOff,dlyOff
   3: shBlJtRefOff     |     literal        | required | Jump from refOff options:no,refOff,rampOn,dlyOff,refOn,on,dlyOn,off,rampOff
   3: shBlJtRefOn      |     literal        | required | Jump from refOn options:dlyOff,rampOn,refOff,no,off,rampOff,dlyOn,refOn,on
   3: shCtDlyOff       |     literal        | required | Jmp on condition from delayOff options:geLo,outside,ltHi,between,ltLo,geHi
   3: shCtDlyOn        |     literal        | required | Jmp on condition from delayOn options:outside,geLo,geHi,ltHi,between,ltLo
   3: shCtOff          |     literal        | required | Jmp on condition from off options:geHi,between,ltHi,ltLo,outside,geLo
   3: shCtOn           |     literal        | required | Jmp on condition from on options:geLo,outside,ltLo,between,ltHi,geHi
   3: shCtRampOff      |     literal        | required | Jmp on condition from rampOff options:geHi,between,ltLo,ltHi,outside,geLo
   3: shCtRampOn       |     literal        | required | Jmp on condition from rampOn options:geHi,between,ltHi,ltLo,geLo,outside
   3: shCtRefOff       |     literal        | required | Jmp on condition from refOff options:outside,geLo,ltHi,between,ltLo,geHi
   3: shCtRefOn        |     literal        | required | Jmp on condition from refOn options:ltLo,between,ltHi,geHi,outside,geLo
   3: shCtValHi        |   0 to 255         | required | Condition value high for CT table
   3: shCtValLo        |   0 to 255         | required | Condition value low for CT table
   3: shDriveMode      |     literal        | required |  options:viaLowerEnd,viaNextEnd,viaUpperEnd,direct
   3: shMaxTimeF       |   0 to 25.5s       | required | max time first direction. special:unused
   3: shMultiExec      |     literal        | required | reg unused, placeholder only options:on,off
   3: shOffDly         |   0 to 111600s     | required | off delay
   3: shOffLevel       |   0 to 100%        | required | PowerLevel off
   3: shOffTime        |   0 to 111600s     | required | off time special:unused
   3: shOffTimeMode    |     literal        | required | off time meant absolut or at least options:absolut,minimal
   3: shOnDly          |   0 to 111600s     | required | on delay
   3: shOnLevel        |   0 to 100.5%      | required | PowerLevel on special:oldLevel
   3: shOnTime         |   0 to 111600s     | required | on time special:unused
   3: shOnTimeMode     |     literal        | required | on time meant absolut or at least options:absolut,minimal

martinp876

Die 0 wird bei devices verwendet und wohl mittlerweile von niemandem mehr. Ich werde einbauen, dass es nicht mehr notwendig ist. Es wird in deinem Fall eh ignoriert. Die Strategie ist uralt, vor meiner Zeit.
Short und long beziehen sich auf buttons. Da kann man kurz oder lang druecken und das sollte sich damit erklären.
Sensoren senden immer kurz. Aktoren könnten auch mit lang umgehen.
Fuer dich also relevante ist short.
Nun kannst du in der CT einstellen dass reagiert wird, wenn der level ..... Was ist closed? Grösser oder kleiner closed ist, je nachdem ob es 0 oder 200 ist. Tilt sollte 50 sein, also 25%

RomanticBoy83

Vielen Dank für die Ausführungen.

Der Sensor sendet - das vermute ich doch ganz stark - die üblichen Werte, welche ich sonnst auch im Fhem nutze. Diese lauten ( tilted | open | closed ).

Laut 'get sensor regList'
list:         register | range              | peer     | description
   0: cyclicInfoMsg    |     literal        |          | cyclic message options:on,on_100,off
   0: pairCentral      |   0 to 16777215    |          | pairing to central
   0: transmDevTryMax  |   1 to 10          |          | max message re-transmit
   1: eventDlyTime     |   0 to 7620s       |          | filters short events, causes reporting delay
   1: ledOnTime        |   0 to 1.275s      |          | LED ontime
   1: msgRhsPosA       |     literal        |          | Message for position A options:noMsg,tilted,open,closed
   1: msgRhsPosB       |     literal        |          | Message for position B options:tilted,noMsg,open,closed
   1: msgRhsPosC       |     literal        |          | Message for position C options:open,noMsg,tilted,closed
   1: sign             |     literal        |          | signature (AES) options:on,off
   1: transmitTryMax   |   1 to 10          |          | max message re-transmit
   4: expectAES        |     literal        | required | expect AES options:off,on
   4: peerNeedsBurst   |     literal        | required | peer expects burst options:off,on


Kann ich etwas "verfriemeln" wenn ich an den Conditions herumspiele? Als Beispiel, dass der Aktor dann auf Befehle von Fhem auch anders reagiert?

martinp876

schön, dass so viele Leute die regList hier posten. Die ist Systemgegeben, die braucht es eigentlich nie hier.

was meinst du mit conditions? Der Sensor kennt 3 Stellungen und 3 messages (also level). Er sendet noMsg,tilted,open,closed. noMsg ist "keine message" - aber ich denke das kann man erkennen.
die anderen drei stehe für einen Wert wobei open=100%=200, tilted=25%=50 und closed =0%=0 bedeuted.
mehr ist da nicht.
Wenn du das drehst indem du die messages tauschst kommt bei "zu" ein "200"... oder "50".
Der Aktor sollte das auswerten und entsprechend reagieren. Wenn du überall "open" einstellst wird der Sensor bei jedem Schalten ein Open senden, nie mehr ein "zu". Der Aktor macht daraus, was du ihm aufgetragen hast.

zu der Kurzbeschreibung sollte es eigentlich keine Fragen geben, es beschreibt genau, was ich gerade gesagt habe.
Viel Spass beim Spielen

RomanticBoy83

Jetzt hast's geschafft!
Dann leuchtet es mir auch ein - ich ging davon aus, dass die Worte (open | closed | tilted) von HM auch überall so übersetzt werden. Wenn dahinter Integer-Werte stecken, dann wird die Sache schon klarer.

Das die Tabellen aus Fhem kommen, sollte logisch sein - jedoch sind sie doch Deviceabhängig.

Vielen Dank für die Erleuchtung - ich werde dann bei Gelegenheit mein Vorhaben einmal testen und dann einige Notifys löschen können.

RomanticBoy83

#7
So, ich habe einmal die Zeit gefunden
Mein Plan schaut jetzt folgendermaßen aus:
(https://picload.org/image/wwclrrl/state.png)
Leider bekomme ich noch immer die Intergerwerte mit dem RegisterWert 'geHi' nicht unter Kontrolle!
- shCtValHi 100 -> open und tilted reagiert
- shCtValHi 200 -> open reagiert

Das bedeutet für mich, dass 'close' durchaus 0 sein kann. 'open' muss größer als 201 sein und 'tilted' ist zwischen 101 und 200.
Wie bekomme ich denn diese Werte zuverlässig ermittelt. Diese sollten doch in der RAW zum Griff lesbar sein! Nur woerhalte ich dazu Informationen?

Update:
geHi bedeutet nicht 'größer High' sondern '>=High'
tilted == 100
open == 200

RomanticBoy83

Ich möchte meine fertige Lösung anderen Anfängern nicht vorenthalten.
1) nach langem recherchieren in http://fhem.de/Heimautomatisierung-mit-fhem.pdf
2) und ein wenig spielen in der Fhem-Weboberfläche
3) hatte ich mir nun ein Zustanddiagramm erstellt
(https://picload.org/image/wwcigao/state.png)
- ein Türgriff soll das Rollo bei 'open' hoch fahren, aber nicht mehr runter
- er soll dennoch das Hochfahren mit 'close' oder 'tilted' stoppen können
4) peeren der Geräte und die Register wie im Zustandsdiagramm anpassen
set wz_gr_tuer peerChan 0 wz_ro_tuer single set

set wz_ro_tuer regSet shBlJtDlyOff dlyOn  wz_gr_tuer_chn-01
set wz_ro_tuer regSet shBlJtDlyOn dlyOn  wz_gr_tuer_chn-01
set wz_ro_tuer regSet shBlJtOff dlyOn wz_gr_tuer_chn-01
set wz_ro_tuer regSet shBlJtOn dlyOn wz_gr_tuer_chn-01
set wz_ro_tuer regSet shBlJtRampOff dlyOn wz_gr_tuer_chn-01
set wz_ro_tuer regSet shBlJtRampOn on wz_gr_tuer_chn-01
set wz_ro_tuer regSet shBlJtRefOff dlyOn wz_gr_tuer_chn-01
set wz_ro_tuer regSet shBlJtRefOn refOn wz_gr_tuer_chn-01
set wz_ro_tuer regSet shCtDlyOff geHi wz_gr_tuer_chn-01
set wz_ro_tuer regSet shCtDlyOn geHi wz_gr_tuer_chn-01
set wz_ro_tuer regSet shCtOff geHi wz_gr_tuer_chn-01
set wz_ro_tuer regSet shCtOn geHi wz_gr_tuer_chn-01
set wz_ro_tuer regSet shCtRampOff geHi wz_gr_tuer_chn-01
set wz_ro_tuer regSet shCtRampOn ltHi wz_gr_tuer_chn-01
set wz_ro_tuer regSet shCtRefOff geHi wz_gr_tuer_chn-01
set wz_ro_tuer regSet shCtRefOn geHi wz_gr_tuer_chn-01
set wz_ro_tuer regSet shCtValHi 101 wz_gr_tuer_chn-01

martinp876

Tilt ist 25% oder 50 dec. Nicht etwa 50% oder 100