Aller au contenu
henri-allauch

Sauvegarde sources HC3 en php

Recommended Posts

Salut, si ça peut vous être utile .....

 

Au début du transfert de ma HC2 vers la Hc3, J'avais écrit un php pour analyser le contenu de la HC3 et créer sous forme de fichiers classés dans un répertoire(Daté)  pour l'ensemble des QA les fichiers lua,  le fqa et les variables,. Idem pour scènes et les VG.

Cela permet sans faire une sauvegarde fibaro, d'archiver les fichiers pour avoir sous la main une sauvegarde rapide, utilisable pour récupérer un source dégradé lors d'une modification ou autre par un couper coller .....

Ca ne remplace pas les sauvegardes fibaro.

Pour l'utiliser il suffit de l'installer sur un serveur php, de créer un repertoire ex:SaveHc3 sur ce serveur, de lui donner les droits d'accès, et de le définir en début du source Php avec l'ip le user et le Passwd de la Box

$Hc3Ip    = "192.168.X.XX";
$Hc3Login = "TonUserBox";
$Hc3Pass  = "TonPasswordBox";
$dirSaveHc3 = "SaveHc3";

 

Une fois lancé, choisir dans le menu Sauvegarder et Valider ce choix Un sous répertoire daté sera créé avec l'ensemble des éléments trouvé dans la HC3

Je ne suis pas un spécialiste de la programmation php, mais ça fait le boulot. j'avais créé ce truc car j'avais l'habitude d'utiliser l' appli de @Krikroff  dont j'ai oublié le nom, mais je n'ai plus de système windows

 

SaveHc3.php

 

Capture d’écran 2023-02-23 à 17.17.16.png

Capture d’écran 2023-02-23 à 17.50.06.png

Modifié par henri-allauch
  • Like 4

Partager ce message


Lien à poster
Partager sur d’autres sites

Salut,
GENIAL ce développement, enfin un backup lisible...

 

J'ai (comme d'hab) une question :
   - à quoi correspond/sert l'action <Abandon> ?

et propositions d'évolution :
1) actuellement, la variable <$dirSaveHc3> coreespond à un sous-répertoire d'où est installé le php.
sur mon NAS Synology, cela correspond à 
/volume1/web/SaveHc3/SaveHc3
Les backup de Lazer sont sauvés dans un sous répertoire de
/volume1/Domo_Fibaro
Ne serait-il pas possible que la variable <$dirSaveHc3> fasse référence à une destination absolue (au lieu de relative) ?
2) Après l'exécution de l'action, serait-il possible d'affficher une confirmation comme quoi tout s'est bien passé ? (car comme je ne voyais rien, j'ai fait plusieurs sauvegardes ...)

Merci !

Partager ce message


Lien à poster
Partager sur d’autres sites

@jojo

Je vais te décevoir mais je n'ai pas mis ce scrip pour répondre à tous les besoins des différentes configurations de nos équipements.

Il est basique et je pense que chacun pourra l'adapter à ses propres besoin.

La partie extraction peut être conservée la partie écriture dans les fichiers peut être adaptée...

 

Mais pour la question 1dans le php $dirSaveHc3 contient SaveHc3 c'est un chemin relatif au répertoire courant ou se trouve le php. Mais tu peux mettre un chemin absolu /home/messauvegardes... Mais il faut que ce répertoire ait les droits d'accès ouvert  en écriture correspondant au user du serveur php 

 

Pour la question 2 en fin d'exécution "sauvegarder" est effacé par "choisir une action"... C'est donc fini

 

Pour la question 3  l'action abandon.... A part d'effacer le menu (abandon +Valider)   je ne me rappelle plus. 

 

Encore une fois suis désolé mais je ne ferai pas de modif c'est un bout de code qui m'a servi et qui reste à adapter aux besoin de chacun. 

Modifié par henri-allauch
  • Like 1

Partager ce message


Lien à poster
Partager sur d’autres sites

nooo stress.

Merci pour tes réponses, je l'adapterai donc à mes besoins...

Partager ce message


Lien à poster
Partager sur d’autres sites

et j'oubliais le plus important : Merci pour le partage !

Partager ce message


Lien à poster
Partager sur d’autres sites

Je viens de le mettre en place, NICKEL !

Je l'ai installé sur mon Syno, il fonctionne bien.

 

1000 Mercis à toi

 

PS: je suis nul de chez nul en php, si un jour tu peux mettre une modif afin de lancer la sauvegarde en automatique depuis un schedule (Syno par exemple), cela permettrait de sauvegarder en automatique toutes les semaines :=)

encore merci

 

  • Like 1

Partager ce message


Lien à poster
Partager sur d’autres sites

Hello,
 

pour ceux que ça interesse de lancer ce script php en auto à intervalles réguliers, je me suis permis de modifier légèrement le php original.
Ensuite suffira d'appeler ce script par exemple via un quickApp dont je vous donne ici une version fonctionnelle (utilisable tel quel en créant un bouton et un label) :
 

function QuickApp:onInit()
    self:debug("onInit")
    self.http = net.HTTPClient()
end

--- BACKUP PAR SYNO -----------------------------------------------------------------------------------------------
function QuickApp:backup()
self.http:request("http://192.168.XXX.XXX/SaveHc3-Auto.php", {
        options = {
            data = json.encode(requestBody),
            method = "GET",
            headers = {
                ["Content-Type"] = "application/json",
                ["Accept"] = "application/json",
                 -- Header with basic auth containing admin:admin. Replace it with your crendentials. 
                ["Authorization"] = "Basic  MY_Password", -- mot de  passe en base 64
            }
        },
        success = function(response)
            self:debug(response.status)
            self:debug(response.data)
            ------------------------
            self:updateView('label_Bck', 'text', 'Dernière sauvegarde : ' .. (os.date("%d/%m/%Y %H:%M:%S", backupsremotetimestamp))) -- maj du label
            ------------------------
        end,
        error = function(message)
            self:debug("error:", message)
        end
    })
end

 

SaveHc3-Auto.php

Modifié par chrisalex
  • Like 3

Partager ce message


Lien à poster
Partager sur d’autres sites

Merci à toi @chrisalex

 

Je vais essayer cela ce soir, une sauvegarde de plus, cela est toujours sécurisant.

 

Partager ce message


Lien à poster
Partager sur d’autres sites
Le 24/02/2023 à 14:38, jojo a dit :

actuellement, la variable <$dirSaveHc3> coreespond à un sous-répertoire d'où est installé le php.
sur mon NAS Synology, cela correspond à 
/volume1/web/SaveHc3/SaveHc3
Les backup de Lazer sont sauvés dans un sous répertoire de
/volume1/Domo_Fibaro
Ne serait-il pas possible que la variable <$dirSaveHc3> fasse référence à une destination absolue (au lieu de relative) ?

Lors de la publication du php pour HC3, j'avais soumis l'idée suivante (cfr ci-dessus) ...

Evidemment, comme je n'y connais rien en php, je n'ai pas réussi à la mettre en oeuvre.

Mais maintenant qu'on a trouvé un expert php plein de bonne volonté, saurais-tu inclure cette petite modif ?

:13:

Partager ce message


Lien à poster
Partager sur d’autres sites

désolé @jojo je suis vraiment pas bon en php j'ai trouvé la soluce sur un fofo. mais je regarderai et si je trouve je posterai...promis

  • Thanks 1

Partager ce message


Lien à poster
Partager sur d’autres sites
Le 16/08/2023 à 09:10, chrisalex a dit :

-- Header with basic auth containing admin:admin. Replace it with your crendentials.

["Authorization"] = "Basic MY_Password", -- mot de passe en base 64

Bonjour,

je ne sais pas comment renter mes credientials.

