Bonjour
Je me suis lancé dans la création d’un nouveau plugin (fou que je suis) et la, je me demandais si l’excellent et incontournable topic de @zygomatik sur l’ancien forum ( [how to] création d’un plugin ) a été mis à jour / importé sur le nouveau forum ? J’ai pas trouvé
(edit: il est ici)
Il y a aussi une doc Plugin template | plugin-template qui mérite d’être mise à jour
Je vais citer aussi la « phpDoc » générée automatiquement mais il y a tellement peu de commentaire dans le code qu’elle est assez pauvre et c’est bien dommage:
https://doc.jeedom.com/dev/phpdoc/3.3/
j’ai aussi trouvé de l’info sur le wiki du plugin template en particulier pour le daemon; Les automates dans Jeedom · rjullien/Jeedom-Plugins-Extra Wiki · GitHub
Autre source par sylvain:
Réaliser son 1er plugin avec un générateur automatique du squelette, et Des commandes et des tâches
tip debug: ajouter du log! ex:
log::add("lgthinq$_loggerSuffix", 'debug', $_message, $_logicalId);
1er param = le nom du log, par convention le nom du plugin (avec éventuellement un suffixe)
2e param = niveau de log (debug, info, warning, error)
3e param = le message à afficher
4e param facultatif (sais pas encore à quoi il sert)
Si plantage général (erreur non gérée, ou mal) un log sera généré dans http.error qui est le log par défaut. Si aucun log? il peut y avoir une erreur silencieuse sur le log ( core/class/log.class.php ) à cause du caractère @ dans la méthode de log.
tip debug#2: ajouter une fonction de shutdown
ajouter ce genre de fonction au début du index.php
(ou dans un fichier séparé à inclure) permet de « catcher » toutes les erreurs y compris de compilation dans vos modules basé sur cette discussion de stackoverflow
<?php
define('E_FATAL', E_ERROR | E_USER_ERROR | E_PARSE | E_CORE_ERROR |
E_COMPILE_ERROR | E_RECOVERABLE_ERROR);
define('ENV', 'dev');
// Custom error handling vars
define('DISPLAY_ERRORS', TRUE);
define('ERROR_REPORTING', E_ALL | E_STRICT);
define('LOG_ERRORS', TRUE);
register_shutdown_function('shut');
set_error_handler('handler');
// Function to catch no user error handler function errors...
function shut(){
$error = error_get_last();
if($error && ($error['type'] & E_FATAL)){
handler($error['type'], $error['message'], $error['file'], $error['line']);
}
}
function handler( $errno, $errstr, $errfile, $errline ) {
switch ($errno){
case E_ERROR: // 1 //
$typestr = 'E_ERROR'; break;
case E_WARNING: // 2 //
$typestr = 'E_WARNING'; break;
case E_PARSE: // 4 //
$typestr = 'E_PARSE'; break;
case E_NOTICE: // 8 //
$typestr = 'E_NOTICE'; break;
case E_CORE_ERROR: // 16 //
$typestr = 'E_CORE_ERROR'; break;
case E_CORE_WARNING: // 32 //
$typestr = 'E_CORE_WARNING'; break;
case E_COMPILE_ERROR: // 64 //
$typestr = 'E_COMPILE_ERROR'; break;
case E_CORE_WARNING: // 128 //
$typestr = 'E_COMPILE_WARNING'; break;
case E_USER_ERROR: // 256 //
$typestr = 'E_USER_ERROR'; break;
case E_USER_WARNING: // 512 //
$typestr = 'E_USER_WARNING'; break;
case E_USER_NOTICE: // 1024 //
$typestr = 'E_USER_NOTICE'; break;
case E_STRICT: // 2048 //
$typestr = 'E_STRICT'; break;
case E_RECOVERABLE_ERROR: // 4096 //
$typestr = 'E_RECOVERABLE_ERROR'; break;
case E_DEPRECATED: // 8192 //
$typestr = 'E_DEPRECATED'; break;
case E_USER_DEPRECATED: // 16384 //
$typestr = 'E_USER_DEPRECATED'; break;
}
$message =
'<b>' . $typestr .
': </b>' . $errstr .
' in <b>' . $errfile .
'</b> on line <b>' . $errline .
'</b><br/>';
if(($errno & E_FATAL) && ENV === 'production'){
header('Location: 500.html');
header('Status: 500 Internal Server Error');
}
if(!($errno & ERROR_REPORTING))
return;
if(DISPLAY_ERRORS)
printf('%s', $message);
//Logging error on php file error log...
if(LOG_ERRORS)
error_log(strip_tags($message), 0);
}
tip dépendances : ajouter un script resources/install_apt.sh sur ce modèle
à propos de dépendances, bien penser que les box (smart & pro & peut être autre…) sont sous Debian Stretch + PHP7.0 et le comportement de PHP n’est pas identique en PHP7.3 (version de Buster)
tip erreur étrange javascript du style undefined element of #
il faut vérifier le code source HTML généré à un validateur HTML ça permet souvent de repérer un tag ouvert non fermé, ou un tag fermé en trop, ou encore des doublons d’ID sur la page.
gestion des dépendances : 2 méthodes d’instance à ajouter dans la classe principale eqLogic.