Introduzione
In questa guida vedremo come realizzare un keypad numerico touch con OpenHASP, da integrare in Home Assistant per controllare l’integrazione Manual Alarm Control Panel.
Il progetto consente di gestire l’attivazione e la disattivazione dell’allarme direttamente da un display, tramite codice numerico, con feedback visivo in tempo reale sullo stato del sistema.
Se vuoi confrontarti con altri utenti o approfondire OpenHASP, puoi unirti al gruppo Telegram non ufficiale di OpenHASP, dove la community condivide consigli, progetti e soluzioni ai problemi comuni.
Requisiti
Per completare il progetto servono:
- Un dispositivo compatibile con OpenHASP (es. un display Nextion o simile).
- Un’istanza Home Assistant con MQTT attivo.
- L’integrazione Manual Alarm Control Panel configurata.
- Un’entità di tipo
input_text
per memorizzare temporaneamente il codice (input_text.openhasp_code
).
Layout dell’interfaccia (file JSONL)
Il layout del keypad viene definito tramite un file .jsonl
, che descrive la disposizione e le proprietà degli oggetti su schermo.
Ecco un esempio completo del layout:
{"page":1,"id":1,"obj":"label","x":5,"y":2,"w":107,"h":23,"text_font":20,"text":"","mode":"crop","text_color":"black","bg_opa":0,"border_width":0} // Icona stato allarme
{"page":1,"id":2,"obj":"spinner","hidden":"true","x":10,"y":5,"w":30,"h":17,"bg_opa":0,"border_width":0,"line_width":1,"line_width10":2,"angle":120,"line_color":"black","line_color10":"yellow"} // Spinner attivazione allarme
{"page":1,"id":3,"obj":"label","x":106,"y":0,"w":107,"h":23,"text":"","align":"center","bg_color":"black","bg_opa":255,"radius":0,"border_side":0,"text_font":16} // Code
{"page":1,"id":4,"obj":"label","x":213,"y":0,"w":107,"h":23,"text":"HH:MM","align":"center","bg_color":"black","bg_opa":255,"radius":0,"border_side":0,"text_font":16} // Time
{"page":1,"id":5,"obj":"btnmatrix","x":0,"y":25,"w":320,"h":215,"text_font":24,"options":["1","2","3","\n","4","5","6","\n","7","8","9","\n","#FF0000 \uE156#","0","#00FF00 uE12C#"],"border_width40":2,"bg_color":"black","bg_grad_dir":0,"bg_opa40":255,"bg_color40":"black","bg_grad_dir40":0,"radius":0,"border_side":0,"toggle":0,"one_check":0}
L’ultima riga definisce la matrice dei pulsanti (il tastierino vero e proprio), con i tasti numerici, un tasto rosso per cancellare il codice inserito ed uno verde per confermare(Armare/Disarmare allarme).
Il risultato finale sarà simile a questo:

