utilisation de lecteur de badge RFID USB

Vous avez crée un script lua dont vous êtes fier, un .sh génial, un programme python hors du commun, un tuto , c'est ici que vous pouvez les partager.
Soyez précis quant aux prérequis, les manips à faire pour que votre bijou fonctionne (des chmod ?, un apt-get à faire ...)
Décrivez précisément son fonctionnement
Placez votre code entre [Quote] et {/Quote]
orbnu
Messages : 7
Enregistré le : 03 janv. 2016, 20:01

utilisation de lecteur de badge RFID USB

Message par orbnu »

Bonjour,

Voulant jouer à une époque avec un lecteur RFID USB, je me suis décidé à l'utiliser comme système d'activation/désactivation de mon alarme.

N'ayant pas trouvé beaucoup de documentation sur comment le faire, ci-dessous la méthode que j'ai employée.

Matériel utilisé :
  • Un raspberry pi 2 avec Debian 8.2 (boot sur systemd)
  • Un lecteur RFID USB 125 KHz EM4100 (trouvable sur internet pour quelques euros)
  • des badges/cartes rfid (trouvables pour trois fois rien sur internet)
Le lecteur RFID est positionné à coté de la porte d'entrée. Ce lecteur est reconnu automatiquement comme un clavier, lequel simule la saisie d'un code (10 chiffres). Il faut donc : intercepter les codes capturés (mon rpi est autonome, et n'a pas d'autre clavier branché), et envoyer le bon événement.

Etape 1 : interception du lecteur.

sous Debian 8.2, on est en systemd. N'ayant pas trop de maîtrise de cela et n'utilisant pas de clavier, je me suis contenté de patcher les scripts de tty :
Dans le fichier system/serial-getty@.service, remplacer la ligne

Code : Tout sélectionner

ExecStart=-/sbin/agetty --keep-baud 115200,38400,9600 %I $TERM
par :

Code : Tout sélectionner

ExecStart=-/bin/openvt -c 2 -f -s -w -- /home/pi/badgelisten.py
Et redémarrer le service : sudo systemctl restart



Note : dans des versions en sysvinit, il suffit d'éditer /etc/rc.local en modifiant :

Code : Tout sélectionner

1:2345:respawn:/sbin/getty 115200 tty1
Par :

Code : Tout sélectionner

1:2345:respawn:/bin/openvt -c 2 -f -s -w -- /home/pi/badgelisten.py

Etape 2 : script python
Dans domoticz, créer un device virtuel de type texte, nommé "badge"

Il suffit alors d'écrire le script suivant dans /home/pi/badgelisten.py :

Code : Tout sélectionner

#!/usr/bin/python
import httplib

conn = httplib.HTTPConnection("localhost:8080")
badge = raw_input("Badge : ")
conn.request("GET","/json.htm?type=command&param=udevice&idx={idx}&nvalue=0&svalue={txt}".format(idx=20,txt=badge))

(remplacer 20 par l'id du device badge)

Il suffit alors d'intercepter le changement de device via un script, et le code du badge entré peut être lu.
Modifié en dernier par orbnu le 05 janv. 2016, 11:29, modifié 1 fois.

vil1driver
Messages : 5514
Enregistré le : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: utilisation de lecteur de badge RFID USB

Message par vil1driver »

Salut,

Merci du partage ;)
MAJ = VIDER LE CACHE(<-Clicable)
/!\Les mises à jour de Domoticz sont souvent sources de difficultés, ne sautez pas dessus
modules.lua

Un ex domoticzien

Datawolf
Messages : 221
Enregistré le : 03 avr. 2018, 13:51

Re: utilisation de lecteur de badge RFID USB

Message par Datawolf »

[Mode déterrage=On]
Salut,
Je m'intéresse à la notion de présence pour activer une alarme avec Domoticz.
(en fait limitée pour l"instant aux détecteurs d'ouverture mais petit à petit...)

Si j'ai bien compris ta solution est filaire ? (ie lecteur RFID connecté en USB à la box domotique)
As-tu trouvé une solution sans fil depuis ?

@+
Datawolf

mercusot
Messages : 11
Enregistré le : 05 janv. 2017, 14:05

Re: utilisation de lecteur de badge RFID USB

Message par mercusot »

Directement en Z-Wave avec le mini keypad de Zipato et les puces RFID qui vont avec. Mais on n'est plus dans les mêmes budgets j'imagine.

Datawolf
Messages : 221
Enregistré le : 03 avr. 2018, 13:51

Re: utilisation de lecteur de badge RFID USB

Message par Datawolf »

Je prévois toujours de me lancer dans une solution "MySensors".
Alors pourquoi pas un lecteur RFID lowcost connecté à un arduino :?:
Mais je n'en suis pas encore là: d'abord les cameras, ensuite la récupération de ma sirène...

jisse
Messages : 6
Enregistré le : 28 sept. 2019, 09:23

Re: utilisation de lecteur de badge RFID USB

Message par jisse »

Bonjour je déterre le sujet...
je fais tourner un lecteur de badge sous rasberry (wifi) avec requêtes http vers domoticz...j'ai des scripts si ça vous tente.
Je l'avais fait precedement sous arduino avec les codes aussi...je transmets si cela vous intéresse.

vil1driver
Messages : 5514
Enregistré le : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: utilisation de lecteur de badge RFID USB

Message par vil1driver »

Salut,

Part du postulat que ça intéresse ;)
MAJ = VIDER LE CACHE(<-Clicable)
/!\Les mises à jour de Domoticz sont souvent sources de difficultés, ne sautez pas dessus
modules.lua

