# Installazione autotimbratura Obolo su Ubuntu

Istruzioni passo-passo per deploy su server Ubuntu (o PC sempre acceso agli orari delle timbrature).

---

## 1. Prerequisiti sul sistema

```bash
sudo apt update
sudo apt install -y python3 tzdata
```

Verifica la versione di Python (serve **3.9+**; su Ubuntu 22.04 / 24.04 è inclusa di default):

```bash
python3 --version
```

---

## 2. Copia la cartella sul server

Copia l’intera cartella **`obolo-autotimbratura`** sul server (es. `scp`, `rsync`, repository git), in un percorso stabile. Esempio:

```text
/home/TUO_UTENTE/obolo-autotimbratura
```

Sostituisci `TUO_UTENTE` e il percorso con valori reali.

---

## 3. Configurazione `local.env`

```bash
cd /home/TUO_UTENTE/obolo-autotimbratura
cp local.env.example local.env
nano local.env
```

Controlla almeno:

- `OBOL_AZIENDA` — id azienda API
- `OBOL_CODICE_DIPENDENTE` — codice dipendente
- `OBOL_LAT` / `OBOL_LON` — coordinate sede (se diverse dal default)

Salva ed esci. Il file **`local.env` non va versionato** (è in `.gitignore`).

---

## 4. Permessi (consigliato)

```bash
chmod 600 local.env
chmod +x obolo_autotimbra.py
```

---

## 5. Prova manuale (senza cron)

Dalla cartella dello script:

```bash
cd /home/TUO_UTENTE/obolo-autotimbratura
python3 obolo_autotimbra.py mattina --dry-run --no-sleep
```

- **`--dry-run`**: non invia la timbratura (POST), esegue login e lettura movimenti e logica anti-duplicato.
- **`--no-sleep`**: non attende la finestra random (solo per test).

Se compaiono errori HTTP o messaggi dall’API, verifica `local.env`. Spesso **`OBOL_AZIENDA`** e **`OBOL_CODICE_DIPENDENTE`** vanno scambiati se il login fallisce.

---

## 6. Crontab

Apri il crontab dell’utente che deve eseguire lo script:

```bash
crontab -e
```

Incolla (e **sostituisci** `/home/TUO_UTENTE` con il percorso reale):

```cron
CRON_TZ=Europe/Rome
PATH=/usr/local/bin:/usr/bin:/bin

30 8 * * 1-5 /usr/bin/python3 /home/TUO_UTENTE/obolo-autotimbratura/obolo_autotimbra.py mattina >> /var/log/obolo_autotimbra.log 2>&1
0 13 * * 1-5 /usr/bin/python3 /home/TUO_UTENTE/obolo-autotimbratura/obolo_autotimbra.py pranzo >> /var/log/obolo_autotimbra.log 2>&1
0 14 * * 1-5 /usr/bin/python3 /home/TUO_UTENTE/obolo-autotimbratura/obolo_autotimbra.py pomeriggio >> /var/log/obolo_autotimbra.log 2>&1
0 18 * * 1-5 /usr/bin/python3 /home/TUO_UTENTE/obolo-autotimbratura/obolo_autotimbra.py sera >> /var/log/obolo_autotimbra.log 2>&1
```

### Log senza permessi su `/var/log/`

Se non puoi scrivere in `/var/log/`:

```bash
mkdir -p ~/obolo-autotimbratura/logs
```

Nel crontab usa ad esempio:

```text
>> /home/TUO_UTENTE/obolo-autotimbratura/logs/cron.log 2>&1
```

al posto di `/var/log/obolo_autotimbra.log`.

Salva ed esci dall’editor.

---

## 7. Verifica

```bash
crontab -l
```

Dopo il primo orario utile, controlla il file di log. Per test rapido si può spostare temporaneamente una riga cron a 2–3 minuti dall’ora corrente, attendere l’esecuzione, poi ripristinare gli orari corretti.

---

## 8. Note operative

- La macchina deve essere **accesa e raggiungibile su Internet** agli orari del cron.
- Lo script carica automaticamente **`local.env`** dalla **stessa directory** di `obolo_autotimbra.py`.
- Se `local.env` è altrove, imposta la variabile **`OBOL_ENV_FILE`** con il path assoluto del file, ad esempio in una riga cron (prima del comando) o in uno script wrapper che esporta la variabile e poi lancia `python3 ...`.

Esempio di riga cron con env file custom:

```cron
OBOL_ENV_FILE=/percorso/assoluto/local.env
30 8 * * 1-5 /usr/bin/python3 /home/TUO_UTENTE/obolo-autotimbratura/obolo_autotimbra.py mattina >> /home/TUO_UTENTE/obolo-autotimbratura/logs/cron.log 2>&1
```

*(Nota: in alcune installazioni cron la variabile sulla riga precedente non viene ereditata; in quel caso usa uno script `.sh` che fa `export OBOL_ENV_FILE=...` e poi chiama `python3`.)*

---

## Riferimento slot e comandi

| Argomento script | Finestra (Italia) | Tipo API |
|------------------|-------------------|----------|
| `mattina`        | 08:30–09:00       | 1 ingresso |
| `pranzo`         | 13:00–13:15       | 2 uscita |
| `pomeriggio`     | 14:00–14:10       | 1 ingresso |
| `sera`           | 18:00–18:30       | 2 uscita |

```bash
python3 obolo_autotimbra.py {mattina|pranzo|pomeriggio|sera} [--dry-run] [--no-sleep]
```
