OpenHab & ipx800

Bonjour à tous,

Je sais qu’il s’agit d’une ancienne discussion mais je suis intéressé par faire fonctionner mon IPX800 V4 avec OpenHab V2.

Je rencontre une difficulté pour faire « discuter » les deux systèmes ensembles. Je ne suis tout d’abord pas certain que l’IPX800 V4 est proprement configurée pour envoyer les messages M2M à OpenHab. Je n’arrive pas à trouver dans les panneaux de configuration IPX800 V4 comment activer l’option « Send data on status changed » indiquée dans le wiki du binding. Pouvez vous m’éclairer?

Jonathan

Bonsoir,
Après une recherche sur le forum :

1 « J'aime »

Merci @uneombrenoire, j’ai fini par trouver cette discussion qui couvre complètement mes besoins en terme de binding.

Maintenant, en attendant les premières expérimentations, j’essaie de faire communiquer les deux mondes (openhab2 et ipx800V4) de manière plus manuelle (sans binding).

J’arrive facilement à envoyer un ordre depuis Openhab vers IPX800 pour changer l’état d’un relais grâce à une requête http.

J’essaie maintenant de lancer une notification depuis l’IPX vers Openhab quand je change le relais par un interrupteur. Lorsque j’utilisais Domoticz j’étais parvenu à m’en sortir avec des entrées virtuelles et des push. Mais là je n’arrive pas à configurer correctement le push pour que ce soit conforme à ce que Openhab attend.

Est ce que quelqu’un a déjà réussi cette manip ? J’essaie de me baser sur l’API REST mais je ne comprends pas comment remplir les champs de la notification PUSH dans l’interface de l’IPX pour faire un PUSH ou un PUT…

Merci en tout cas à la communauté

Jonathan

Bonjour,

J’ai réussi à faire la manip dont vous parlez.
Effectivement, il est assez facile de piloter l’allumage des relais, mais difficile d’être à jour sur l’état.

Voici la manip :
Déclaration de tous les items type Switch, exemple (Cle api : apikey, relais 9), de 1 à 32 sans interruption, même s’ils ne sont pas attribués :
Switch SpotsEscalierCombles "Spots Escalier Combles" <spots> (RelaisIPX, Output, Eclairage, Comble_Chambre) ["Lighting"] {http=">[ON:POST:http://[IP_IPX]/api/xdevices.json?key=apikey&SetR=09] >[OFF:POST:http://[IP_IPX]/api/xdevices.json?key=apikey&ClearR=09]"}

et d’une string sans config
String OutputsIPX800 "Etats sorties IPX800"

L’idée est de « pousser » (push) le changement d’état d’un relais de l’IPX à Openhab.

Vous l’avez compris, le string item « OutputsIPX800 » se met à jour qu’à chaque évenement (et non chaque seconde interroger sur le status.xml comme j’ai pu le voir dans d’autre binding d’autre logiciel domotique, qui surcharge le réseau pour peu d’action par jour).
Nous envoyons la balise $R, qui l’état des relais.

Dernière étape, nous traitons dans une rule l’état reçu.
exemple en log :
Item 'OutputsIPX800' received command 1000010000010000000000000000000000000

PushIPX.rules :

rule "update outputs IPX" 
when
	Item OutputsIPX800 received command 
then  
    val String[] trame = OutputsIPX800.state.toString().split("") 
    RelaisIPX?.members.forEach(output,i|				//Attention à l'ordre des items dans le groupe RelaisIPX, de 1 à 32 sans interruption
		if ((trame.get(i).toString()=='1') && (output.state!=ON))	{
			postUpdate(output, ON)
		}
		else if (trame.get(i).toString()=='0' && (output.state!=OFF))	{
			postUpdate(output, OFF)
		} 
	)
end

Ça fait très bien le job, c’est très réactif, voire instantané. De la même manière je manage les inputs, qui contrôle du KNX ou autre binding, on y voit que du feu à l’usage, et sans surcharge de réseau ou de ressource.

J’avoue avoir mis quelques temps pour arrivé à ce résultat :wink:

Bon courage donc, en attendant le binding V4 ! @seebag :wink:

Bonne soirée,


Vincent Ferreux
Intégrateur d’IPX depuis 2011
alterecoop.fr

3 « J'aime »

@GCE Peut-être mettre le post de mise à jour des états des relais sous Openhab dans la partie tuto ?

Allez tiens, pour la peine, une autre intégration bien pratique :

Pilotage complet de micromodules VR Enocean par OpenHab2, compris montée/descente, position et retour d’état (interrogé cycliquement cette fois-ci) :

Rollershutter VRSalon « VR Salon [%d %%] » (VR, Rdc_Salon) {http=« >[UP:POST:http://192.168.0.x/api/xdevices.json?key=apikey&SetEnoVR01=0] >[DOWN:POST:http://192.168.0.x/api/xdevices.json?key=apikey&SetEnoVR01=100] >[STOP:POST:http://192.168.0.x/api/xdevices.json?key=apikey&SetEnoVR01=101] >[:POST:http://192.168.0.x/api/xdevices.json?key=apikey&SetEnoVR01=%2$s] <[http://192.168.0.x/api/xdevices.json?key=apikey&Get=XENO:10000:REGEX(.?"ENO VOLET ROULANT1": (.?),.)] »}

`–
Vincent Ferreux
Intégrateur d’IPX depuis 2011
alterecoop.fr

1 « J'aime »

@Veance Merci pour la mise à jour, je viens d’implémenter mes scripts avec ta proposition.

J’ai modifié légèrement ton fichier rules car j’ai observé des ratés quand il y avait un petit délai entre le moment où OutputsIPX800 recevait la commande et le moment où OutputsIPX800 était mis à jour.

J’ai également changé un peu de syntaxe pour la boucle forEach. Je ne suis pas un spécialiste mais ça fonctionne de manière plus régulière chez moi. Je suis preneur si quelqu’un peut expliquer pourquoi ça fonctionne mieux.

val String filename = "ipx800.rules"
rule "Update outputs IPX" 
when
	Item OutputsIPX800 changed 
then  
    val String[] trame = OutputsIPX800.state.toString().split("") 
    RelaisIPX.members.sortBy[name].forEach[output,i|				//Attention à l'ordre des items dans le groupe RelaisIPX, de 1 à 32 sans interruption
        // logInfo(filename, "debug output '{}'", output.name)
        // logInfo(filename, "debug output '{}'", trame.get(i).toString())
        // logInfo(filename, "debug output '{}'", output.state)
        if ((trame.get(i).toString()=='1') && (output.state!=ON))	{
            logInfo(filename, "processing output '{}'", output.name)
			postUpdate(output, ON)
		}
		else if (trame.get(i).toString()=='0' && (output.state!=OFF))	{
            logInfo(filename, "processing output '{}'", output.name)
			postUpdate(output, OFF)
		}
    ]
end

Bonne soirée

Jonathan