Un ex domoticzien

jisse
Messages : 6
Enregistré le : 28 sept. 2019, 09:23

Re: utilisation de lecteur de badge RFID USB

Message par jisse »

ok alors c'est parti
part contre, je ne sais pass pourquoi, mais ce script est particulierement gourmand en CPU
Si quelqu’un remarque une modification à faire pour eviter ce probleme, je suis preneur

Code : Tout sélectionner

#!/usr/bin/env python
# -*- coding: utf8 -*-
 
import RPi.GPIO as GPIO
import MFRC522
import signal
import time
import requests
import urllib
import json
############# Parametres #################################


#~~~~~~~~~~ Parametres Domoticz ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
domoticz_ip="192.xxx.xxx.xxx"
domoticz_port="8080"
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# IDX de Domoticz
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

# remplacer XXX par votre idx de votre widget
dummy_idx={'tagMachin': 195}

dummy_idx1={'tagTruc': 242}

continue_reading = True

# Capture SIGINT for cleanup when the script is aborted
def end_read(signal,frame):
    global continue_reading
    print ("Ctrl+C captured, ending read.")
    continue_reading = False
    GPIO.cleanup()
 
# Hook the SIGINT
signal.signal(signal.SIGINT, end_read)
 
# Create an object of the class MFRC522
MIFAREReader = MFRC522.MFRC522()
 
# Welcome message
print ("Lancement script autorisation")
print ("Press Ctrl-C to stop.")
 
# This loop keeps checking for chips. If one is near it will get the UID and authenticate
while continue_reading:
    
    # Scan for cards    
    (status,TagType) = MIFAREReader.MFRC522_Request(MIFAREReader.PICC_REQIDL)
 
    # If a card is found
    if status == MIFAREReader.MI_OK:
        print ("Card detected")
    
    # Get the UID of the card
    (status,uid) = MIFAREReader.MFRC522_Anticoll()
 
    # If we have the UID, continue
    if status == MIFAREReader.MI_OK:
 
        # Print UID
        print ("Card read UID: "+str(uid[0])+","+str(uid[1])+","+str(uid[2])+","+str(uid[3])+','+str(uid[4]))  
        # This is the default key for authentication
        key = [0xFF,0xFF,0xFF,0xFF,0xFF,0xFF]
        
                
        # Select the scanned tag
        MIFAREReader.MFRC522_SelectTag(uid)
       

        
        #ENTER Your Card UID here
        my_uid = [xxx.xxx.xxx.xxx] 
        my_uid1 =[yyy.yyy.yyy.yyy]
        
                
        #Check to see if card UID read matches your card UID
        if uid == my_uid:                #OK if matching UIDs
                 requete='http://NOM_UTILISATEUR:MOT_DE_PASSE@'+domoticz_ip+':'+domoticz_port+'/json.htm?type=command&param=switchlight&idx='+str(dummy_idx['tagMachin'])+'&switchcmd=On&level=0'
                 urllib.urlopen(requete)

                 print("Access validé")
                 print("lancement de la requete")
                 time.sleep(5)
                 print("pret")
                                        
                                       
        

        #Check to see if card UID read matches your card UID
        if uid == my_uid1:                #OK if matching UIDs
                 requete='http://'+domoticz_ip+':'+domoticz_port+'/json.htm?type=command&param=switchlight&idx='+str(dummy_idx1['tagTruc'])+'&switchcmd=On&level=0'
                 urllib.urlopen(requete)

                 print("Access validé")
                 print("lancement de la requete")
                 time.sleep(5)
                 print("pret")
                   
            
        
##        # Authenticate
##        status = MIFAREReader.MFRC522_Auth(MIFAREReader.PICC_AUTHENT1A, 8, key, uid)
##
##        # Check if authenticated
##        if status == MIFAREReader.MI_OK:
##            MIFAREReader.MFRC522_Read(8)
##            MIFAREReader.MFRC522_StopCrypto1()
##        else:
##            print "Authentication error"
Modifié en dernier par jisse le 25 juin 2020, 11:06, modifié 3 fois.

Keros
Messages : 406
Enregistré le : 23 juil. 2019, 20:57

Re: utilisation de lecteur de badge RFID USB

Message par Keros »

Mets s'il te plait ton code entre les balises "code" avec le bouton </>, se sera plus lisible.

Code : Tout sélectionner

Ton code s'affichera comme ceci 

jisse
Messages : 6
Enregistré le : 28 sept. 2019, 09:23

Re: utilisation de lecteur de badge RFID USB

Message par jisse »

Ok la modif est faite...

Répondre