Configurazione YAML del dispositivo OpenHASP
Nel file di configurazione del dispositivo (plate_alarm.yaml
), impostiamo i binding con Home Assistant per visualizzare:
- L’orario corrente (
sensor.time
) - Lo stato dell’allarme (
alarm_control_panel.home_alarm
) - Lo spinner durante l’attivazione/disattivazione
plate_alarm:
objects:
- obj: "p1b4"
properties:
text: "{{ states('sensor.time') }}"
- obj: "p1b1"
properties:
text: >-
{% set s = states('alarm_control_panel.home_alarm') %}
{% if s == 'disarmed' %}
{{ '\uEFC6' }}
{% elif s in ['armed_away', 'armed_home'] %}
{{ '\uE99D' }}
{% elif s in ['triggered'] %}
{{ '\uE026' }}
{% endif %}
text_color: >-
{% set s = states('alarm_control_panel.home_alarm') %}
{% if s == 'disarmed' %}
green
{% elif s in ['armed_away', 'armed_home'] %}
red
{% elif s in ['triggered'] %}
red
{% endif %}
hidden: >-
{% set s = states('alarm_control_panel.home_alarm') %}
{% if s in ['arming','pending'] %}
true
{% else %}
false
{% endif %}
- obj: "p1b2"
properties:
hidden: >-
{% set s = states('alarm_control_panel.home_alarm') %}
{% if s in ['arming', 'pending'] %}
false
{% else %}
true
{% endif %}
Automazione su Home Assistant
L’automazione seguente gestisce gli input provenienti dal keypad tramite MQTT, aggiornando lo stato dell’allarme in base al codice inserito.
Crea un’automazione con il seguente YAML (ad esempio in automations.yaml
):
alias: HASP Keypad Alarm
triggers:
- topic: hasp/plate_alarm/state/p1b5
trigger: mqtt
conditions:
- condition: template
value_template: "{{ payload_json.event == 'up' }}"
actions:
- choose:
- conditions:
- condition: template
value_template: "{{ val in clear_vals or key_label.lower() == 'c' }}"
sequence:
- target:
entity_id: input_text.openhasp_code
data:
value: ""
action: input_text.set_value
- data:
topic: hasp/plate_alarm/command/p1b3.text
payload: "- - - -"
action: mqtt.publish
- conditions:
- condition: template
value_template: "{{ val in ok_vals or key_label.lower() == 'ok' }}"
sequence:
- target:
entity_id: input_text.openhasp_code
data:
value: ""
action: input_text.set_value
- data:
topic: hasp/plate_alarm/command/p1b3.text
payload: "- - - -"
action: mqtt.publish
- choose:
- conditions:
- condition: template
value_template: "{{ alarm_state == 'disarmed' }}"
sequence:
- target:
entity_id: alarm_control_panel.home_alarm
data:
code: "{{ old_code }}"
action: alarm_control_panel.alarm_arm_away
- conditions:
- condition: template
value_template: >-
{{ alarm_state in
['armed_away','armed_home','armed_night','arming','pending','triggered'] }}
sequence:
- target:
entity_id: alarm_control_panel.home_alarm
data:
code: "{{ old_code }}"
action: alarm_control_panel.alarm_disarm
default:
- target:
entity_id: input_text.openhasp_code
data:
value: "{{ old_code ~ key_label }}"
action: input_text.set_value
- data:
topic: hasp/plate_alarm/command/p1b3.text
payload: "{{ old_code ~ key_label }}"
action: mqtt.publish
- delay: "00:00:03"
- condition: template
value_template: "{{ states('input_text.openhasp_code') != '' }}"
- target:
entity_id: input_text.openhasp_code
data:
value: ""
action: input_text.set_value
- data:
topic: hasp/plate_alarm/command/p1b3.text
payload: "- - - -"
action: mqtt.publish
variables:
payload_json: "{{ trigger.payload | from_json }}"
val: "{{ payload_json.val | int }}"
text: "{{ payload_json.text }}"
key_label: >-
{{ (payload_json.text.split(' ',1)[1] if ' ' in payload_json.text else payload_json.text).strip('#').strip() }}
old_code: "{{ states('input_text.openhasp_code') }}"
alarm_state: "{{ states('alarm_control_panel.home_alarm') }}"
clear_vals:
- 9
ok_vals:
- 11
mode: restart
description: ""
Funzionamento
- Ogni pressione di tasto sul keypad viene inviata tramite MQTT al topic
hasp/plate_alarm/state/p1b5
. - L’automazione interpreta il valore (
payload_json.val
) e aggiorna il testo sul display. - Il tasto rosso (clear) cancella il codice inserito.
- Il tasto verde (Spunta) invia il codice al
Manual Alarm Panel
:- Se l’allarme è disattivato → si arma.
- Se è armato → si disarma.
- Lo stato viene aggiornato graficamente sul display (icona e spinner).
Conclusione
Con questa configurazione puoi controllare in modo elegante e touch-friendly l’allarme di Home Assistant direttamente dal tuo pannello OpenHASP.
Il sistema è facilmente espandibile: puoi aggiungere nuove pagine, modificare il layout o integrare feedback sonori per una maggiore interattività.
Se l’articolo Come realizzare un tastierino numerico con OpenHASP per controllare il Manual Alarm Panel di Home Assistant