Aller au contenu

Domotique Sur Syno


Messages recommandés

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 :):)

Lien vers le commentaire
Partager sur d’autres sites

  • Réponses 173
  • Créé
  • Dernière réponse

Meilleurs contributeurs dans ce sujet

Meilleurs contributeurs dans ce sujet

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.

Lien vers le commentaire
Partager sur d’autres sites

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.

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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é par TurboX
Lien vers le commentaire
Partager sur d’autres sites

:) 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.

Lien vers le commentaire
Partager sur d’autres sites

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.

Lien vers le commentaire
Partager sur d’autres sites

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.

Lien vers le commentaire
Partager sur d’autres sites

Ah on sent les adeptes de ipkg ici :P

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.

Lien vers le commentaire
Partager sur d’autres sites

Ah on sent les adeptes de ipkg ici :P

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

Lien vers le commentaire
Partager sur d’autres sites

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...

Lien vers le commentaire
Partager sur d’autres sites

Je croit que mon petit 107+ risque de ne pas apprécier alors :o

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?

Lien vers le commentaire
Partager sur d’autres sites

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.

Lien vers le commentaire
Partager sur d’autres sites

...

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

Lien vers le commentaire
Partager sur d’autres sites

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é par Sp@r0
Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.


×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer.