diff --git a/domo/relay.script.d/README.md b/domo/relay.script.d/README.md index e1543fe..c96f2c7 100644 --- a/domo/relay.script.d/README.md +++ b/domo/relay.script.d/README.md @@ -1,207 +1,207 @@ # Construction des ordres pour les relais Documentation pour construire des ordres pour les relais Les scripts qui donne les ordres sont dans /opt/PvMonit/domo/relay.script.d/ -Ils sont rédigé en PHP mais peuvent être édité avec Blockly si vous ne savez pas programmé. Ensuite Blockly génère du PHP... +Ils sont rédigé en PHP mais peuvent être édité avec Blockly si vous ne savez pas programmé. Ensuite Blockly génère du PHP... (démonstration ici : http://demo.zici.fr/PvMonit/domo-edit-script.php) Vous pouvez l'attendre avec l'adresse http://votreraspbery/domo-edit-script.php ## Les relais ### Les modes Les relais comportes 4 niveaux de modes (mod) ils sont définies par l'utilisateur soit de façon manuel ou automatique (par les ordres/scripts) * 0 : Éteint forcé * Off forcé (action de l'utilisateur, ne peut être changé par les ordres/scripts) * 1 : Éteint * Off automatique (paramètre de base) * 2 : Allumé * On automatique (allumé par les scripts * 3 : Allumé forcé * On forcé (action de l'utilisateur, ne sera ne peut être changé par les ordres/scripts) ### Les états Les relais on un "état" : * 0 : Relai éteint * 1 : Relai allumé ## Donner un ordre Pour un changement sur le relai, fin du script doit contenir au minimum 1 variable de retour : ### $return['mod'] Cette variable est indispensable sinon le relai ne change pas d'état Cette variable doit être à 1 ou 2 * 1 le relai sera éteint si ce n'est pas déjà le cas * 2 le relai sera allumé si ce n'est pas déjà le cas Un exemple en php d'un script minimum : ```php $return['mod'] = 2; // Allume le relai sans condition... return $return; // Indispensable en fin de script ``` ### $return['log'] C'est une option, cela permet d'indiquer dans le log pourquoi le mod à changé. Cela permet une trace en cas de débug... Un exemple en php : ```php $return['mod'] = 2; // Allume le relai sans condition... $return['log'] = "Allumage du relai"; // Indique dans le log (pour trace ) return $return; // Indispensable en fin de script ``` Un exemple avec une condition d'heure en PHP ```php $return['mod'] = 1; // Par défaut le relai est éteint $return['log'] = null // Si il est plus de 8h if (date('G') > 8) { // https://www.php.net/manual/fr/function.date.php $return['mod'] = 2; // On allume le relai $return['log'] = "Allumage du relai, il est plus de 8h du matin"; // Indique dans le log (pour trace ) } return $return; // Indispensable en fin de script ``` ## Les variables ### $thisId Renvoi l'ID du relai. Par exemple "2" si vous êtes dans le scripts qui gère le relai "2" Retour : 1 à X (x = nombre de relai installé) ### $thisEtat Renvoi l'état de ce relai à l'instant (C.F. doc plus haut sur l'état des relai) Retour : 0 ou 1 ### $relayEtat[x] Renvoi l'état du relai choisie (nommé par x ici) Paramètre : x = id d'un relai Retour : 0 ou 1 Exemple en PHP : ```php // Si le relai 3 est allumé if ($relayEtat[3] == 1) { // action à mener... } ``` ### $thisMod Renvoi le mode de ce relai à l'instant (C.F. doc plus haut sur les mods des relai) Retour : 0, 1, 2 ou 3 ### $data[nom] - donnée d'une sonde / d'un appareil C'est toutes données récupéré/visible dans PvMonit. Cela peut être la valeur d'un appareil victron, d'une sonde de température, d'un capteur de courant... A configurer dans le fichier config.yaml (valeur : domo / valueUse) par exemple : * $data['SOC'] = % de batterie (si vous avez un BMV) * $data['P'] : puissance instantané (négatif ou positif) (si vous avez un BMV) * $data['PPV'] : production solaire (si vous avez un régulateur) * $data['CS'] : mode du régulateur (float, abs...) (si vous avez un régulateur) ## Fonctions ### relayUpToday(X) Renvoi VRAI (true) si le relai X à déjà été allumé ce jour ou FAUX (false) s'il n'a pas déjà été allumé ce jour Ce jour = dans les 12 dernières heures ### relayUpDownToday(X) Renvoi VRAI (true) si le relai X à déjà été allumé puis éteint ce jour ou FAUX (false) s'il n'a pas déjà été allumé ce jour Exemple en PHP : ```php // Si le relai 3 a été allumé puis éteint dans les 12 dernières heures if (relayUpDownToday(3) == true) { // action à mener... } ``` ### relayLastUp(X) Renvoi la date (en [timestamp](http://www.timestamp-tool.fr/)) du dernier allumage du relai X passé en paramètre. ### relayLastUpAuto(X) Renvoi la date (en [timestamp](http://www.timestamp-tool.fr/)) du dernier allumage en automatique du relai X passé en paramètre. ### relayLastDown($idRelai) Renvoi la date (en [timestamp](http://www.timestamp-tool.fr/)) de la dernière extinction du relai X passé en paramètre. ### timeUpMin(X, Y) Paramètre : * X : Id du relai * Y : Temps du timer Renvoi VRAI (true) si le temps minimum Y (en seconde) n'est pas encore écoulé depuis l'allumage. Exemple en PHP : ```php // Si le relai 3 n'est pas allumé depuis plus de 300 secondes if (timeUpMin(3, 300) == true) { // action à mener... } ``` ### timeUpMax(X, Y) Inverse de timeUpMin ### MpptAbsOrFlo($data['CS']) Renvoi VRAI (true) si le régulateur est en Float ou en Absorption et FAUX (false) si ce n'est pas le cas Dépend de $data['CS'] Exemple en PHP : ```php // Si le régulateur est en Absorption ou Float if (MpptAbsOrFlo($data['CS']) == true) { // action à mener... } ``` ### MpptFlo($data['CS']) : retourne true si le régulateur est en Float Renvoi VRAI (true) si le régulateur est en Float et FAUX (false) si ce n'est pas le cas Dépend de $data['CS'] Exemple en PHP : ```php // Si le régulateur est en Float if (MpptAbsOrFlo($data['CS']) == true) { // action à mener... } ``` ### \ No newline at end of file diff --git a/www/data-xml.php b/www/data-xml.php index 942adc2..8703302 100755 --- a/www/data-xml.php +++ b/www/data-xml.php @@ -1,192 +1,193 @@ $device_data) { if (preg_match_all('/^Serial[0-9]$/m', $device_id)) { $device_vedirect_data[$idDevice]=vedirect_parse_arduino($device_data); $idDevice++; } } $vedirect_data_ready = $device_vedirect_data; } } foreach ($vedirect_data_ready as $device) { if ($device['serial'] == 'Inconnu' || $device['serial'] == '') { $device['serial'] = $device['nom']; } echo "\n\t".''; echo "\n\t\t".''.$device['nom'].''; echo "\n\t\t".''.time().''; echo "\n\t\t".''.$device['type'].''; echo "\n\t\t".''.$device['modele'].''; echo "\n\t\t".''.$device['serial'].''; echo "\n\t\t".''; sort($device['data']); foreach (explode(',', $device['data']) as $data) { $dataSplit = explode(':', $data); $veData=ve_label2($dataSplit[0], $dataSplit[1]); echo "\n\t\t\t".''; echo "\n\t\t\t\t".''.$veData['desc'].''; echo "\n\t\t\t\t".''.$veData['value'].''; echo "\n\t\t\t\t".''.$veData['units'].''; echo "\n\t\t\t".''; if ($dataSplit[0] == 'PPV'){ $ppv_total=$ppv_total+$dataSplit[1]; $nb_ppv_total++; } if ($device['type'] == "BMV" && $dataSplit[0] == 'P'){ $bmv_p=$dataSplit[1]; } } echo "\n\t\t".''; echo "\n\t".''; } # Divers $bin_enabled_data = scandir($config['dir']['bin_enabled']); if(count($bin_enabled_data) > 2 || $config['data']['ppv_total'] || $config['data']['ppv_total']) { ?> Divers Production total des panneaux '.$ppv_total.' W '; } ?> Consommation du foyer '.abs($conso).' W '; } ?> $value) { unset($array_data[$i]); } + trucAdir(3, "Lecture du script ".$bin_script_enabled); $script_return = (include $config['dir']['bin_enabled'].'/'.$bin_script_enabled); file_put_contents($cache_file_script, json_encode($script_return)); if (substr(sprintf('%o', fileperms($cache_file)), -3) != '777') { chmod($cache_file, 0777); } } $timerefresh=filemtime($cache_file_script); $script_return_datas = json_decode(file_get_contents($cache_file_script), true) ; //trucAdir(4, print_r($script_return_datas)); echo "\n\t"; echo "\n\t\t"; echo "\n\t\t".$timerefresh.""; echo "\n\t\t"; echo "\n\t\t"; echo "\n\t\t"; echo "\n\t\t"; sort($script_return_datas); foreach ($script_return_datas as $script_return_data) { if (isset($script_return_data['id'])) { $id_data=$script_return_data['id']; } else { $id_data=$id; } echo "\n\t\t\t"; echo "\n\t\t\t\t".$script_return_data['desc'].""; echo "\n\t\t\t\t".$script_return_data['value'].""; echo "\n\t\t\t\t".$script_return_data['units'].""; echo "\n\t\t\t"; } echo "\n\t\t"; echo "\n\t"; } } } trucAdir(5, "Fin du data-xml.php"); ?>