Widgets personalizzati

Hai un sensore non supportato dall'applicazione? Crea il tuo widget personalizzato! Scrivi il tuo script sul Raspberry Pi e leggi i risultati dall'app RaspController.

1. Sul tuo Raspberry Pi crea la cartella che ospiterà il tuo progetto
Apri il terminale, vai nella cartella dove tieni i tuoi progetti e crea una nuova cartella (io lo chiamerò “MyCustomWidgets”, ma puoi chiamarla come vuoi):

mkdir "MyCustomWidgets"


2. Crea il tuo ambiente virtuale

Entra nella cartella del tuo progetto:

cd "MyCustomWidgets"

e scegli un nome per il tuo ambiente (io lo chiamerò raspc_env, ma puoi chiamarlo come vuoi), questo crea una nuova cartella chiamata “raspc_env”

python3 -m venv raspc_env


3. Attiva l’ambiente virtuale

source raspc_env/bin/activate

Noterai che il tuo prompt del terminale cambierà, mostrando il nome dell’ambiente (es. (raspc_env) $). Questo significa che sei dentro l’ambiente virtuale!


4. Aggiungi il tuo script personalizzato
Crea i tuoi script Python (che chiameremo nel nostro esempio myscript.py) all’interno della tua cartella di progetto “MyCustomWidgets”..
Lo script eseguirà la lettura del sensore e terminerà con la stampa di almeno un risultato, questo risultato verrà catturato da RaspController e visualizzato.

Il risultato deve essere inserito all’interno dei tag numerati <result></result>. Possono essere stampati fino a 9 risultati (esempio: <result9>123.4</result9>).

Non eseguire cicli infiniti (while True) nel tuo script. Il flusso di lavoro deve essere:
a. inizio dello script;
b. lettura dei dati dal sensore (ed eventuale elaborazione);
c. stampa dei risultati; esempio:  print(result1)...
d. fine dello script.

Se hai esegenza di visualizzare risultati costantemente aggiornati, usa la funzione “ricorsiva” dell’app che
– eseguirà il tuo script
– mostrerà i risultati
– attenderà un secondo
– eseguirà nuovamente lo script (sarà RaspController ad effettuare un ciclo finchè l’app sarà in funzione).

Se qualcosa viene stampato dallo script senza i tag <result>, l’applicazione mostrerà una finestra di dialogo con il testo; utile per segnalare errori:

print("Questo è il testo del mio errore")


5. Disattiva l’ambiente virtuale

Quando hai finito di lavorare, ti basta digitare:

deactivate

Il prompt del terminale tornerà normale.

 

Attenzione: gli ambienti virtuali di Python (la cartella raspc_env) non possono essere spostati o rinominati dopo la loro creazione.
Se il percorso assoluto viene modificato perché le cartelle genitori sono state rinominate o spostate, occorre eliminare l’ambiente virtuale con:

rm -rf raspc_env

e creare un nuovo ambiente pulito:

python3 -m venv raspc_env

import random 

# Generating a string that contains a random number
# This simulates reading sensor data
value1 = str(random.randint(0, 100)) 
value2 = str(random.randint(0, 100)) 
value3 = str(random.randint(0, 100)) 

# Preparation of the result 
result1 = f"<result1>{value1}</result1>"
result2 = f"<result2>{value2}</result2>"
result3 = f"<result3>{value3}</result3>"

# Print the result that will be read by the application 
print(result1) 
print(result2) 
print(result3)

Script di esempio in python

Configurazione dell'app

Crea un nuovo “Widget utente” inserendo il nome e il comando per eseguire il tuo script.
(ad esempio: "/home/pi/MyCustomWidgets/raspc_env/bin/python" "/home/pi/MyCustomWidgets/myscript.py").

Quando utilizzi il Widget, lo script verrà eseguito e alla fine il risultato verrà mostrato nell’applicazione.

In questo passaggio è possibile assegnare un’etichetta da associare a ciascun risultato.

Ricorsività

Importante: non usare cicli infiniti nei tuoi script per mostrare risultati aggiornati. Usa invece la funzione “Ricorsivo” appropriata dell’app.

L’app eseguirà lo script e quando riceverà un risultato lo visualizzerà. In modalità “ricorsivo”, dopo aver visualizzato i dati, lo script verrà eseguito di nuovo. Se lo script fallisce o viene visualizzata una finestra di dialogo, la ricorsione si interrompe e lo script deve essere riavviato manualmente.

Se la modalità “Ricorsivo” è attiva, è possibile impostare un valore di ritardo tra una lettura e l’altra (si consiglia almeno 1 secondo).

Risultati

I risultati ottenuti dallo script saranno visualizzati nell’applicazione insieme alle etichette assegnate durante la configurazione.

È possibile visualizzare i risultati come testo normale o come indicatore.

Uso dell'indicatore

RaspController - Custom widget

Invece del testo normale, puoi mostrare i risultati con un indicatore.

Nella fase di configurazione, seleziona “Usa indicatore” e imposta anche il valore minimo, il valore massimo, l’unità di misura e il numero di cifre decimali.

IMPORTANTE: per usare l’indicatore, lo script deve restituire solo un valore numerico (senza unità di misura): <result1>27,2</result1>

Se restituisci un valore che contiene anche una stringa (ad esempio <result1>Temp = 27,2°C</result1>), l’indicatore non può essere utilizzato e il risultato verrà visualizzato come testo normale.