14. ADMINISTRATION
Page sans les options:
Page avec toutes les options , voir aussi ce § 14.1.1 Pour utiliser les didfférentes fonctions optionnelles
Si un serveur SSE est installé et SSE==true :
Pour ajouter d’autres fonctions voir ce § 14.1.2 Pour ajouter des fonctions personnelles
14.1 fichiers communs à toutes les pages
css
voir le § 1.2.2.1 styles CSS communs à toutes les pages
Index_loc.php chargement de la page impératif
// administration
include ("include/admin.php");
header.php Affichage obligatoire dans le menu
<li class="zz"><a href="#admin">Administration</a></li>
ajax.php
if ($app=="admin") {admin($variable,$command);} //$command=fenetre(administration footer
config.php emplacement du fichier
define('MONCONFIG', 'admin/config.php');//fichier config
fonctions.php admin()
Extrait de la fonction:
14.1.1 Pour utiliser les didfférentes fonctions optionnelles
Choisir les fonctions dans admin/config.php
define('ECRAN_ADMIN', array( // enable ou disable
"connect_lua" => "enable", // Mots passe cryptés(Base64) et IP réseau
"string_tableaux" => "enable",//Configuation variables dz maj_services
"modect" => "enable", //Configuation modect dz alarmes
"idx_dz_list" => "enable", //Créer fichier idx/nom Domoticz , LISTE
"var_list" => "enable", //LISTE variables (HA et DZ)
"idx_dz-zigbee" => "enable", //Créer fichier idx/nom Domoticz , TABLEAU zigbee
"reboot_pi" => "enable", //Reboot Raspberry
"msmtprc" => "enable", //msmtprc (config envoi mail)
"connect_py" => "enable" // Maj automatique des IP depuis connect.py
));
14.1.2 Pour ajouter des fonctions personnelles
voir les paragraphes:
ajouter dans admin.php l’appel à la fonction:
<a class="admin1" href="#admin" rel="<N° CHOIX (CASE) DE LA FONCTION PHP>" style="margin-left:70px" title="reponse1" ></a><br>
admin() de fonctions.php
Important
Les N° pour $choix (rel de admin.php) 1 à 49 sont réservés pour des maj ultérieures du programme.
Exemple pour executer un script PHP
case "14" :include ('include/backup_bd.php');echo "sauvegarde effectuée";return;
Exemple pour la modification d’un fichier
ici modification du mot de passe
case "7" :
echo $file.'<div id="result"><form >';
$content = file_get_contents($file);
file_put_contents($file.'.bak.'.$time, $content);
$_SESSION["contenu"]=$content; $find="PWDALARM','";$tab = explode($find, $content);$tab=$tab[1];$tab = explode("'", $tab);$content=$tab[0];$_SESSION["mdpass"]=$find.$content;$height="30";}
echo '<textarea id="adm1" style="height: auto;max-height: 200px;min-height: 400px;" name="command" >' . htmlspecialchars($content) . '</textarea><br>
<input type="button" value="enregistrer" id="enr" onclick=\'wajax($("#adm1").val(),'.$rel.');\' /><input type="button" id="annuler" value="Annuler" onclick="yajax('.$idrep.')"> ';
echo '</form></div>';
return "sauvegarde OK";
case "8" :
$newpass=$idrep;$oldpass=$_SESSION["mdpass"];$content=$_SESSION["contenu"];
$str = str_replace($oldpass, "PWDALARM','".$newpass,$content);
file_put_contents($file, $str);echo '<div id="reload" style="display:block;"><a style="background-color: #605b5dde;color:white;
border-color: #e0e3e6;border-radius: 0.55rem" class="btn btn-primary" onclick="location.reload();
return false;">redemarrer </a></div>';//echo file_get_contents($file);
return ;
break;
on utilise « explode » pour rechercher le texte à modifier
14.2 admin.php, info_admin.php, test_db.php et backup_bd
Si io.broker est utilisé:
admin.php
info_admin.php
test_db.php
<?php
echo '<textarea id="adm1" style="height:'.$height.'px;" name="command" >';
echo "test....BD: ";
// Create connection
$con = new mysqli(SERVEUR, UTILISATEUR, MOTDEPASSE);
// Check connection
if ($con->connect_error) { die("Pas de connexion au serveur: " . $con->connect_error);$_SESSION["exeption_db"]="pas de connexion à la BD";}
else echo " connection au serveur OK , ..";
$conn = new mysqli(SERVEUR, UTILISATEUR, MOTDEPASSE, DBASE);
if ($conn->connect_error) { die("Verifier le nom de la BD: " . $conn->connect_error);$_SESSION["exeption_db"]="pas de connexion à la BD";}
echo " connection à la BD OK , ..";$_SESSION["exeption_db"]="";
echo "connexion terminée , ..";
?>
</textarea>
backup_db.php , Pour la sauvegarde de la BD
14.3 le javascript
Pour la fonction mdp() et le clavier(Minimal Virtual Keypad), voir le § 5.5 Le Javascript, dans footer.php et mes_js.js
appel de admin() de fonctions.php
info_admin()
$('.info_admin').click(function(){
var rel=$(this).attr('rel');$('#affich_content_info').empty;var info_admin="";
affich_info_admin(rel);
});
function affich_info_admin(rel){
console.log(rel);
<?php echo "var info_admin = ". $js_info_admin . ";\n";?>
document.getElementById("affich_content_info").innerHTML = info_admin[rel];
}
14.3.1 Topic SSE
voir également le § 1.1.3.2 Solution temps réel MQTT
14.4 fonctions PHP
admin()
14.5 Téléchargement d’un fichier externe dans Domoticz ou Home Assistant
Pour la mise à jour des fichiers « connect.lua, connect.py, connect.js, etc… » (variables persistentes pour les scripts Dz,Ha )
Note
Plusieurs solutions étaient possibles mais avec l’installations de scripts et de modules supplémentaires.
En http, on ne peut seulement télécharger un fichier depuis un site distant, on ne peut modifier un fichier.
La solution retenue :
Avec l’API de Domoticz ou celle de Home Assistant, il est possible de mettre à jour des variables ; àprès la lecture et la mise à jour d’un fichier de Monitor, on enregistre le résultat dans un fichier temporaire et on met à 1, 2, 3 ,abcd, une variable (nommée ici « upload ») pour l’exécution d’un script qui va télécharger ce fichier deis DZ ou HA; la variable est mise à 0 jusqu’à une prochaine modification du fichier.
14.5.1 Domoticz
La variable :
maj_variable("22","upload","connect","2")le script python :
#!/usr/bin/env python3 # -*- coding: utf-8 -*- import requests, sys from connect import ip_monitor x= str(sys.argv[1]) y = x.split(".") z=y[1] ip= ip_monitor rep="/opt/domoticz/" if z=="lua" : rep="/opt/domoticz/www/modules_lua/" if z=="py" : rep="/opt/domoticz/scripts/python/" addr="http://"+ip+"/monitor/admin/connect/connect."+z req = requests.get(addr) with open(rep+x, "wb") as fp: fp.write(req.content)
14.5.2 Home Assistant
14.5.2.1 la variable, input_text
La variable , ici var_upload
Faire un essai avec un navigateur en envoyant « connect »:
http://<IP DE MONITOR>/monitor/ajax.php?app=turn&device=input_text.var_upload&command=value&type=connect
Note
l’api étant utilisée pour d’autres fonctions, ne pas tenir compte du nom des variables (ici type=valeur de var_upload)
Explications:
dans ajax.php:
dans fonctions.php:
réponse de Home Assistant:
14.5.2.2 Téléchargement du fichier connect.py, connect.yaml
Important
Python_script de HA ne peut être utilisé car l’import de modules n’est pas possible
La fonction Python est simple aussi pour éviter d’utiliser pyscript, on va utiliser le chemin du fichier sous docker.
Pour ne pas utiliser les répertoires python_script & pyscript, réservés pour les scripts python particuliers, on crée le répertoire python
Dans configuration.yaml on crée le service:
shell_command:
upload_fichier:
"python3 /config/python/upload_fichier.py connect > /config/connect.log 2>&1"
Le fichier : upload_fichier.py :
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import requests, sys
from connect import ip_monitor
x= str(sys.argv[1])
#ip= str(sys.argv[2])
ip=ip_monitor
def import_fichier(ip,z,rep):
addr="http://"+ip+"/monitor/admin/connect/"+z
print(addr)
req = requests.get(addr)
with open(rep+z, "wb") as fp:
fp.write(req.content)
rep="/config/python/"
z= x+".py"
import_fichier(ip,z,rep)
rep="/config/"
z= x+".yaml"
import_fichier(ip,z,rep)
rep="/config"
Dans automations.yaml on crée l’automation:
id: maj_connect
alias: import_fichiers_connect
triggers:
- trigger: state
entity_id:
- input_text.var_upload
to: connect
from: '0'
conditions: []
actions:
- action: shell_command.upload_fichier
data: {}
- data:
value: '0'
target:
entity_id: input_text.var_upload
action: input_text.set_value
14.5.3 Monitor
14.6 Copies d’écran et explications
14.6.1 Fichier connect.xxx (mots de passe et login en base64 ,ips réseau
pour utiliser ces données dans des scripts (lua, python, js ou autres)
connect.lua, connect.py, connect.js et connect.yaml sont enregistrés dans admin/connect/:
ces fichiers adaptés pour chaque langage sont téléchargés par les serveurs dans leurs répertoires d’utilisation.
Important
Depuis la version 3.03, Si l’installaton de monitor est éffectuée automatiquement avec lamp_monitor_install.sh l’adresse IP de monitor est indiqué dans les fichiers connect.lua et connect.py;
Si l’installation est effectué manuellement ou si la version de monitor est antérieure à 3.03, l’adresse ip de monitor devra être ajoutée dans ces 2 fichiers pour Domoticz et dans connect.py pour Home Assistant
14.6.1.1 connect.lua
Important
L’ip de monitor dans ce fichier permet, en cas de changement de l’IP de ne pas avoir à modifier les scripts. C’est également valable pour tous les serveurs.
14.6.1.2 connect.py
connect.py, connect.lua, connect.js, connect.yaml sont enregistrés dans monitor, la modification de connect.py entraine la modification automatique des 3 autres formats
Ces originaux sont enregistrés dans admin/connect/ , il est toujours possible d’établir des liens symboliques dans monitor:
ln -s admin/connect/connect.py python/connect.py
Important
Ces originaux peuvent aussi servir à d’autres serveurs (un PI par exemple) ce qui facilite les mises à jour.
Une commande dans administration permet une mise à jour automatique du RPI; pour cela le fichier admin/config.php doit posséder l’IP du serveur :
define('IPRPI', '192.168.1.8');//IP du Raspberry
Pour récupérer le connect.py de Monitor, pour l’utiliser avec SSH, le chemin doit être indiqué dans SSH_MONITOR_PATH de admin/config.php
//SSH_MONITOR_PATH :ex /var/www/monitor/admin/tmp/, ex autre home/USER/
define('SSH_MONITOR_PATH', '/var/www/monitor/admin/tmp/');
ce chemin est utilisé dans fonctions.php admin()
admin.php
admin() fonctions.php
Avertissement
Cette commande utilise SSH2 et SCP , voir le § 14.10 Commandes ssh2 PC distant
14.6.1.3 connect.js
pour node-red
14.6.1.4 connect.yaml
pour Home Assistant
14.6.2 fonction devices_plan() partie consacrée à io.broker
14.7 Explications concernant l’importation distantes d’un tableau LUA
Compléments sur les fichiers de variables LUA
Concerne :
. le tableau de variable string_tableau.lua
. la liste des caméras Modect pour l’alarme
. le fichier des Logins/mots de passe
string_tableau.lua exemple
-- liste de variables
-- string
jour_poubelle_grise="Wednesday"
jour_poubelle_jaune="Sunday"
semaine_poub_jaune= 0 -- 0 pour pair 1 pour impair
-- table anniversaires
anniversaires = {["27-08"]="Damien",["18-05"]="Yoann",["14-09"]="Jonathan",["19-07"]="Alexandra",["25-08"]="Charlotte",["01-05"]="Guillaume",["07-11"]="Corentin",["22-08"]="Pauline",["14-03"]="Clémence",["31-10"]="Eric",["01-02"]="Nathalie",["14-04"]="Christèle",["25-04"]="Katy",["23-05"]="Eveline",["23-08"]="Jean Paul",["24-07"]="Arthur",["09-07"]="Jade",["27-03"]="Judith",["06-03"]="Annie",["02-11"]="Nicole",["22-12"]="Michel"};
Dans monitor admin/config.php
define('VARTAB', URLDOMOTIC.'modules_lua/string_tableaux.lua');
Création d’un fichier temporaire dans monitor, le répertoire « dz » est à créer avec les autorisations pour écrire
define('DZCONFIG', 'admin/dz/temp.lua');//fichier temp
Dans monitor, fonctions.php : function admin()
upload et Maj par dz :on met à 1,2,3 ou 4 , ou … la variable, dz se charge d’importer le fichier
Le script lua utilisé pour ouvrir ces fichiers:
package.path = package.path..";www/modules_lua/?.lua"
require 'string_tableaux'
require 'connect'
...
require 'table_zigbee'
Le script python : upload_fichier.py
Note
C’est pour la raison ci-dessous que l’adresse ip de monitor se trouve dans les fichiers « connect.lua , connect.py et connect.js »
Dernière version de upload.py:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import requests, sys
from connect import ip_monitor
x= str(sys.argv[1])
y = x.split(".")
z=y[1]
z1=y[0]
ip= ip_monitor
rep="/opt/domoticz/"
if z=="lua" :
rep="/opt/domoticz/www/modules_lua/"
addr="http://"+ip+"/monitor/admin/connect/"+z1+"."+z
if z=="json" :
rep="/opt/domoticz/www/modules_lua/"
addr="http://"+ip+"/monitor/admin/"+z1+"."+z
if z=="py" :
rep="/opt/domoticz/scripts/python/"
addr="http://"+ip+"/monitor/admin/connect/"+z1+"."+z
req = requests.get(addr)
with open(rep+x, "wb") as fp:
fp.write(req.content)
Avertissement
REMARQUE IMPORTANTE
pour que python trouve le fichier connect et donc la variable ip_monitor, il faut ajouter le répertoire vide __INIT__.py
14.7.1 string_modect.json
admin.php
<a class="admin1" href="#admin" rel="10" title="reponse1" >Configuation modect dz alarmes</a>
fonctions.php admin()
14.8 Explications concernant les créations et les maj automatiques SQL des variables, dispositifs & messages
admin.php
rel=17 et rel=18
<a class="admin1" href="#admin" rel="17" title="reponse2" >Enregistrer Variable (DZ ou HA) dans SQL </a>
<a><img class="info_admin" src="images/icon-info.svg" data-toggle="modal" data-target="#info-admin1" rel=0 style="width:25px;display:inline;"></a><br>
<a class="admin1" href="#admin" rel="18" title="reponse2" >Enregistrer Dispositifs DZ( ou HA) dans SQL </a>
footer.php
fonction.php : admin()
14.8.1 création d’un dispositif dans monitor
footer.php
ajax.php puis fonctions.php : mysql_app()
Confirmation de l’enregistrement des données
14.8.2 Mise à jour d’un dispositif dans monitor
le choix s’effectue sur la même fenêtre que pour une création; les données de la base de données concernant le dispositif peuvent être mises à jour .
14.8.3 création d’une variable dans monitor
et d’une correspondance texte->image (table text_image)
14.8.4 maj d’une variable dans monitor
Récupérer le numéro d’enregistrement de la variable:
14.8.5 maj de la table text_image
le texte contenu dans la variable est transformé en image
14.9 Explications concernant l’affichage des infos de la page admin.php
admin.php
on ajoute pour les lignes concernées :
<a><img class="info_admin" src="images/icon-info.svg" data-toggle="modal" data-target="#info-admin1" rel=6 style="width:25px;display:inline;"></a><br>
..important:: rel correspond au n° de l’élément dans la table du fichier:info_admin.php
14.10 Commandes ssh2 PC distant
ici un RPI depuis monitor
SSH, ou Secure Shell
un protocole utilisé pour se connecter en toute sécurité à des systèmes distants.
Les connexions étant privés , l’autorisation se fait par mot de passe
Note
Mon RAID1 étant alimenté en 230 Volts, le PI étant alimenté sur batterie, lors d’une coupure secteur, lors de la remise sous tension, le raid1 n’est pas reconnu ; Absent de la maison il faut donc faire un reboot du PI ou un « mount -a « en bash d’où la commande ci-dessous.
Autre application: mise à jour de la configuration pour l’envoi de notifications par mails lors d’un changement de mot de passe par exemple.
Pour cela on utilise le paquet php8.x-ssh2
sudo apt install php8.3-ssh2 (indiquer la version de php, ici 8.3)
14.10.1 reboot PC
ou RPI
Sur le pi, soit une commande sudo reboot, soit un script qui effectue la commande ; j’ai choisi cette dernière solution car il suffit de modifier ce fichier pour faire d’autres commandes.
#!/usr/bin/bash
echo "reboot"
sudo reboot
La fonction PHP sh_scp.php
Comme pour toutes les autres commandes « Administration » les scripts JS et ajax existent déjà, il suffit d’ajouter l’appel de la fonction ci-dessus dans admin.php :
<img src="images/rpi.webp" style="width:30px" alt="rpi">
<a class="admin1" href="#admin" rel="20" style="margin-left:35px" title="reponse1" >Reboot Raspberry</a>
La fonction PHP admin() appelle la fonction ssh_scp.php
14.10.2 commandes scp pour l’envoi ou la réception de fichiers distants
SCP veut dire Secure Copy et il est utilisé pour copier en toute sécurité des fichiers d’un ordinateur local vers des serveurs distants ou inversement, à l’aide du protocole SSH, SSH2 avec PHP
Comme pour le reboot ci-dessus, le processus est le même mais plusieurs étapes sont nécessaires :
télécharger le fichier distant /etc/mcmtprc par exemple , celui de la commande affichée dans « Administration »
le modifier
le renvoyer au pc distant
fonctions.php , extrait de admin()
14.11 exemple: mise à jour fichier de configuration du RPI
voir ce paragraphe 14.6.1.2 connect.py
14.12 Gestion des erreurs
14.12.1 Erreurs Domoticz et monitor
fonctions_1.php
fonctions.php
footer.php
14.13 A Propos
Affiche les numéros des versions de monitor, PHP et Jpgraph




































































































