-
Compteur de contenus
2449 -
Inscription
-
Dernière visite
-
Jours gagnés
3
Tout ce qui a été posté par Sp@r0
-
Bon j'ai mis une vidéo du cadre en fonctionnement avec des photos de ma cuisine ... VIDEO DU CADRE !!! Bon les trucs qui reste à voir : - améliorer le système de recadrage des photos qui reste perfectible sur certaine photo vertical - modifier le hardware du cadre avec un circuit maison pour ne plus avoir à appuyer sur le bouton pour valider le mode USB - commander la marche du cadre depuis le NAS => je vais en profiter pour développer la partie commande en X10 RF de mon projet de domotique
-
il te suffit de connecter un switch gigabits sur ta box et de connecter tous les
-
Ds211 Performances Lamentables
Sp@r0 a répondu à un(e) sujet de lolo600zzr dans Installation, Démarrage et Configuration
-
-
Ds211 Performances Lamentables
Sp@r0 a répondu à un(e) sujet de lolo600zzr dans Installation, Démarrage et Configuration
-
A titre d'informations : 10 Mo/s c'est le d
-
2 Questions Sur Un Futur X11J
Sp@r0 a répondu à un(e) question de Bruno N dans Questions avant achat
[quote name='Bruno N -
Alors pour le probl
-
Si tu as cr
-
Merci !!! Je vais essayer d'en faire une nouvelle avec le nouveau programme qui me permet de piloter l'engin depuis l'iphone Je ferais une vid
-
Nouvelle version du code qui utilise un serveur WEB en python qui fait
-
Mise à jour du code support d'un type de sonde en plus, divers corrections ... #!/usr/bin/env python2.5 # -*- coding: cp1252 -*- # # Test du python par PSEIBEL # Essai de divers fonction # Auteur PSEIBEL le 17 01 10 # # # Paramétrage du script # Capteur_00 : Temp intérieur # Capteur_01 : Hygro intérieur # Capteur_02 : Temp extérieur # Capteur_03 : Consommation électrique # # import des modules import serial import urllib import datetime # Fonction qui décripte a qui cela appartient def Cherche_Sonde (trame): # Init de la réponse type_sonde = "nada" # Contrôle oregon type 1 if len(trame) == 20: if trame[:8] == [1, 10, 2, 13, 1, 0, 14, 14]: type_sonde = "THGR228_00" if len(trame) == 20: if trame[:8] == [1, 10, 2, 13, 2, 0, 3, 7]: type_sonde = "THGR228_01" if len(trame) == 24: if trame[:8] == [5, 10, 6, 13, 0, 0, 0, 13]: type_sonde = "THR918_00" if len(trame) == 8: if trame == [6, 0, 9, 15, 0, 0, 15, 15]: type_sonde = "X10_001" if len(trame) == 8: if trame == [6, 0, 9, 15, 2, 0, 13, 15]: type_sonde = "X10_000" if len(trame) == 30: if trame[:2] == [14, 10]: if trame[4:6] == [8, 7]: type_sonde = "CM113_00" return type_sonde # Décodage THGR228 def THGR228 (trame): temp_sign = (trame[13]== V_temp = (((trame[10]*100)+(trame[11]*10)+trame[8])/10.0)*(pow(-1,temp_sign)) V_hygro = (trame[15]*10)+trame[12] print V_temp print V_hygro return V_temp, V_hygro # Décodage THR918N def THR918N (trame): temp_sign = (trame[13]== V_temp = (((trame[10]*100)+(trame[11]*10)+trame[8])/10.0)*(pow(-1,temp_sign)) V_hygro = (trame[15]*10)+trame[12] V_press = (trame[16]*16)+trame[17]+856 print V_temp print V_hygro print V_press return V_temp, V_hygro, V_press # Décodage CM113_00 def CM113 (trame): V_puissance = ((trame[8]*pow(16,3))+(trame[9]*pow(16,2))+(trame[6]*16)+trame[7])*24 print V_puissance return V_puissance # Ecriture SQL def Ecriture_SQL(): try: V_datevaleur = V_maintenant.strftime("%Y-%m-%d%%20%H:%M:00") f = urllib.urlopen("http://localhost/ajout.php?table=capteur_00&valeur=" + S_Sonde1_1 + "&horodate=" + V_datevaleur) print ("http://localhost/ajout.php?table=capteur_00&valeur=" + S_Sonde1_1 + "&horodate=" + V_datevaleur) f = urllib.urlopen("http:/localhost/ajout.php?table=capteur_01&valeur=" + S_Sonde1_2 + "&horodate=" + V_datevaleur) print ("http://localhost/ajout.php?table=capteur_01&valeur=" + S_Sonde1_2 + "&horodate=" + V_datevaleur) f = urllib.urlopen("http://localhost/ajout.php?table=capteur_02&valeur=" + S_Sonde2_1 + "&horodate=" + V_datevaleur) print ("http://localhost/ajout.php?table=capteur_02&valeur=" + S_Sonde2_1 + "&horodate=" + V_datevaleur) f = urllib.urlopen("http://localhost/ajout.php?table=capteur_03&valeur=" + S_Sonde2_2 + "&horodate=" + V_datevaleur) print ("http://localhost/ajout.php?table=capteur_03&valeur=" + S_Sonde2_1 + "&horodate=" + V_datevaleur) f = urllib.urlopen("http://localhost/ajout.php?table=capteur_04&valeur=" + S_CM113 + "&horodate=" + V_datevaleur) print ("http://localhost/ajout.php?table=capteur_04&valeur=" + S_CM113 + "&horodate=" + V_datevaleur) f = urllib.urlopen("http://localhost/ajout.php?table=capteur_05&valeur=" + S_Sonde3_1 + "&horodate=" + V_datevaleur) print ("http://localhost/ajout.php?table=capteur_05&valeur=" + S_Sonde3_1 + "&horodate=" + V_datevaleur) f = urllib.urlopen("http://localhost/ajout.php?table=capteur_06&valeur=" + S_Sonde3_2 + "&horodate=" + V_datevaleur) print ("http://localhost/ajout.php?table=capteur_06&valeur=" + S_Sonde3_2 + "&horodate=" + V_datevaleur) f = urllib.urlopen("http://localhost/ajout.php?table=capteur_07&valeur=" + S_Sonde3_3 + "&horodate=" + V_datevaleur) print ("http://localhost/ajout.php?table=capteur_07&valeur=" + S_Sonde3_3 + "&horodate=" + V_datevaleur) f.close() except: print "Envoi KO" return # Initialisation du port série si pas de trame def init_port_serie(): # Fermeture de liaison série ser.close() # Initilisation de la liaison serie ser = serial.Serial('/dev/ttyUSB0', 4800, timeout=0.25) return #------------------------------------------- # Boucle principal #------------------------------------------- # Initilisation de la liaison serie ser = serial.Serial('/dev/ttyUSB0', 4800, timeout=0.25) # Initilisation du tableau de valeur des capteurs V_H_CM113 = [] V_H_Sonde1_1 = [] V_H_Sonde1_2 = [] V_H_Sonde2_1 = [] V_H_Sonde2_2 = [] V_H_Sonde3_1 = [] V_H_Sonde3_2 = [] V_H_Sonde3_3 = [] V_H_Sonde3_4 = [] S_CM113 = "0" S_Sonde1_1 = "0" S_Sonde1_2 = "0" S_Sonde2_1 = "0" S_Sonde2_2 = "0" S_Sonde3_1 = "0" S_Sonde3_2 = "0" S_Sonde3_3 = "0" S_Sonde3_4 = "0" deja_ecrit = False # Boucle de lecture sur la liaison V_boucle = 0 V_infini = 0 try: while (V_infini < 2): while (V_boucle < 3600): V_tramebrute = ser.readline() # copie de la trame dans un tableau dynamique V_trametableau = [] for V_i in range(0,len(V_tramebrute),1): V_trametableau.append(ord(V_tramebrute[V_i])/16) V_trametableau.append(ord(V_tramebrute[V_i])%16) # Vérification validité trame if len(V_trametableau) > 2: print V_trametableau V_longtheorie = (V_trametableau[0]*16+V_trametableau[1])/8 V_longreel = len(V_tramebrute) - 2 if (V_longreel > 2) and (V_longreel > 2): V_boucle = 0 print "Trame Valide" V_trameutile = V_trametableau[2:(2*V_longtheorie+2)] print V_trameutile # Recherche du type de la sonde V_typesonde = Cherche_Sonde(V_trameutile) print V_typesonde if V_typesonde == "THGR228_00": V_poubelle = THGR228(V_trameutile) V_H_Sonde1_1.append (V_poubelle[0]) V_H_Sonde1_2.append (V_poubelle[1]) V_Sonde1_1 = 0 V_Sonde1_2 = 0 for V_i in range(0,len(V_H_Sonde1_1),1): V_Sonde1_1 = V_Sonde1_1 + V_H_Sonde1_1[V_i] V_Sonde1_2 = V_Sonde1_2 + V_H_Sonde1_2[V_i] V_Sonde1_1 = V_Sonde1_1 / len(V_H_Sonde1_1) V_Sonde1_2 = V_Sonde1_2 / len(V_H_Sonde1_2) S_Sonde1_1 = "%.1f" % V_Sonde1_1 S_Sonde1_2 = "%.1f" % V_Sonde1_2 print V_H_Sonde1_1 print S_Sonde1_1 print V_H_Sonde1_2 print S_Sonde1_2 if V_typesonde == "THGR228_01": V_poubelle = THGR228(V_trameutile) V_H_Sonde2_1.append (V_poubelle[0]) V_H_Sonde2_2.append (V_poubelle[1]) V_Sonde2_1 = 0 V_Sonde2_2 = 0 for V_i in range(0,len(V_H_Sonde2_1),1): V_Sonde2_1 = V_Sonde2_1 + V_H_Sonde2_1[V_i] V_Sonde2_2 = V_Sonde2_2 + V_H_Sonde2_2[V_i] V_Sonde2_1 = V_Sonde2_1 / len(V_H_Sonde2_1) V_Sonde2_2 = V_Sonde2_2 / len(V_H_Sonde2_2) S_Sonde2_1 = "%.1f" % V_Sonde2_1 S_Sonde2_2 = "%.1f" % V_Sonde2_2 print V_H_Sonde2_1 print S_Sonde2_1 print V_H_Sonde2_2 print S_Sonde2_2 if V_typesonde == "THR918_00": V_poubelle = THR918N(V_trameutile) V_H_Sonde3_1.append (V_poubelle[0]) V_H_Sonde3_2.append (V_poubelle[1]) V_H_Sonde3_3.append (V_poubelle[2]) V_Sonde3_1 = 0 V_Sonde3_2 = 0 V_Sonde3_3 = 0 for V_i in range(0,len(V_H_Sonde3_1),1): V_Sonde3_1 = V_Sonde3_1 + V_H_Sonde3_1[V_i] V_Sonde3_2 = V_Sonde3_2 + V_H_Sonde3_2[V_i] V_Sonde3_3 = V_Sonde3_3 + V_H_Sonde3_3[V_i] V_Sonde3_1 = V_Sonde3_1 / len(V_H_Sonde3_1) V_Sonde3_2 = V_Sonde3_2 / len(V_H_Sonde3_2) V_Sonde3_3 = V_Sonde3_3 / len(V_H_Sonde3_3) S_Sonde3_1 = "%.1f" % V_Sonde3_1 S_Sonde3_2 = "%.0f" % V_Sonde3_2 S_Sonde3_3 = "%.0f" % V_Sonde3_3 print V_H_Sonde3_1 print S_Sonde3_1 print V_H_Sonde3_2 print S_Sonde3_2 print V_H_Sonde3_3 print S_Sonde3_3 if V_typesonde == "CM113_00": V_poubelle = CM113(V_trameutile) V_H_CM113.append (V_poubelle) V_CM113 = 0 for V_i in range(0,len(V_H_CM113),1): V_CM113 = V_CM113 + V_H_CM113[V_i] V_CM113 = V_CM113 / len(V_H_CM113) S_CM113 = "%.0f" % V_CM113 print V_H_CM113 print S_CM113 print "--------------" else: print "Trame ko" print "--------------" # Ecriture des données toutes les 5 minutes V_maintenant = datetime.datetime.now() V_minutestr = V_maintenant.strftime("%M") if ((V_minutestr[len(V_minutestr)-1] == "5") or (V_minutestr[len(V_minutestr)-1] == "0")): if not deja_ecrit: Ecriture_SQL() V_H_CM113 = [] V_H_Sonde1_1 = [] V_H_Sonde1_2 = [] V_H_Sonde2_1 = [] V_H_Sonde2_2 = [] V_H_Sonde3_1 = [] V_H_Sonde3_2 = [] V_H_Sonde3_3 = [] V_H_Sonde3_4 = [] deja_ecrit = True else: deja_ecrit = False V_boucle = V_boucle + 1 init_port_serie() except KeyboardInterrupt: # Fermeture de liaison série ser.close()
-
Alors juste une mise
-
Temps De D
Sp@r0 a répondu à un(e) sujet de mikael2235 dans Installation, Démarrage et Configuration
J'ai red -
Ajouter Un Module Au Kernel D'un Synology
Sp@r0 a répondu à un(e) sujet de haliway dans Modifications Logiciels
Il suffit d'installer l'environnement de compilation synology (GPL + toolschains) et de valider ce module dans la configuration du kernel, pour le chargement c'est insmod et le d -
-
[Linux] Connexion Sans Mot De Passe Avec L'utilisateur "admin" Ne Marche Pas
Sp@r0 a répondu à un(e) sujet de King76 dans Terminal Telnet et SSH
Lftp sait faire de la copie diff -
[Linux] Connexion Sans Mot De Passe Avec L'utilisateur "admin" Ne Marche Pas
Sp@r0 a répondu à un(e) sujet de King76 dans Terminal Telnet et SSH
Si tu ne veux pas te faire chier sous Linux recherche lftp sur le forum c est encore bien moins compliqu -
Je vous souhaite
-
-
-
Voilà je vous expose le concept, sur mon syno je dispose des informations suivantes : - des photos - ma domotique (températures, hygrométries, conso EDF, pression atmosphérique) - une connexion internet pour récupérer plein d'autres infos Mais je trouve un peu pénible de ne pas avoir d'afficheur qui m'affiche cela directement sans passez par un navigateur internet, au début je voulais utilisez un mini écran supportant la technologie DisplayLink (genre le Mino 720S) mais ces produits sont difficiles à trouver et surtout très chère !!! Après pas mal de recherche j'ai finalement sélectionner ce produit : Ce cadre photo numériques 8" coûte € (SAMSUNG SPF87H) , mais je l'ai acheter d'occasion 40€. Il existe également un modèle 10"(SAMSUNG SPF107H mais il nécessite une alimentation externe). Cette gamme de produit implante une fonction "mini-monitor" qui permet normalement d'utiliser le cadre photo numérique comme un écran usb (un peu comme la technologie displayLink mais en lowcost) Je me suis grandement inspiré de ce projet mais j'ai préféré le traduire et l'adapter pour que cela tourne sous python (du coup mon code est compatible avec tous synos disposant d'IPKG) (module pyUSB + python 2.5) Donc ce que je parviens à faire : - Achat du produit OK - Protocole USB OK (je vous conseil Bus Hound pas trés connu mais vraiment super mieux que usbsniff) - Codage en python pour envoyer une image fixe OK (enfin presque reste quelques petits bugs) - Affichage des photos de la photostation En cours - Affichage de la domotique KO - Affichage d'infos du web KO Alors ce la fonctionne vraiment bien je vous fournit mon code actuel encore largement perfectible (PS : les images doivent avoir la même résolution que le cadre) #!/usr/bin/env python2.5 # # Programme de gestion du SPF 87 H # V 0.0 => En gros c est le premier truc qui fait qq chose !!! # # Import des librairies necessaires import sys import os import time import struct import usb MAXBUFFER = 0xffff # Cherche les peropheriques usb def Cherche_USB(V_vendor, V_product): busses = usb.busses() for bus in busses: for dev in bus.devices: if dev.idVendor == V_vendor and dev.idProduct == V_product: print "Trouvez : " + hex(dev.idVendor) + " \ " + hex(dev.idProduct) return dev print "Nada rien vue ..." return 0 # Basculement en mode mini-monitor def Changement_MODE(dev): # Une petite verif assert dev.idVendor == 0x04E8 assert dev.idProduct == 0x2033 # Init conf = dev.configurations[0] iface = conf.interfaces[0][0] # On demande l'ouverture du peripherique handle = dev.open() handle.detachKernelDriver(iface.interfaceNumber) handle.setConfiguration(conf) handle.claimInterface(iface) handle.setAltInterface(iface) # Quelques preparatifs res = handle.getString(dev.iManufacturer,256) print "usb_get_string_simple : " + res + " \n" S_trame = [0] * 254 # On envoi la trame magique qui va planter mais on le sait try: res = handle.controlMsg(usb.TYPE_STANDARD | usb.ENDPOINT_IN, usb.REQ_GET_DESCRIPTOR, S_trame, 0xfe, 0xfe, 1000) except: print "Changement de mode OK" # Init du mode mini-monitor def Init_IMAGE(dev): # Une petite verif assert dev.idVendor == 0x04E8 assert dev.idProduct == 0x2034 # Init conf = dev.configurations[0] iface = conf.interfaces[0][0] endpoint = iface.endpoints[1] # On demande l'ouverture du peripherique handle = dev.open() handle.reset() handle.setConfiguration(1) handle.claimInterface(0) # Quelques preparatifs res = handle.getString(dev.iManufacturer,256) print "usb_get_string_simple : " + res + " \n" for V_i in range(3): print "Endpoint:",hex(iface.endpoints[V_i].address) print handle.resetEndpoint(iface.endpoints[V_i].address) print handle.clearHalt(iface.endpoints[V_i].address) return handle # Chargement d'une image def Changement_IMAGE(handle, f_im): S_image = f_im.read() L_trame = len(S_image) + 12 print hex(L_trame) S_trame = '\xa5'+'\x5a' + '\x09' + '\x04' + chr((L_trame%65536)%256) + chr((L_trame%65536)/256) + chr(L_trame/65536) + '\x00' + '\x46' + '\x00' + '\x00' + '\x00' print hex(ord(S_trame[4])) print hex(ord(S_trame[5])) print len(S_trame) V_buf = S_trame + S_image print " Longeur init + fichier : %d" % len(V_buf) if len(V_buf)<=MAXBUFFER: V_buffer = V_buf.ljust(MAXBUFFER, '\x00'); print " Longeur buffer : %d" % len(V_buffer) res = handle.bulkWrite(0x2,V_buffer,1000) reqBuffer = '\x00' res = handle.controlMsg(0xc0, 0x6, reqBuffer, value = 0, index = 0, timeout = 100) else: V_i = 0 while V_i < len(V_buf): V_bufferA = V_buf[V_i:(V_i + MAXBUFFER)] V_i = V_i + MAXBUFFER print " envoi morceau : %d" % len(V_bufferA) V_buffer = V_bufferA.ljust(MAXBUFFER, '\x00'); res = handle.bulkWrite(0x2,V_buffer,1000) reqBuffer = '\x00' res = handle.controlMsg(0xc0, 0x6, reqBuffer, value = 0, index = 0, timeout = 100) # test control transfert #res = handle.ctrltransfer(0xc0, 0x6, 0, 0, 0x2) #reqBuffer = '\x00' #res = handle.controlMsg(0xc0, 0x6, reqBuffer, value = 0, index = 0, timeout = 100) # Boucle principal on a vue plus elegant mais cela fontionne while 1: # SPF en mode stockage de masse dev = Cherche_USB(0x04E8, 0x2033) if dev != 0: print "Passage en mode mini-monitor" Changement_MODE(dev) # SPF en mode mini-monitor rdev = Cherche_USB(0x04E8, 0x2034) if rdev != 0: print "Lancement de l'envoi des images" handle = Init_IMAGE(rdev) while 1: print "Chargement image" f_image = open('image1.jpg', 'r') Changement_IMAGE(handle, f_image) time.sleep(5) print "Chargement image" f_image1 = open('image2.jpg', 'r') Changement_IMAGE(handle, f_image1) time.sleep(5) print "Chargement image" f_image2 = open('image3.jpg', 'r') Changement_IMAGE(handle, f_image2) time.sleep(5) time.sleep(1)