Petit example de pilotage d'éclairage par détecteur de présence, détecteur de luminosité et paramétrisé.
Ce que je souhaite réaliser:
Utiliser mes détecteurs d'alarme (AnB) pour allumer des lampes (KNX) lorsque la luminosité est inférieure a un certain seuil dont je peux modifier la valeur, les lampes doivent rester allumées pendant un temps paramétrisable.
J'ai donc les devices suivants:
1) Un input numérique branché sur un relais (EXO 8) de l'alarme, l'alarme pilote le relais de l'exo par l'état du détecteur.
DEFINE KNX_0101202 KNX 1/1/202:dpt1.005
une fois activé je reçois une information alarme (transitoire) dans le state du KNX_0101202
2) Le circuit de la lampe, rien de spécial.
DEF KNX_0101170 1/1/170:dpt1
3) Une mesure de luminosité (par un détecteur de mouvement EIBMARKT avec un capteur de luminosité)
define KNX_0103005 1/3/5:dpt9.004
attr KNX_0103005 userReadings raw:getG1.* {ReadingsNum("KNX_0103005","getG1",0,2)}
4) Un dummy pour gérer la durée d'éclairement (avec un slider pour changer a volonté celle ci)
define duree_timer dummy
attr duree_timer room TEST,detecteurs
attr duree_timer setList state:slider,5,5,120,1
attr duree_timer webCmd state
5) Un dummy pour gérer le seuil de luminosité:
define seuil_luminosite dummy
attr seuil_luminosite room TEST,detecteurs
attr seuil_luminosite setList state:slider,0,0.1,30,1
attr seuil_luminosite userReadings raw {ReadingsNum("seuil_luminosite","state",0,2)}
attr seuil_luminosite webCmd state
6) Un DOIF pour manipuler tout ce petit monde
define KNX_0101202_DOIF_1 DOIF ([KNX_0101202:getG1] eq "alarm" and [KNX_0103005:raw] < [seuil_luminosite]) (set KNX_0101170 on-for-timer {(ReadingsVal("duree_timer","state",30))})
Explication:
Lorsque le device
KNX_0101202 envoie une valeur sur G1 (groupe 1) et que celle-ci vaut alarme (donc détection), alors si la valeur du reading
raw du
KNX_0103005 est inférieure à la valeur du dummy
seuil_luminosite on allume la lampe
KNX_0101170 pour la durée spécifiée par le dummy
duree_timer
Quelques astuces:
Le capteur de luminosité retourne un état avec unité (e.g. 10.93 lux), les unités doivent donc être éliminée de l'état pour être utilisé dans la condition 'plus petit que', je définit un userReadings "
raw" avec la valeur {ReadingsNum("KNX_0103005","getG1",0,2)} cad la premiere valeur numérique présente dans le Reading getG1 du device KNX_0103005, par défaut 0 avec 2 décimales.
Pareil avec le dummy "luminosite", au cas où le Reading "state" ne serait pas complètement numérique.
Le pilotage de la lampe en manuel restant bien entendu fonctionnel.
Les dummies sont directement contrôlable en glissant leur slider sur la page.