14. ADMINISTRATION

Page sans les options:

image74

Page avec toutes les options , voir aussi ce § 14.1.1 Pour utiliser les didfférentes fonctions optionnelles

image788

Si un serveur SSE est installé et SSE==true :

image789

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:

image794

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

image90

image95

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

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

<?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

image801

image802

Note

en Bash, sauvegarde :

mysqldump -u ltuser -p monitor > /var/www/html/monitor/DB_Backup/monitor.sql

restauration :

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 § 5.5 Le Javascript, dans footer.php et mes_js.js

  • appel de admin() de fonctions.php

image804

  • 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

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

maj_variable("22","upload","connect","2")

image812

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

image1367

image1366

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:

image1570

  • dans fonctions.php:

image1571

  • réponse de Home Assistant:

image1572

image1573

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.

image1574

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

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 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:

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 :

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

//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

Avertissement

Cette commande utilise SSH2 et SCP , voir le § 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

-- 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

image835

image836

  • Dans monitor, fonctions.php : function admin()

    image837

    case "3" :
    echo $file.'<div id="result"><form >';
      $content = file_get_contents($file);
           if($choix==3){ file_put_contents(DZCONFIG.'.bak.'.$time, $content);}
    
  • upload et Maj par dz :on met à 1,2,3 ou 4 , ou … la variable, dz se charge d’importer le fichier

image839

image178

Le script lua utilisé pour ouvrir ces fichiers:

package.path = package.path..";www/modules_lua/?.lua"
require 'string_tableaux'
require 'connect'
...
require 'table_zigbee'

image842

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 »

image843

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

image845

14.7.1 string_modect.json

admin.php

<a class="admin1" href="#admin" rel="10" title="reponse1" >Configuation modect dz alarmes</a>

image849

fonctions.php admin()

image850

image847

image1355

Voir aussi

MODECT

Affichage dans admin.php mais aussi dans alarmes.php

image853

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&nbsp;&nbsp;</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&nbsp;&nbsp;</a>
  • footer.php

image857

  • fonction.php : admin()

image858

14.8.1 création d’un dispositif dans monitor

image859

Note

idm & iob+ :voir aussi 0.3.2 Les Dispositifs

image1953

  • footer.php

image860

image861

ajax.php puis fonctions.php : mysql_app()

image862

Confirmation de l’enregistrement des données

image863

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 .

image1331

image1332

14.8.3 création d’une variable dans monitor

et d’une correspondance texte->image (table text_image)

image1334

14.8.4 maj d’une variable dans monitor

Récupérer le numéro d’enregistrement de la variable:

image1333

image1335

14.8.5 maj de la table text_image

le texte contenu dans la variable est transformé en image

image1336

image1337

Note

l’icone peut contenir tout type d’images

image1338

14.9 Explications concernant l’affichage des infos de la page admin.php

image864

  • 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

image865

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

image868

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

image870

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()

image872

Exemple pour le fichier /etc/msmtprc

image876

msmtp est un client SMTP très simple et facile à configurer

image873

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

    image1972

  • fonctions.php

    image1973

    image1974

  • footer.php

    image1975

14.13 A Propos

Affiche les numéros des versions de monitor, PHP et Jpgraph

image63