Est-ce que l'utilisateur renseigné doit être admin du Syno (ou un simple utilisateur qui a les droits en lecture sur le dossier web suffit ?)

Est-ce uniquement Password qui doit être en Base 64, ou tout le couple user:password ?

Merci de ton aide

Partager ce message


Lien à poster
Partager sur d’autres sites

@chrusalex,

où est mon erreur ? Voici le log

[20.08.2023] [18:05:30] [DEBUG] [QUICKAPP922]: onInit
[20.08.2023] [18:06:51] [TRACE] [QUICKAPP922]: UIEvent: {"eventType":"onReleased","deviceId":922,"elementName":"bt-backup","values":[]}
[20.08.2023] [18:07:06] [DEBUG] [QUICKAPP922]: 200
[20.08.2023] [18:07:06] [DEBUG] [QUICKAPP922]: Warning: Undefined array key "actions" in /volume4/web/SaveHc3/SaveHc3-Auto.php on line 74 Warning: Undefined array key "conditions" in /volume4/web/SaveHc3/SaveHc3-Auto.php on line 82 Warning: Undefined array key "actions" in /volume4/web/SaveHc3/SaveHc3-Auto.php on line 74 Warning: Undefined array key "conditions" in /volume4/web/SaveHc3/SaveHc3-Auto.php on line 82 Warning: Array to string conversion in /volume4/web/SaveHc3/SaveHc3-Auto.php on line 166 Warning: Array to string conversion in /volume4/web/SaveHc3/SaveHc3-Auto.php on line 166 Warning: Array to string conversion in /volume4/web/SaveHc3/SaveHc3-Auto.php on line 166 Warning: Array to string conversion in /volume4/web/SaveHc3/SaveHc3-Auto.php on line 166 Warning: Array to string conversion in /volume4/web/SaveHc3/SaveHc3-Auto.php on line 166 Warning: Array to string conversion in /volume4/web/SaveHc3/SaveHc3-Auto.php on line 166 Warning: Array to string conversion in /volume4/web/SaveHc3/SaveHc3-Auto.php on line 166 Warning: Array to string conversion in /volume4/web/SaveHc3/SaveHc3-Auto.php on line 166 Warning: Array to string conversion in /volume4/web/SaveHc3/SaveHc3-Auto.php on line 166 Warning: Array to string conversion in /volume4/web/SaveHc3/SaveHc3-Auto.php on line 166

Merci

 

EDIT : en fait, il fait le job, mais pourquoi ce warning

Modifié par jojo

Partager ce message


Lien à poster
Partager sur d’autres sites

