# README.md

## Requisitos

Instalar Python 3.12

Verificar:

```bash
python --version
```

---

## Crear entorno virtual

```bash
python -m venv venv
```

Activar:

```bash
venv\Scripts\activate
```

---

## Instalar dependencias

```bash
pip install pyserial
pip install requests
pip install pynput
pip install keyboard
pip install pyinstaller
```

o

```bash
pip install -r requirements.txt
```

requirements.txt

```text
pyserial
requests
pynput
keyboard
```

---

## Configuración

Editar:

```python
API_URL = "https://tu-api.com/api/access/validate"

API_TOKEN = "token-demo"

ARDUINO_PORT = "COM3"
```

---

## Prueba local

Ejecutar:

```bash
python access_client.py
```

Escanear QR.

Revisar:

```text
C:\AccessControl\logs\access.log
```

---

## Formato esperado de API

POST

```http
/api/access/validate
```

Body

```json
{
  "qr": "DEMO123456789"
}
```

Respuesta permitida

```json
{
  "authorized": true,
  "command": "E",
  "message": "Acceso autorizado"
}
```

Respuesta denegada

```json
{
  "authorized": false,
  "command": "N",
  "message": "Acceso denegado"
}
```

Comandos Arduino

```text
E = Entrada

S = Salida

M = Emergencia

N = Error / Denegado
```

---

## Generar EXE

```bash
pyinstaller ^
--onefile ^
--noconsole ^
access_client.py
```

Resultado:

```text
dist\
  access_client.exe
```

---

## Instalación

Crear carpeta:

```text
C:\AccessControl
```

Copiar:

```text
access_client.exe
```

a:

```text
C:\AccessControl
```

Crear:

```text
C:\AccessControl\logs
```

---

## Inicio automático Windows

Abrir:

```text
taskschd.msc
```

Programador de tareas.

Crear tarea.

Nombre:

```text
Access Control Client
```

Trigger:

```text
Al iniciar el sistema
```

Acción:

```text
Iniciar programa
```

Programa:

```text
C:\AccessControl\access_client.exe
```

Opciones:

```text
Ejecutar si el usuario inició sesión o no

Ejecutar con privilegios más altos
```

Guardar.

---

## Verificar

Reiniciar Windows.

Abrir:

```text
Administrador de tareas
```

Verificar:

```text
access_client.exe
```

Escanear QR.

Verificar logs:

```text
C:\AccessControl\logs\access.log
```

---

## Diagnóstico

Puerto COM

Verificar:

```text
Administrador de dispositivos

Puertos (COM y LPT)
```

Ejemplo:

```text
USB-SERIAL CH340 (COM3)
```

---

## Logs

Ejemplo

```text
2026-06-19 08:00:00
QR LEIDO => DEMO123456789

API => AUTH=True CMD=E

COMANDO ENVIADO => E
```

---

## Próxima versión recomendada

* Archivo config.json.
* Actualización remota.
* Identificador único de torniquete.
* Caché offline.
* Heartbeat al servidor.
* TLS mutuo entre cliente y API.
* Servicio Windows nativo (Win32 Service).

```
```
