Sp@r0 Posté(e) le 11 juin 2012 Partager Posté(e) le 11 juin 2012 Alors en gros l'idée le RFXCOM te renvoi des bytes (4 bits) mais tu les récupères sous forme d'octet (8bits) qu'il t'affiche sous forme de caractères ASCII, donc pour récupérer les bytes tu fais : - caractère ASCII / 16 te donne le byte de poids fort - caractère ASCII mod 16 (le reste de la division par 16) te donne le byte de poids faible Malheureusement dans mon programme j'ai inversé les 2 ce qui peu être perturbant pour comprendre le décodage mais j'ai eu la flemme de corriger quand je m'en suis rendu compte .....si tu est courageux je suis preneur :) 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
TurboX Posté(e) le 12 juin 2012 Auteur Partager Posté(e) le 12 juin 2012 Mes trames étaient fausses (c'est pour ça que je ne comprenais rien du tout). En fait, le rfxtrx est a 38400bauds. La sonde oregon est bien vu en entière, par contre mon capteur d'ouverture de porte est vu en 2 fois : une trame de 18 et une trame de 6 (lors d'une seconde lecture de la liaison serie). Merci pour ton explication, je comprend maintenant ton code mais je ne vois pas ce que tu as fait à l'envers. 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Sp@r0 Posté(e) le 12 juin 2012 Partager Posté(e) le 12 juin 2012 Bizarre ton soucis de trame ... et avec le logiciel fournit par rfxcom cela fonctionne normalement ???? Pour ce que j'ai fait à l'envers c'est que j'ai ranger les données dans l'ordre Big ENDIAN (Poids FORT - Poids FAIBLE) hors les données des sondes sont codées en Little ENDIAN (Poids Faible - Poids FORT) ce qui rend le décodage moins trivial puisque qu'il faut inverser 2 à 2 si je ne m'étais pas tromper les chiffres auraient été dans le bon sens directement. 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
PatrickH Posté(e) le 12 juin 2012 Partager Posté(e) le 12 juin 2012 Hello, je me greffe sur la discussion car moi aussi je viens d'acheter un RFXtrx433 USB et j'essaye de faire pareil qu'avec mon RFXcom (LAN) qui lui fonctionne avec xPL-Perl). J'ai déjà l'infra qui tourne (j'ai accès au device /dev/ttyUSB0) xPL-perl ne supporte actuellement pas cet emetteur/recepteur, je cherche donc une autre piste, python ? mais il me manque le module pyserial Patrick 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
TurboX Posté(e) le 12 juin 2012 Auteur Partager Posté(e) le 12 juin 2012 (modifié) Avec rfxmngr tout est bien d'un bloc. La il me faut lire deux fois le port serie pour avoir la trame complète. Bon après si je trouve pas le moyen de l'avoir en une seule fois c'est pas grave il suffit de le savoir. En fait, je ne vois toujours pas le souci. Par ex, ma sonde oregon me sort " ... 00 C4 59" soit [0,0,12,4,5,9] le C4 correspondant à 196 soit 19,6 °C. Modifié le 12 juin 2012 par TurboX 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Diaoul Posté(e) le 12 juin 2012 Partager Posté(e) le 12 juin 2012 Si tu veux des modules python particuliers tu me dis je te fais un SPK. Personne n'a testé domogik encore? 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
TurboX Posté(e) le 12 juin 2012 Auteur Partager Posté(e) le 12 juin 2012 PatrickH pour pyserial, j'ai fait un "ipkg install py25-serial". Je peux t'envoyer un script qui ne fait que lire les trames si tu veux. domogik je veux bien mais j'avoue que l'idée de passer par python de sp@r0 es tassez motivant car on comprends bien tout ce que l'on fait et l'on peut adapter. J'apprends des choses avec ce petit rfxtrx. Après si quelque chose de tout fait existe, cela peut-être à tester aussi. 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
PatrickH Posté(e) le 12 juin 2012 Partager Posté(e) le 12 juin 2012 Ah je veux bien ton script, cependant quand je fais un "ipkg list " il n'y 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
TurboX Posté(e) le 12 juin 2012 Auteur Partager Posté(e) le 12 juin 2012 Tu as fait un ipkg update et ipgk urgrade? 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Sp@r0 Posté(e) le 12 juin 2012 Partager Posté(e) le 12 juin 2012 Domogik ne supporte pas pour l'instant le nouveau rfxcom (tt comme xplperl) car il utilise le même port comme pour l'ecriture et la lecture. Sinon j'ai un copain qui a fusionner mes 2 scripts d'envoi et de réception en un seul pour gérer ce nouveau module. 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
TurboX Posté(e) le 12 juin 2012 Auteur Partager Posté(e) le 12 juin 2012 https://www.dropbox.com/s/4lt8hd6fk65knbm/lecture_simple_des_trames_rfxtrx433.sh sp@r0: à la rigueur s'il peut partager ce serait simpa mais j'en suis pas encore là. Je dois aussi réfléchir à l'enregistrement des données dans la base mysql. Soit je fais comme toi un petit fichier ajout.php soit je trouve autre idée. 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
PatrickH Posté(e) le 12 juin 2012 Partager Posté(e) le 12 juin 2012 Ah tu m'intéresse.... Patrick 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
PatrickH Posté(e) le 12 juin 2012 Partager Posté(e) le 12 juin 2012 Suite aux conseils de Sp@ro (ipkg installe python26 et ipkg install py26-serial ) et 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
TurboX Posté(e) le 12 juin 2012 Auteur Partager Posté(e) le 12 juin 2012 Ah oui moi j'ai mis python 2.5 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Diaoul Posté(e) le 12 juin 2012 Partager Posté(e) le 12 juin 2012 Ah on sent les adeptes de ipkg ici Si vous avez des problèmes 'UnicodeDecodeError' faudra utiliser le SPK de SynoCommunity qui inclut un patch pour ce problème. Normalement tant qu'il n'y a pas de manipulation de fichier accentués vous n'aurez pas de problème. 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
PatrickH Posté(e) le 13 juin 2012 Partager Posté(e) le 13 juin 2012 Ah on sent les adeptes de ipkg ici Si vous avez des problèmes 'UnicodeDecodeError' faudra utiliser le SPK de SynoCommunity qui inclut un patch pour ce problème. Normalement tant qu'il n'y a pas de manipulation de fichier accentués vous n'aurez pas de problème. Merci Diaoul pour ta suggestion néanmoins cela me sera difficile car je compte faire tourner cela sur une de mes USB station qui ne possède pas le gestionnaire de package de Synology dans le firmware ! Patrick 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
TurboX Posté(e) le 13 juin 2012 Auteur Partager Posté(e) le 13 juin 2012 Sur le site de rfxcom on peut lire : this transceiver is supported by : domogik (in version 0.2.0) 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
DjMomo Posté(e) le 13 juin 2012 Partager Posté(e) le 13 juin 2012 Merci Diaoul pour ta suggestion néanmoins cela me sera difficile car je compte faire tourner cela sur une de mes USB station qui ne possède pas le gestionnaire de package de Synology dans le firmware ! Patrick Si c'est Domogik que tu veux y faire tourner, n'essaie même pas. Sur la mienne, j'explosais les 128Mo de RAM au démarrage du logiciel... 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
TurboX Posté(e) le 13 juin 2012 Auteur Partager Posté(e) le 13 juin 2012 Je croit que mon petit 107+ risque de ne pas apprécier alors Pour l'instant je ne sais pas si je sépare sauvegarde (212+) et domotique(107+). Pour des raisons financière j'aurais bien vendu le 107+ mais ce serait plus sérieux de le garder pour le dédier à la domotique. Sinon petit script pour voir les trames en entier cette fois des sondes oregon et capteur d'ouverture de porte. https://www.dropbox.com/s/v3eil9v0rngn00t/test_tramecomplete.sh Cela donne quoi chez toi PatrickH? 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
TurboX Posté(e) le 15 juin 2012 Auteur Partager Posté(e) le 15 juin 2012 J'ai trouvé mysqldb en ipkg "py25-mysql" mais j'ai des problemes de compatibilité de versions. J'ai désinstallé python2.5 et ré-installé python2.6 et donc le module "py26-mysql" mais j'ai toujours l'erreur "libmysqlclient_r.so.14: cannot open shared object file: No such file or directory". Sinon concernant concernant mon script je décode maintenant les valeurs des sondes/capteurs. 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
PatrickH Posté(e) le 15 juin 2012 Partager Posté(e) le 15 juin 2012 ... Cela donne quoi chez toi PatrickH? De mon coté ca avance bien sur mon USB station j'arrive à lire les trames envoyées par le RFXtrx433 et à écrite dans une base MySQL avec un programme Python Ca c'est pour la partie "réception", et je suis en train d'essayer de comprendre comment je peux "envoyer" des commandes vers mes équipements X10...et là c'est un peu plus compliqué pour voir comment mélanger les deux sens car utilisant le même interface et je ne peux pas l'ouvrir dans deux programmes différents (c'est le même TTY), du genre envoyer des commandes à mon programme python qui tourne en tache de fond!? Si quelqu'un à des idées ou une solution je suis preneur ... merci d'avance Patrick 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Sp@r0 Posté(e) le 15 juin 2012 Partager Posté(e) le 15 juin 2012 (modifié) Bon comme toujours avec moi c'est un peu artisanal mais cela fonctionne bien :) Il s'agit d'un petit code qui crée un serveur web en python et du coup en ouvrant des liens cela déclenche des commandes (je dispose de 3 prises télécommandé (Ensemble home cinéma, lumière du salon, lumière derrière la TV), il permet également de piloter mon module USBIR pour envoyer des ordres à la TV depuis l'appli web ou mon appli iOS. On peut tout à fait fusionner ce programme avec vos programmes de receptions comme cela on ouvre pas 2 fois le même port et on converve un accés extérieur simple (requette http) pour piloter des envoi de commandes PS: Je sais que c'est pas très propre que j'aurais du faire cela avec des requêtes POST mais bon .... #!/usr/bin/env python2.5 # -*- coding: cp1252 -*- # # Test de l'émission de caractére avec la bête # # Auteur SPARO le 20 02 11 # # import des modules import serial import urllib import datetime import string,cgi,time from os import curdir, sep from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer import subprocess # Initilisation de la liaison serie ser = serial.Serial('/dev/ttyUSB2', 4800, timeout=0.5) # Initilisation du tableau de valeur des capteurs V_EnTete = '\x21' + '\x0F' + '\xB0' + '\xC4' class MyHandler(BaseHTTPRequestHandler): def do_GET(self): try: print self.path print self.path[:15] print self.path[15:] if self.path == "/rftx.html": f = open(curdir + sep + "/rftx.html") self.send_response(200) self.send_header('Content-type', 'text/html') self.end_headers() self.wfile.write(f.read()) f.close() return if self.path == "/rftx.html?1ON": f = open(curdir + sep + "/rftx.html") self.send_response(200) self.send_header('Content-type', 'text/html') self.end_headers() self.wfile.write(f.read()) f.close() ser.write(V_EnTete + '\x90' + '\x00') return if self.path == "/rftx.html?1OFF": f = open(curdir + sep + "/rftx.html") self.send_response(200) self.send_header('Content-type', 'text/html') self.end_headers() self.wfile.write(f.read()) f.close() ser.write(V_EnTete + '\x80' + '\x00') return if self.path == "/rftx.html?2ON": f = open(curdir + sep + "/rftx.html") self.send_response(200) self.send_header('Content-type', 'text/html') self.end_headers() self.wfile.write(f.read()) f.close() ser.write(V_EnTete + '\x91' + '\x00') return if self.path == "/rftx.html?2OFF": f = open(curdir + sep + "/rftx.html") self.send_response(200) self.send_header('Content-type', 'text/html') self.end_headers() self.wfile.write(f.read()) f.close() ser.write(V_EnTete + '\x81' + '\x00') return if self.path == "/rftx.html?3ON": f = open(curdir + sep + "/rftx.html") self.send_response(200) self.send_header('Content-type', 'text/html') self.end_headers() self.wfile.write(f.read()) f.close() ser.write(V_EnTete + '\x92' + '\x00') return if self.path == "/rftx.html?3OFF": f = open(curdir + sep + "/rftx.html") self.send_response(200) self.send_header('Content-type', 'text/html') self.end_headers() self.wfile.write(f.read()) f.close() ser.write(V_EnTete + '\x82' + '\x00') ser.write(V_EnTete + '\x80' + '\x00') return if self.path == "/rftx.html?3OFF1OFF": f = open(curdir + sep + "/rftx.html") self.send_response(200) self.send_header('Content-type', 'text/html') self.end_headers() self.wfile.write(f.read()) f.close() ser.write(V_EnTete + '\x82' + '\x00') ser.write(V_EnTete + '\x80' + '\x00') return if self.path == "/rftx.html?UPTV": f = open(curdir + sep + "/rftx.html") self.send_response(200) self.send_header('Content-type', 'text/html') self.end_headers() self.wfile.write(f.read()) f.close() f = subprocess.Popen(['/opt/bin/irsend', 'SEND_ONCE', 'SamsungSHD85', 'KEY_CHANNELUP']) return if self.path == "/rftx.html?DOWNTV": f = open(curdir + sep + "/rftx.html") self.send_response(200) self.send_header('Content-type', 'text/html') self.end_headers() self.wfile.write(f.read()) f.close() f = subprocess.Popen(['/opt/bin/irsend', 'SEND_ONCE', 'SamsungSHD85', 'KEY_CHANNELDOWN']) return if self.path == "/rftx.html?VUP": f = open(curdir + sep + "/rftx.html") self.send_response(200) self.send_header('Content-type', 'text/html') self.end_headers() self.wfile.write(f.read()) f.close() f = subprocess.Popen(['/opt/bin/irsend', 'SEND_ONCE', 'Lirc/LGson', 'KEY_VOLUMEUP']) return if self.path == "/rftx.html?VDOWN": f = open(curdir + sep + "/rftx.html") self.send_response(200) self.send_header('Content-type', 'text/html') self.end_headers() self.wfile.write(f.read()) f.close() f = subprocess.Popen(['/opt/bin/irsend', 'SEND_ONCE', 'Lirc/LGson', 'KEY_VOLUMEDOWN']) return if self.path == "/rftx.html?VMUTE": f = open(curdir + sep + "/rftx.html") self.send_response(200) self.send_header('Content-type', 'text/html') self.end_headers() self.wfile.write(f.read()) f.close() f = subprocess.Popen(['/opt/bin/irsend', 'SEND_ONCE', 'Lirc/LGson', 'KEY_MUTE']) return # Gestion des ordres vers le SAT if self.path[:15] == "/rftx.html?SAT_": f = open(curdir + sep + "/rftx.html") self.send_response(200) self.send_header('Content-type', 'text/html') self.end_headers() self.wfile.write(f.read()) f.close() f = subprocess.Popen(['/opt/bin/irsend', 'SEND_ONCE', 'SamsungSHD85', self.path[15:]]) return # Gestion des ordres vers le SON if self.path[:15] == "/rftx.html?SON_": f = open(curdir + sep + "/rftx.html") self.send_response(200) self.send_header('Content-type', 'text/html') self.end_headers() self.wfile.write(f.read()) f.close() f = subprocess.Popen(['/opt/bin/irsend', 'SEND_ONCE', 'Lirc/LGson', self.path[15:]]) return return except IOError: self.send_error(404,'File Not Found: %s' % self.path) def main(): try: server = HTTPServer(('', 8088), MyHandler) print 'started httpserver...' server.serve_forever() except KeyboardInterrupt: print '^C received, shutting down server' server.socket.close() ser.close() if __name__ == '__main__': main() Modifié le 15 juin 2012 par Sp@r0 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Diaoul Posté(e) le 15 juin 2012 Partager Posté(e) le 15 juin 2012 Ca donne envie de me mettre 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
TurboX Posté(e) le 15 juin 2012 Auteur Partager Posté(e) le 15 juin 2012 Merci sp@r0 encore une fois. Par contre je vais m'absenter donc je vais pas beaucoup avancer. PatrickH: qu'utilises-tu pour envoyer dans la base de donnée? la technique de sp@r0 ou bien directement des requêtes mysql? 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
PatrickH Posté(e) le 15 juin 2012 Partager Posté(e) le 15 juin 2012 Pour écrire dans la base de donnée je le fais directement à partir du code Python avec la librairie MySQLdb Patrick Bon comme toujours avec moi c'est un peu artisanal mais cela fonctionne bien :) Il s'agit d'un petit code qui crée un serveur web en python et du coup en ouvrant des liens cela déclenche des commandes (je dispose de 3 prises télécommandé (Ensemble home cinéma, lumière du salon, lumière derrière la TV), il permet également de piloter mon module USBIR pour envoyer des ordres à la TV depuis l'appli web ou mon appli iOS. On peut tout à fait fusionner ce programme avec vos programmes de receptions comme cela on ouvre pas 2 fois le même port et on converve un accés extérieur simple (requette http) pour piloter des envoi de commandes PS: Je sais que c'est pas très propre que j'aurais du faire cela avec des requêtes POST mais bon .... Eh oui c'est une bonne idée... je vais regarder ca de plus près... Merci Sp@ro (une fois de plus !) Patrick 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés
Rejoindre la conversation
Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.