@jojo tout a fait en phase avec toi il fait le job mais il y a un souci avec le code php de définition des tableaux (array).
J'ai deux box à la maison et sur une je n'ai pas ces erreurs et sur l'autre j'ai exactement les même que toi (mais comme tu le dis ca fait le job malgré tout)
Selon moi cela vient des scenes en mode block (peut être des espaces ou avec nom trop long ... je n'ai pas encore identifié quoi exactement) en tout cas il n'arrive pas à interpreter les paramètres de ces scenes pour les mettre en tableau, mais ce n'est pas gênant car de tout façon il ne peut backuper ces scenes car elle ne sont pas en lua.

Partager ce message


Lien à poster
Partager sur d’autres sites

Pour une valeur de tableau non définie : 
La raison du warning est que depuis la version 8.0 de Php,  "Undefined array key" a changé de niveau : de Notice à  Warning. 
Deux solutions.

1 Modifiez les paramètres d'erreur PHP pour ne pas inclure E_WARNING (non recommandé)

2 Inclure un isset() pour vérifier existance de la variable (recommandé).

Voir au niveau des lignes de warning obtenues dans debug ex 74 et autres Modifier du style

if (isset($c["actions"])) { 
    $n = file_put_contents($file, $c["actions"]);
    if ($n == false ) {
        Writelog( "Erreur ecriture" . $scenes["name"]. "_actions.lua");
    }
    else {
        Writelog ("Sauvegarde de " . $scenes["name"]."_actions.lua  : " .$n ." octets");
    } 
}

Je n'ai pas PHP 8 pour tester et je n'aurai pas le temps avant la fin de l'année mais je pense que c'est la piste à suivre pour le Pb de warning 
Le QA remonte les messages de la version modifié Auto. 

Modifié par henri-allauch

Partager ce message


Lien à poster
Partager sur d’autres sites

Hello @henri-allauch

 

merci de ton intervention malgré ton manque de temps, cependant pour info si je passe sur php 7.4 le souci de warning est le même...enfin presque juste une différence entre "undefinied index action" et "undefined array key "actions"" :
voir pj

 

php-7.4.jpg

php-8.2.jpg

Partager ce message


Lien à poster
Partager sur d’autres sites

OK alors la piste que tu suggère ( scènes en mode block ) est peut être la bonne.

Je n'ai pas de scène mode bloc ni de scène à part celles les 4 imposés par Fibaro  ( Morning Evening , ...) qui à priori ne pose pas de problème

Il y a peut être quelque chose de différent dans le json /api/scenes/$deviceId des scènes qui provoque cette absence d'indice de clé

Partager ce message


Lien à poster
Partager sur d’autres sites

J'ai jeté un petit coup d'oeil effectivement c'est bien lié aux scènes bloc. La structure du json scènes/content/actions est différente.

Il y a 19 heures, chrisalex a dit :

mais ce n'est pas gênant car de tout façon il ne peut backuper ces scenes car elle ne sont pas en lua

Tu as raison, même si on récupère le contenu de la structure, il serait difficile de la déposer simplement dans la scène block. Donc la solution serait peut être d'ignorer les scènes mode block

 

En attendant on reste avec un warning 

 

++ Dernière Minute j'ai fait une version modifiée pour Signaler mais ignorer les scènes Blocs  (à vérifier)

Modif SaveHc3-Auto.php

Modifié par henri-allauch
Ajourtd'un Php modifié

Partager ce message


Lien à poster
Partager sur d’autres sites

hello @henri-allauch

 

c'est pas mal du tout ça plus de warning ... cependant il semble ne plus sauvegarder aucune scene lua non plus, mais continue à sauvegarder les quatre scenes bloc Fibaro "Time Light Scenario", "Gate Light Scenario", "Morning scenario" et "Evening Scenario"

Modifié par chrisalex

Partager ce message


Lien à poster
Partager sur d’autres sites

ah ok j'ai fait l'essai sur une box qui n'avait que des scènes fibaro ("Time Light Scenario", "Gate Light Scenario", "Morning scenario" et "Evening Scenario")

qui sont de type scénarios 

donc il doit y  voir au autre type scène a autoriser il faut que j'en crée pour tester 

 

J'ai ajouté le  le type Lua   ---- >> à tester.

 

SaveHc3-Auto.php

Modifié par henri-allauch
Ajourtd'un Php modifié
  • Like 2

Partager ce message


Lien à poster
Partager sur d’autres sites

hello,

 

hé hé ça me parait être la bonne fournée cette fois ... plus d"erreur sauvegarde des scene lua et ignorance des scene blocs mais cerise sur le gateau référencées comme tel dans les logs et fichier.

merci @henri-allauch

Partager ce message


Lien à poster
Partager sur d’autres sites
Le 24/02/2023 à 14:38, jojo a dit :

J'ai (comme d'hab) une question :
   - à quoi correspond/sert l'action <Abandon> ?

Si tu te sert toujours de cette version manuelle,

Tu peux ajouter au traitement du Exit vers la ligne 321 du php initial  la fonction window.close()

case "Exit":
      echo "<script> window.close();</script>";
      exit();

Ainsi quand tu sélectionne Abandon et que tu valide la fenêtre du Php se fermera.

 

  • Like 1

Partager ce message


Lien à poster
Partager sur d’autres sites

×