Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
Mettre à jour l'état d'un commutateur
#1
Bonjour à tous,

je développe petit à petit mon installation knx et je me retrouve confronté à un problème.

Je cherche à contrôler une squeezebox en utilisant linknx. Au niveau materiel, les interrupteurs sont des Jung 4093 KRM.

J'ai créé deux adresses de groupe : une qui gère le on/off de la squeezebox et une qui gère l'état. L'état commande une des leds de l'interrupteur.

Le comportement actuel est le suivant :

1. J'arrive à allumer et à éteindre la squeezebox à partir d'un interrupteur.
2. Quand j'allume la squeezebox, que ce soit par l'interrupteur ou directement sur l'appareil, ma led d'état se met en marche.

MAIS

3. Si j'allume la squeezebox sur l'appareil et que je cherche à l'éteindre depuis le bouton ça ne arche pas.
4. Je dois d'abord l'allumer depuis le bouton (fictivement donc puis qu'elle est déjà allumée) et là je peux l'éteindre.

En gros, c'est comme si l'interrupteur ne capturait pas le fait que la squeezebox avait été allumée. Pour lui elle est éteinte et il n'envoie pas le message d'arrêt.

C'est sûrement un problème de configuration côté ETS mais je dois avouer que je sèche.

Toute aide sera la bienvenue.
Répondre
#2
Il faut ajouter ton objet bouton dans la GA de retour d'état, afin qu'il reste synchronisé... Un grand classique Wink
Frédéric

https://pknyx.gbiloba.org (de nouveau en ligne !)
Répondre
#3
Hum... C'est ce que je me suis dit au départ mais j'ai du me rater au niveau des flags.

Il faut que l'objet commutateur soit en C, W, U?
Répondre
#4
Je pense que c'est un poil plus complexe que ça.

Si tu allumes la squeezebox sur l'appareil directement, la squeezebox n'émet d'info vers le bus KNX pour signaler son changement d'état.

Sinon, dans linknx, il faut faire une règle qui va interroger l'état de la squeezebox régulièrement pour mettre à jour le retour d'état côté KNX si besoin.

Sinon, le mieux est de toujours passé par l'interupteur Smile

EDIT : j'avais zappé cette partie de ta description du probleme : "Quand j'allume la squeezebox, que ce soit par l'interrupteur ou directement sur l'appareil, ma led d'état se met en marche."

Donc tu sais déjà surveiller et mettre à jour le retour d'état de la squeezebox.

Donc, retour su l'explication plus classique sur la gestion des retour d'état avec les interrupteurs.

Tu peux nous donner la config au niveau de tes objets ?

Et sinon, je suis aussi intéressé par tes règles linknx pour superviser squeezebox Smile
Répondre
#5
Alors dans l'ordre :

Pour la partie squeezebox, c'est un tuto trouvé un peu au hasard :
1. Un ioport pour la connexion au squeezebox server

Code :
<ioport id="squeezebox" type="tcp" host="192.168.0.5" port="9090" permanent="true" />

2. Une règle pour connecter et écouter l'ioport

Code :
<rule id="squeezecenter_connect" init="false">
            <condition type="ioport-connect" ioport="squeezebox" />
            <actionlist>
                <action type="ioport-tx" data="listen 1&#x0A;" ioport="squeezebox" />
            </actionlist>
        </rule>

3. Une règle pour déterminer l'état de la squeezebox :

Code :
<rule id="audio_sdb_onoff_monitor" init="false">
            <condition type="ioport-rx" expected="00%3A04%3A20%3A27%3Aa5%3A11 power ([01])" regex="true" object1="audio_sdb_onoff_status" ioport="squeezebox" />
        <actionlist> </actionlist>
        </rule>

A noter que la règle ne contient pas d'action list et linknx n'aime pas toujours ça.

4. La règle pointe vers un objet qui est utilisé par la suite

Code :
<object type="1.001" id="audio_sdb_onoff_status" gad="10/1/0" init="persist" flags="crtu">Audio SDB On/Off retour</object>

5. et pour info la règle pour eteindre / démarrer la squeezebox

Code :
<rule id="audio_sdb_onoff" init="false">
            <condition type="object" id="audio_sdb_onoff_commande" value="on" trigger="true" />
            <actionlist>
                <action type="ioport-tx" data="00%3A04%3A20%3A27%3Aa5%3A11 play&#x0A;" ioport="squeezebox" />
            </actionlist>
            <actionlist type="on-false">
                <action type="ioport-tx" data="00%3A04%3A20%3A27%3Aa5%3A11 power 0&#x0A;" ioport="squeezebox" />
            </actionlist>
</rule>

Et l'objet associé

Code :
<object type="1.001" id="audio_sdb_onoff_commande" gad="10/0/0" init="request">Audio SDB On/Off commande</object>



Ensuite, au niveau ETS, j'ai

1. ma commutation qui pointe sur l'adresse 10/0/0 avec les flags C, W, U
2. ma led qui pointe sur 10/1/0 avec les flags C, W, U
Répondre
#6
As-tu lié ton objet bouton à la GA 10/1/0 ? De cette manière, quelle que soit la façon dont la box est allumée (ou éteinte), le bouton restera synchronisé avec le dernier état, et enverra bien la bonne valeur (1 ou O) lorsque tu appuieras dessus.

Sinon, pour lui, l'état n'aura pas changé (il n'aura pas vu l'allumage, par exemple), et voudra alors allumer lorsque tu appuieras dessus. Là, il sera alors synchronisé (tout le monde est d'accord que la box est allumée), et au deuxième appui, il éteint bien.
Frédéric

https://pknyx.gbiloba.org (de nouveau en ligne !)
Répondre
#7
tout pareil, la led à son propre objet de retour d'état, différent de celui du bouton qu'il faut également lié.
Moi, je m'étais fait avoir dans l'autre sens, j'avais un retour d'état fonctionnel pour le bouton mais la led ne fonctionnait pas car ce n'est pas le même objet de retour d'état.

Répondre


Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)