[RESOLU] Openhab : exploiter les PUSH envoyés par l'IPX800?

Bonjour à tous,

je dispose d’un IPX800V3 et d’un serveur headless sous debian avec Openhab (http://code.google.com/p/openhab/).
J’arrive avec Openhab à récupérer les états de l’IPX à l’aide de status.xml (fonctionnement en mode « pull »).
Pour que mon installation soit réactive il faut que openhab pull chaque seconde l’état de certaines entrées de l’IPX sur lesquelles sont câblées des interrupteurs. Je ne trouve pas ce fonctionnement particulièrement optimisé.

Je souhaiterai donc que openhab soit notifié par PUSH de l’Ipx en cas de changement d’état d’une entrée et qu’il n’aille faire un « audit complet » des états de l’IPX que tous les 10 ou 15 minutes.
J’ai donc indiqué à l’IPX de « pusher » sur mon serveur sur lequel j’ai executé tcpdump.

Est-ce que quelqu’un pourrait m’expliquer dans les grandes lignes quelle est la démarche à suivre pour extraire les informations de ces trames (en php ou éventuellement java) ? Le serveur dispose de java et d’apache2.

Merci beaucoup

l’IPX est 192.168.1.3 et le serveur debian 192.168.1.47.

Trames enregistrées par tcpdump:

09:11:20.872787 IP 192.168.1.3.1584 > 192.168.1.47.http: Flags [S], seq 2000882810, win 100, options [mss 1456], length 0
E…,-…d…/.0.PwC.z…`…d…
09:11:20.874341 IP 192.168.1.3.1584 > 192.168.1.47.http: Flags [.], ack 2165747773, win 100, length 0
E…(-]…d…/.0.PwC.{…=P…dp[…
09:11:20.880167 IP 192.168.1.3.1584 > 192.168.1.47.http: Flags [P.], seq 0:123, ack 1, win 100, length 123
E…-^…d…t…/.0.PwC.{…=P…de)…GET 00:04:A3:94:17:C9%26Out=01101000000000000000000000000000%26An1=455%26An2=494%26An3=478%26An4=0%26C1=89390%26C2=23%26C3=
09:11:20.881598 IP 192.168.1.3.1584 > 192.168.1.47.http: Flags [P.], seq 123:199, ack 1, win 100, length 76
E…t-_…d…/.0.PwC…=P…d?[…5 HTTP/1.0
Host: 192.168.1.47
Connection: close

Connection: close

09:11:20.885807 IP 192.168.1.3.1584 > 192.168.1.47.http: Flags [F.], seq 199, ack 101, win 100, length 0
B…P…do/…/.0.PwC
09:11:20.889211 IP 192.168.1.3.1584 > 192.168.1.47.http: Flags [R.], seq 200, ack 101, win 100, length 0
C…P…do+…/.0.PwC

salut

Si tu as un apache, le plus simple et de faire pointer les requêtes push sur une page PHP. Fait un truc genre print_r($_GET); et tu comprendra ce que tu peux récupérer.

A+
Thomas

Bonjour à tous,

avec le dernier FW de l’IPX800V3 (Merci!) et la mise à jour du TCP binding d’openhab (fin 2013), OH peut désormais exploiter les PUSH envoyés par l’IPX.
Cela fait une solution beaucoup plus propre que de parser l’index.xml en permanence…

Globalement il s’agit de:

  1. demander à OH d’écouter les trames TCP sur un port donné (à préciser dans la config du tcp binding, fichier openhab.cfg)
  2. de créer un item qui reçoit ces trames
  3. de créer une règle qui à chaque mise à jour de cet item lance un script
  4. ce script permet de « couper en rondelles » les données du PUSH de l’IPX et de les affecters à différents items (switch, contact, compteurs, etc…)
  5. de créer des items switch qui commandent les sorties de l’IPX à l’aide de commandes M2M

Bien sur il faut:

  • préciser quoi mettre dans le path de l’IPX (voir détails dans le fichier .items)
  • activer le TCP binding dans openhab et le configurer (voir l’aide sur le site d’openhab)

Pour ceux qui sont intéressés les détails sont dans les en-têtes des fichiers de configuration OH en copie (item, rule, script).
configurations.zip (29.4 KB)

Bonjour,

Je commence à développer un système avec OPENHAB et j’ai utilisé votre configuration, merci beaucoup. J’arrive à contrôler les relais, par contre le retour d’information relais, compteurs, contacts, analogs, pose problème : l’envoi des données par l’IPX est bien reçu par OPENHAB mais le traitement ne se fait pas, il y a une erreur Java :

11:56:48.836 INFO o.o.b.t.AbstractSocketChannelBinding[:1360] - Received connection request from /192.168.2.61:1115
11:56:48.836 INFO o.o.b.t.AbstractSocketChannelBinding[:1369] - 192.168.2.61:* is an allowed masked remote end. The channel will now be configured
11:56:49.088 ERROR o.o.c.s.AbstractActiveService[:175] - Error while executing background thread TCP Refresh Service
java.lang.NullPointerException: null
at java.util.regex.Matcher.getTextLength(Matcher.java:1234)

J’ai la version de java : java version « 1.7.0_55 »
OpenJDK Runtime Environment (IcedTea 2.4.7) (7u55-2.4.7-1ubuntu1~0.12.04.2)
OpenJDK 64-Bit Server VM (build 24.51-b03, mixed mode)

Merci d’avance pour votre aide !

Jetblack

Bonjour Jetblack,

j’ai arrêté d’utiliser OPENHAB car ce logiciel pose problème pour le moment sur mon serveur qui est un raspberry Pi (bug: « Item model not loading correctly on RaspberryPi (#517)‏ »).
Pour le moment j’utilise « Serveur Multicartes IPX800 » publié sur SourceForge en dépannage.
Vous utilisez un PI?

Je ne suis plus dans le bain et je risque de manquer de temps pour m’y replonger à court terme (pas avant juillet/aout)
Pour débugger il faut de toute façon lancer OPENHAB en mode débug et aussi le binding TCP (voir comment faire dans la doc du binding tcp).

Les discussion que j’avais eu à l’époque avec Karel:
https://groups.google.com/d/msg/openhab/ntMTVdrvIsk/GQ9BRpi_qmgJ

Bonsoir,

merci pour la réponse,

j’ai résolu le problème, c’était un souci de formatage de la chaîne envoyée par l’IPX. En effet, OpenHAB a l’air parfois capricieux. En ce moment j’essaie d’intégrer l’ecodevices, mais je n’arrive pas à convertir des string en float dans les scripts… Bref, pas gagné…

Je connais bien multicardipx, j’ai la V3 qui tourne sur un Raspi depuis plusieurs mois et qui gère bien mon IPX et mon ecodev.
Je fais partie des développeurs, RaspIPXV3 vient de moi ):

Bonne soirée et merci !
Jetblack