5. L’ALARME
Pour l’activation ou l’arrêt par GSM voire ce paragraphe qui traite du script python avec les codes retenus pour l’alarme. 18.4 Commandes de l’alarme à partir d’un GSM
Pour toutes les fonctions, entrer le mot de passe
Le script LUA dans Evènements de Domoticz : https://raw.githubusercontent.com/mgrafr/monitor/main/scripts_dz/lua/alarme_v3_0_5.lua
Important
La détection par les caméras peut être utilisée avec FRIGATE et ZONEMINDER et MONITOR
5.1 Les interrupteurs réels, virtuels, les variables
Pour Home Assistant:
Voir ci dessous la description pour Domoticz, valable également pour Home Assistant
Pour Domoticz
les interrupteurs virtuels
Les boutons poussoir marche/arrêt pour les commandes :
m/a alarme de nuit : alarme_nuit
m/a alarme absence : alarme_absence
m/a al_nuit_auto : al_nuit_auto
m/a mode detect des caméras : Modect
poussoir « PUSH » après 2s pour tester la sirène : test_sirene (création d’un scénario avec la sirène)
poussoir de reset des valeurs en cas d’alarme : raz_dz
activation/désactivation de la sirène : activation-sirene , permet de faire des essais sans nuisances sonores ; la sirène est toutefois indiquée ON ou OFF
un interrupteur réel
celui inclus dans la sirène
Options :
allumages de lampes :
Dans ce tuto : lampe_salon (lampe commandée par le 433MHz avec une interface Sonoff modifié, voir le site domo-site.fr
test du modem GSM , envoi d’un sms avec un bouton de sonnette
Note
les images ci-dessus sont des copies d’écran de Domoticz , pour Home assistant copie d’écran de la sirene et des interrupteurs virtuels (fichier configuration.yaml)
5.1.1 Pour utilisation avec Domoticz
On ajoute les dispositifs au plan ;
Note
le plan peut se résumer à un simple cadre ou être très simplifié, il ne sert qu’à regrouper les dispositifs pour récupérer les données avec un seul appel à l’API json
Les variables, initialisée à 0 (sauf pour activation-sir-txt)
modect : pour la mise en service de la détection par caméras (non utilisé actuellement, pour une notification en page d’accueil ou autre …)
porte-ouverte
intrusion
alarme : est utilisée pour un affichage sur la page d’accueil ;
activation-sir-txt, texte activation de la sirène : activer ou désactiver
Tous les Items
Note
la notification se fait par modem GSM mais il est facile d’ajouter l’envoi de Push ou Email
Avertissement
ATTENTION : L’utilisation du modem 4G Ebyte n’autorise pas, pour les textes, les accents et les espaces, utiliser des Under scores(ou autre signe) pour séparer les mots
Partie du script concernant l’alarme,
-- listes des dispositifs
-- les capteurs d'ouverture et de présence DEVICE CHANGED
-- {capteur,etat,modif variable,contenu variable,notification,alarme} alarme 0=absence et nuit 1=absence seulement
local a1={'porte_entree','On','porte-ouverte','porte_ouverte_entree'};
local a2={'porte ar cuisine','On','porte-ouverte','porte_ouverte_cuisine'};
local a3={'porte_fenetre','On',':porte-ouverte','fenetre_ouverte_sejour'};
local a4={'pir_entree_motion','On','intrusion','intrusion_entree'};
local a5={'pir ar cuisine_motion','On','intrusion','intrusion_cuisine'};
local A1={a1,a2,a3,a4,a5};local A2={a1,a2,a3};
--
local time = string.sub(os.date("%X"), 1, 5)
sirene=0;lampe=0
--
return {
on = {
devices = {
'pir ar cuisine_motion',
'pir_entree_motion',
'porte_entree',
'porte ar cuisine',
'porte_fenetre',
'alarme_nuit',
'alarme_absence',
'Modect',
'raz_dz',
'al_nuit_auto',
'activation-sirene',
'Test_GSM',
'test_sirene'
},
timer = {
'at 15:45',
'at 06:00'}
},
execute = function(domoticz, item, triggerInfo)
--domoticz.log('Alarme ' .. item .. ' was changed', domoticz.LOG_INFO)
--*********************variables***************************************
-- alarme absence -
if (item.name =='pir ar cuisine_motion' or item.name=='pir_entree_motion' or item.name=='porte_entree' or item.name=='porte ar cuisine' or item.name=='porte_fenetre') then
if (domoticz.variables('ma-alarme').value == "1") then
for k, v in ipairs(A1) do
if (item.name == A1[k][1] and item.name ~= nil) then
if (item.state == A1[k][2] ) then
domoticz.variables(A1[k][3]).set(A1[k][4]);
else print("erreur:"..A1[k][1])
end
end
end
end
-- alarme nuit
if (domoticz.variables('ma-alarme').value == "2") then
for k, v in ipairs(A2) do
if (item.name == (A2[k][1]) and item.state == A2[k][2] ) then
domoticz.variables(A2[k][3]).set(A2[k][4]);lampe=1;sirene=1;
end
end
--allumer lampes
if (lampes==1) then devices('lampe_salon').switchOn();lampes="2"
end
--mise en service sirene
if (sirene==1) then devices('sirene').switchOn();sirene="2"
end
if (sirene==2 and domoticz.device('activation-sirene').state == 'On') then devices('sirene').switchOn();sirene="3"
end
end
-- fin alarme nuit
if (domoticz.variables('porte-ouverte').changed) then
txt=tostring(domoticz.variables('porte-ouverte').value)
print("porte-ouverte")
alerte_gsm('alarmeù'..txt)
end
if (domoticz.variables('intrusion').changed) then
txt=tostring(domoticz.variables('intrusion').value)
print('intrusion')
alerte_gsm('alarmeù'..txt)
end
Partie du script concernant les options : interrupteurs on/off ,
else
--*******************devices virtuels************************************
--elseif (item.name =='alarme_nuit' or item.name=='alarme_absence' or item.name=='Modect' or item.name=='raz_dz' or item.name=='al_nuit_auto' or item.name=='activation-sirene' or item.name=='Test_GSM') then
elseif (find_string_in(virtuels, item.name)==true) then print("elseif:"..item.name)
-- alarme nuit_activation
if (item.name == 'alarme_nuit' and item.state=='On' ) then
txt='alarmeùnuitùactivee';obj='alarme_nuit_activee';
alerte_gsm(txt);domoticz.variables('alarme').set("alarme_nuit");
elseif (item.name == 'alarme_nuit' and item.state=='Off' ) then
txt='alarmeùnuitùdesactivee';obj='alarme_nuit_desactivee';alerte_gsm(txt);
if (domoticz.variables('alarme').value~='alarme_auto') then domoticz.variables('alarme').set("0");
end
end
-- alarme absence _activation
if (item.name == 'alarme_absence' and item.state=='On' ) then domoticz.variables('alarme').set("alarme_absence");
txt='alarmeùabsenceùactivee';obj='alarme absence activee';alerte_gsm(txt) ; domoticz.email('Alarme',obj,adresse_mail)
elseif (item.name == 'alarme_absence' and item.state=='Off') then domoticz.variables('alarme').set("0");
txt='alarmeùabsenceùdesactivee';obj='alarme absence desactivee';
alerte_gsm(txt);alerte_gsm(txt) ; domoticz.email('Alarme',obj,adresse_mail)
end
-- activation de la detection par les cameras
if (item.name == 'Modect' and item.state=='Off' and domoticz.variables('ma-alarme').value=="1") then
devices('Modect').switchOn();
end
-- activation manuelle Modect
if (item.name == 'Modect' and item.state=='On' ) then
domoticz.variables('modect').set("modect");detect_frigate(1) --modect_cam('Modect') , pour zneminder
-- activation manuelle Monitor
elseif (item.name == 'Modect' and item.state=='Off' ) then
domoticz.variables('modect').set("monitor");detect_frigate(2) --modect_cam('Monitor') , pour zneminder
end
-- raz variables de notification intrusion et porte ouverte
if (item.name == 'raz_dz' and item.state=='On') then domoticz.devices('raz_dz').switchOff();
domoticz.variables('intrusion').set("0");domoticz.variables('porte-ouverte').set("0");
end
-- alarme auto
if (item.name == 'al_nuit_auto' and item.state=='On') then txt='alarme_nuit_auto_activee';alerte_gsm(txt); domoticz.variables('alarme').set("alarme_auto");
elseif (item.name == 'al_nuit_auto' and item.state=='Off') then txt='alarmeùnuitùautoùdesactivee';alerte_gsm(txt);domoticz.variables('alarme').set("0");
end
-- activation sirène
if (item.name == 'activation-sirene' and item.state=='On') then domoticz.variables('activation-sir-txt').set("désactiver");
else domoticz.variables('activation-sir-txt').set("activer");
end
--
if (item.name == 'Test_GSM') then print("test_gsm")
txt='TestùGSMùOK';alerte_gsm(txt);send_sms(txt);
obj='Test GSM OK';domoticz.email('Alarme',obj,adresse_mail)
--domoticz.devices('Test_GSM').switchOff()
end
-- test sirene
if (item.name == 'Test_tsirene') then print("test_sirene")
end
print("sse="..item.name);send_sse(item.id,item.state);
else print("alarme nuit :"..time)
end
Partie du script concernant le timer ,
Note
L’utilisation de timer { at hh:mm , hh:mm ne peut être utilisé ;
j’ai essayé isTimer mais ça ne fonctionne que pour ON ; else avec isTimer ne fonctionne pas.
des explications concrnant le script alarme_3.lua
Pour activer ou désactiver la sirène :
Pour les textes : notifications_devices.lua
-- activation sirène
if (device.name == 'activation-sirene' and device.state=='On') then domoticz.variables('activation-sir-txt').set("désactiver");
else domoticz.variables('activation-sir-txt').set("activer");
end
Pour l’activation ou la désactivation :
Pour allumer des lampes :
Pour ajouter des dispositifs :
Pour ajouter une notification PUSHOVER , ajouter ces lignes:
*le scripts bash *
#!/bin/bash TITLE="Alerte" APP_TOKEN="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" USER_TOKEN="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" MESSAGE=$1 echo $1 curl -s -F "token=$APP_TOKEN" \ -F "user=$USER_TOKEN" \ -F "title=$TITLE" \ -F "message=$MESSAGE" \ https://api.pushover.net/1/messages.json
Ou en Python :
#!/bin/python
import requests,sys
x= str(sys.argv[1])
r = requests.post("https://api.pushover.net/1/messages.json", data = {
"token": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"user": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"message": x
})
print(r.text)
Pour la mise à jour de monitor:
send_sse(item.id,item.state);
Voir les pages web :
5.1.2 Pour utilisation avec Home Assistant
5.1.2.1 les interrupeurs virtuels (input_boolean)
ils sont crées sous yaml:
input_boolean:
mes_alarme_abs:
name: mise en service alarm abs
icon: mdi:alarm-light
mes_alarme_nuit:
name: mise en service alarm nuit
icon: mdi:gesture-tap-hold
mes_al_nuit_auto:
name: mise en service al nuit auto
icon: mdi:alarm-light
activation_sirene_al:
name: activation-sirene
icon: mdi:music-off
activation_modect:
name: activation-modect
icon: mdi:camera
…. des input_boolean aussi pour: m/a sirène, m/a mode detect des caméras, activation/désactivation de la sirène, etc..
5.1.2.3 les variables (input_select et input_text)
utilisées pour mémoriser certaines informations
input_select:
var_alarme:
name: alarme
options:
- 0
- alarme_nuit
- alarme_auto
input_text:
var_intrusion:
name: intrusion
initial: 0
var_porte_ouverte:
name: porte_ouverte
initial: 0
activation_sir_txt:
name: statut_sirene
initial: desactive
notification_alarme:
name: statut_alarme
initial: pas en service
5.1.3 explications concernant MODECT
Note
A partir de la base de données le fichier des caméras déclarées en mode détection est établit automatiquement; voir ce § 5.8.3- Affichage de la liste des caméras Modect
Depuis la version 3.01 , ce fichier contient les données en JSON ; le script Lua de l’alarme(V3.0.3) doit être modifié en conséquence (voir ci-après § 5.1.3.2 le script lua pour Domoticz , les modifications à apporter)
Si l’alarme absence est activée les caméras autorisées passent en mode MODECT automatiquement.
Dans les autres cas Modect peut être activé manuellement.
Avertissement
Il faut avoir installé Zoneminder ou Frigate
5.1.3.1 Jeton ZM
Dans fonctions.php :
Le format du fichier est json pour une exploitation facile avec Domoticz
5.1.3.2 le script lua pour Domoticz
dans alarme_intrusion.lua , partie du script lua de l’alarme concernant Modect:
-- Alarme absence et nuit maison -- -- alarme--alarme.lua -- version 3.0.6 -- json = (loadfile "scripts/lua/JSON.lua")() function decode_json(fich_json) local config = assert(io.popen('/usr/bin/curl '..fich_json)) local blocjson = config:read('*a') config:close() local jsonValeur = json:decode(blocjson) --print('succes='..jsonValeur.version) return jsonValeur end function modect_cam(mode) -- pour ZONEMINDER json_val=decode_json('curl -XPOST -d "user=michel&pass=Idem4546" http://192.168.1.23/zm/api/host/login.json') print(json_val.access_token) cle=json_val.access_token json_val=decode_json('http://'..ip_monitor..'/monitor/admin/string_modect.json') for k,v in pairs(json_val) do --cam_modect dans string_modect print('essai='..k)--pour essai command='/usr/bin/curl -XPOST http://'..ip_zoneminder..'/zm/api/monitors/'..k..'.json?token='..cle..' -d "Monitor[Function]='..mode..'&Monitor[Enabled]='..k..'"' print(command) os.execute(command) print ("camera "..tostring(k).."activée :"..tostring(mode)); end end function detect_frigate(t) -- POUR FRIGATE json_val=decode_json('http://'..ip_monitor..'/monitor/admin/string_modect.json') for k,v in pairs(json_val) do for key,value in pairs(v) do print('t='..t) print(value) if (t==1) then command = 'python3 scripts/python/fr_mqtt.py frigate/'..value..'/detect/set ON > /opt/domoticz/frigate.log 2>&1' elseif (t==2) then command = 'python3 scripts/python/fr_mqtt.py frigate/'..value..'/detect/set OFF > /opt/domoticz/frigate.log 2>&1' end print(command) os.execute(command) end end end -- activation de la detection par les cameras if (item.name == 'Modect' and item.state=='Off' and domoticz.variables('ma-alarme').value=="1") then devices('Modect').switchOn(); end -- activation manuelle Modect if (item.name == 'Modect' and item.state=='On' and domoticz.variables('ma-alarme').value=="0") then domoticz.variables('modect').set("modect");modect_cam('Modect') -- ou detect_frigate(1) -- activation manuelle Monitor elseif (item.name == 'Modect' and item.state=='Off' and domoticz.variables('ma-alarme').value=="0") then domoticz.variables('modect').set("monitor");modect_cam('Monitor') -- ou detect_frigate(2) end
5.1.3.3 le script bash pour Home Assistant
Script Bash concernant le mode détection des caméras: modect.sh
Attention
pour ce script JQ doit être installé
curl -XPOST -d "user=USER&pass=MOT_PASSE" -s 'http://192.168.1.23/zm/api/host/login.json' | \
python3 -c "import sys, json; file = open('token.txt', 'w'); file.write(json.load(sys.stdin)['access_token']); file.close()"
cle=`cat token.txt`
mode=$1
#wget http://192.168.1.9/monitor/admin/string_modect.json
curl -s http://192.168.1.9/monitor/admin/string_modect.json | XXX="$(jq '.[] | .id_zm' string_modect.json)"
#echo "$XXX"
for i in $XXX; do
#echo "$i";
curl -XPOST 'http://192.168.1.23/zm/api/monitors/'$i'.json?token='$cle -d "Monitor[Function]="$mode"&Monitor[Enabled]="$i
done
5.1.3.4 le script Python pour Frigate
utilisable avec Domoticz, HomeAssistant ou Monitor
#!/usr/bin/env python3.9
#-*- coding: utf-8 -*-
import sys
from connect import ip_mqtt # adresse broker dans connect.py
import paho.mqtt.client as mqtt #import the client1
broker_address=ip_mqtt
topic = str(sys.argv[1])
payload = str(sys.argv[2])
#broker_address="iot.eclipse.org" #use external broker
client = mqtt.Client("P1") #create new instance
client.username_pw_set(username='<login>',password='<pass>')
client.connect(broker_address) #connect to broker
client.publish(topic,payload) #publish
Note
ce script peut être utilisé directement depuis monitor ou à parir d’une console
5.1.3.5 copies d’écran concernant Modect
Le fichier string_modect.json est écrit automatiquement à partir de la BD SQL , il est visible dans « administration »
Capture d’écran de ZM :
Le choix des caméras se fait dans la BD :
Le choix de l’appli de détection se fait dans admin/config.php
5.2 Construction de l’image
On ajoute les composants avec Inkscape, les ID pour les changements de couleur, pas besoin de onclick, il n’y a que des dispositifs virtuels.
La construction de la page est identique à celle du plan intérieur.
Les boutons M/A sont réalisés avec 2 cercles de grandeur et de couleur différentes, les poussoirs simples (les mains) sont des icones téléchargées ;
l’icône png de Domoticz a été convertie en svg.
On ajoute des zones de textes pour la date, les messages ,…
<text xml:space="preserve"
style="font-size:14.8002px;line-height:1.25;font-family:sans-serif;fill:#ffffff;stroke-width:1"
x="295"
y="93.74398"
id="console1"
transform="scale(1.0550891,0.94778725)"><tspan
sodipodi:role="line"
id="tspan1850"
x="269.5726"
y="93.74398"
style="stroke-width:1">txt</tspan></text>
On enregistre l’image dans un fichier PHP, comme indiqué au paragraphe 2.2 Des exemples d’autres dispositifs
On peut aussi ajouter les ID en s’aidant de l’outil de dévelopement (F12 du navigateur)
Vérifier qu’il n’y a pas de doublon d’ID
dans ce cas faire des remplacements :
exemple: remplacer « pathxxxx » par « pathyyy »
ou avec Notepad tous les ’’path remplacé par ‘’patha
5.3 Base de données
Table « dispositifs »
Après avoir ajouté les ID : enregistrement des dispositifs virtuels dans la base de données ; On ajoute au dispositif dans la colonne pass : « pwdalarm » pour limiter l’accès ;(cette valeur peut être modifiée dans config.php)
Comme on peut le voir pour l’alarme absence il a été préféré l’ID du cercle à l’ID choisi avec Inkscape
Il est aussi possible de renommer l’ID du cercle.
les variables concernées
5.4- Le PHP
alarme.php :
https://raw.githubusercontent.com/mgrafr/monitor/main/include/alarmes.php
test_pass.php : surligné en jaune, pour admin.php, voir le § 14.2 admin.php, info_admin.php, test_db.php et backup_bd
<text xml:space="preserve"
style="font-size:14.868px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:0.999996;"
x="80.619217"
y="282.70932"
id="text6416"
transform="scale(1.0628321,0.94088238)"><tspan
sodipodi:role="line"
id="not"
x="80.619217"
y="282.70932"
style="stroke-width:0.999996;fill:white;" /></text>
Mot de Passe
Le fichier config.php gère les mots de passe de l’alarme et de la commande des dispositifs (on/off)
// mot passe alarme et administation , la page administration est ON
define('PWDALARM','004546');//mot passe alarme
define('NOM_PASS_AL','pwdalarm');// nom du mot de passe dans la BD
define('TIME_PASS_AL','3600');// temps de validité du mot de passe
La fonction mdp() dans fonctions.php :
// --------------MOT de PASSE-----------------------------
function mdp($mdp,$page_pass){// 1=commandes , 2=alarmes
//if ($_SESSION["pec"]=="admin"){echo "azerty";$page_pass=3;}
switch ($page_pass) {
case "1":
if ($mdp==PWDCOMMAND) {$mp="OK";$_SESSION['passwordc']=$mdp;}
else {$mp="entrer le mot de passe";}
break;
case "2":
if ($mdp==PWDALARM) {$mp="OK";$_SESSION['passworda']=$mdp;$_SESSION['time']=time()+TIME_PASS_AL;}
else {$mp="pasword non valide";}
break;
default:
$mp="erreur";
}
$info=['statut' => $mp];
return $info;}
Le script qui commande les poussoirs M/A
5.6 -Comme pour les autres pages
Il ne reste qu’à :
Ajouter cette page dans config.php
define('ON_ALARM',true);// affichage pour utilisation de l'alarme
Ce qui ajoutera l’alarme dans le menu
5.7- Affichage d’une icône sur la page d’accueil
Pour l’alarme de nuit, pour ne pas oublier de l’annuler le matin si la fonction auto n’a pas été choisie
CSS
#alarme_nuit{position:absolute;top:815px;left: 170px;width: 40px;}
/* Large devices (small desktops <535) */
@media (max-width:534px) {#alarme_nuit{top:580px;}
accueil.php :
<div class="aff_al" ><img id="alarme_nuit" src="images/alarme_auto.svg" alt="alarme" /></div>
Dans Domoticz : la variable a déjà été crée, quand l’alarme nuit est activée, son contenu :
La table text_images : correspondance entre le texte et l’image
5.8 Améliorations utiles
5.8.1- la mise en marche automatiquement de l’alarme de nuit
à certaines heures
. On ajoute un bouton avec Inkscape ; pour cela : . On charge dans Inkscape le fichier PHP de l’image ; on accepte l’avertissement car ce n’est pas une extension svg. . On modifie l’image ; on ajoute un bouton . On sauvegarde l’image sous un autre nom, l’extension sera .svg; comme précédemment avec les images, on la copie dans le fichier avec l’extension PHP
5.8.1.1 Dans Domoticz
On ajoute un poussoir virtuel : al_nuit_auto
On ajout le switch au plan
Les scripts lua notification_timer.lua & notification_devices.lua :
voir ce § 1.5.1.2 les scripts de notifications gérées par Domoticz
Log :
5.8.1.2 Dans Monitor
Pour cela on met à jour la table « dispositifs »
Comme pour tous les switches la commande a été ajoutée automatiquement sur la page HTML :
5.8.2 Alarme par sms GSM
Avertissement
si un modem GSM installé
5.8.2.1 Version sans l’utilisation d’une variable
Avec un reload d’un module python
On utilise un module python en import reload et on modifie ce module :
Avec le serveur domotiqu (DZ ou HA) pour envoyer un message
Avec python pour une réinitialisation après l’envoi du message
Création d’un fichier python : aldz.py, il ne contient qu’une variable avec la valeur « 0 », pour « pas de message » ; il contiendra x= « texte du SMS » en cas l’alarme
#!/usr/bin/env python3.7 -*- coing: utf-8 -*-
x='0'
On fait une copie de ce fichier : aldz.bak.py : ce fichier remplacera le fichier original pour remettre à 0 la variable et cesser d’envoyer des messages.
Dans Domoticz, pas besoin de créer une variable, simplement modifier le fichier aldz.py pour inclure à la variable x, le texte du SMS
Dans Home Assistant, il en est de même: 2 variantes possibles :
avec data: (en utilisant un fichier bash intermédiaire)
avec un texte pré-défini
Avertissement
Attention : comme déjà indiqué, si modem Ebyte, pas d’espaces et accents
Le fichier sms_dz est modifié (simplifié) : indiquer le bon port serie et les bons chemins.
5.8.2.2 Option supplémentaire : le test de l’envoi de SMS
Dans l’image de l’alarme : on ajoute,
Dans Domoticz : on ajoute un poussoir de sonnette
Dans Home Assistant : on ajoute un input_button
** fonctionnement du bouton de sonnette dans Domoticz**
Le bouton est toujours “on” , lors d’un appuie la commande “nvalue=group on” est envoyé à Domoticz qui renvoie un Data=off
On ajoute le dispositif au plan :
On ajoute qq lignes de script dans évènements dz , notifications_devices.lua
return {
on = { devices = {'Test_GSM',
if (device.name == 'Test_GSM' ) then print ("test_gsm")
txt='TestùGSMùOK';alerte_gsm(txt);send_sms(txt)
obj='Test GSM OK'domoticz.email('Alarme',obj,adresse_mail)
end
Dans la BD :
L’exemple est intéressant car le clic s’effectue sur une partie de l’image transparente
Dans le HTML, Le script est ajouté automatiquement à partir des données de la BD , voir le § 0.3.2 Les Dispositifs
Note
Affichage de l’alarme une ellipse rouge est affichée sur l’icône ‘ smartphone’ ; elle reste affichée jusqu’à la prochaine mise à jour : 1 à 2 secondes avec le serveur SSE-php
5.8.3- Affichage de la liste des caméras Modect
Cette liste est établie automatiquement avec une fonction dans « administration » , voir le § 5.1.1.2 le script lua
5.8.5- Copie écran de la dernière version
Version 2.1.0 réécrite en DzVent avec :
1 script pour le timer
1 script pour les notifications à partir des dispositifs
1 script p pour les notifications à partir des variables
Le script principal de l’alarme
5.9- Résumé des dispositifs, des switches virtuels, des variables utilisés
voir le § 0.3.2 Les Dispositifs







































































































