14. ADMINISTRATION
-------------------
Page sans les options:
|image74|
Page avec toutes les options , voir aussi ce § :ref:`14.1.1 Pour utiliser les didfférentes fonctions optionnelles`
|image788|
Si un serveur SSE est installé et SSE==true :
.. code-block
define('SSE', true);// true si serveur SSE utilisé par monitor
|image789|
Pour ajouter d'autres fonctions voir ce § :ref:`14.1.2 Pour ajouter des fonctions personnelles`
14.1 fichiers communs à toutes les pages
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- **css**
voir le § :ref:`1.2.2.1 styles CSS communs à toutes les pages`
- **Index_loc.php** *chargement de la page impératif*
.. code-block::
// administration
include ("include/admin.php");
- **header.php** *Affichage obligatoire dans le menu*
.. code-block::
Administration
- **ajax.php**
.. code-block::
if ($app=="admin") {admin($variable,$command);} //$command=fenetre(administration footer
- **config.php** *emplacement du fichier*
.. code-block::
define('MONCONFIG', 'admin/config.php');//fichier config
- **fonctions.php** *admin()*
Extrait de la fonction:
|image794|
14.1.1 Pour utiliser les didfférentes fonctions optionnelles
============================================================
Choisir les fonctions dans admin/config.php
.. code-block::
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:
. :ref:`14.2 admin.php, info_admin.php, test_db.php et backup_bd`,
. :ref:`14.4 fonctions PHP`
- ajouter dans admin.php l'appel à la fonction:
.. code-block::
**admin() de fonctions.php**
|image90|
|image95|
.. important:: **Les N° pour $choix (rel de admin.php) 1 à 49 sont réservés pour des maj ultérieures du programme.**
.. admonition:: **Exemple pour executer un script PHP**
.. code-block::
case "14" :include ('include/backup_bd.php');echo "sauvegarde effectuée";return;
.. admonition:: **Exemple pour la modification d'un fichier**
*ici modification du mot de passe*
.. code-block::
case "7" :
echo $file.'';
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 '';//echo file_get_contents($file);
return ;
break;
on utilise "explode" pour rechercher le texte à modifier
|image96|
14.2 admin.php, info_admin.php, test_db.php et backup_bd
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|image795|
Si io.broker est utilisé:
|image1401|
|image796|
|image797|
- **admin.php**
|image84|
|image798|
- **info_admin.php**
|image799|
- **test_db.php**
.. code-block::
';
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 , ..";
?>
- **backup_db.php** , *Pour la sauvegarde de la BD*
|image801|
|image802|
.. note::
en Bash, sauvegarde :
.. code-block::
mysqldump -u ltuser -p monitor > /var/www/html/monitor/DB_Backup/monitor.sql
restauration :
.. code-block::
mysql -u root -p monitor < /var/www/html/monitor/DB_Backup/monitor.sql
**RQ: pour la restaurer, la base doit déjà exister**
|image1541|
14.3 le javascript
^^^^^^^^^^^^^^^^^^
*Pour la fonction mdp() et le clavier(Minimal Virtual Keypad)*, voir le § :ref:`5.5 Le Javascript, dans footer.php et mes_js.js`
- **appel de admin()** *de fonctions.php*
|image804|
- **info_admin()**
.. code-block::
$('.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);
document.getElementById("affich_content_info").innerHTML = info_admin[rel];
}
14.3.1 Topic SSE
================
voir également le § :ref:`1.1.3.2 Solution temps réel MQTT`
|image497|
14.4 fonctions PHP
^^^^^^^^^^^^^^^^^^
- **admin()**
|image805|
|image806|
|image807|
|image1981|
|image807|
|image808|
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 :
|image811|
.. code-block::
maj_variable("22","upload","connect","2")
|image812|
le script python :
.. code-block::
#!/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
|image1367|
|image1366|
Faire un essai avec un navigateur en envoyant "connect":
.. code-block::
http:///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:
|image1570|
- dans fonctions.php:
|image1571|
- réponse de Home Assistant:
|image1572|
|image1573|
14.5.2.2 Téléchargement du fichier :darkblue:`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.
|image1574|
Pour ne pas utiliser les répertoires :darkblue:`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:
.. code-block::
shell_command:
upload_fichier:
"python3 /config/python/upload_fichier.py connect > /config/connect.log 2>&1"
Le fichier : :darkblue:`upload_fichier.py` :
.. code-block::
#!/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:
.. code-block::
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
|image1575|
|image1576|
14.5.3 Monitor
==============
- **Les fonctions JS wajax() et yajax()** , *dans mes_js.js*
|image813|
- **Les fichiers temporaires**, *dans monitor pour Domoticz*
|image814|
14.6 Copies d’écran et explications
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|image815|
|image816|
|image817|
|image818|
|image819|
|image820|
|image1403|
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/:
|image1362|
|image822|
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 :ref:`lamp_monitor_install.sh` l'adresse IP de monitor est indiqué dans les fichiers connect.lua et connect.py;
|image1369|
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
|image1368|
14.6.1.1 connect.lua
""""""""""""""""""""
|image822|
.. 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:
.. code-block::
ln -s admin/connect/connect.py python/connect.py
|image823|
.. 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 :
.. code-block::
define('IPRPI', '192.168.1.8');//IP du Raspberry
|image825|
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
.. code-block::
//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()
|image1280|
|image1363|
- **admin.php**
|image826|
- **admin()** *fonctions.php*
|image827|
|image828|
|image829|
|image830|
.. warning:: **Cette commande utilise SSH2 et SCP** , voir le § :ref:`14.10 Commandes ssh2 PC distant`
14.6.1.3 connect.js
"""""""""""""""""""
*pour node-red*
|image831|
14.6.1.4 connect.yaml
"""""""""""""""""""""
*pour Home Assistant*
14.6.2 fonction devices_plan() partie consacrée à io.broker
===========================================================
|image1404|
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*
|image832|
.. code-block::
-- 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*
.. code-block::
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
.. code-block::
define('DZCONFIG', 'admin/dz/temp.lua');//fichier temp
|image835|
|image836|
+ **Dans monitor, fonctions.php** : *function admin()*
|image837|
.. code-block::
case "3" :
echo $file.'