{ "name": "Recherche Log copie", "isActive": "1", "group": "", "mode": "schedule", "schedule": "*\/5 * * * *", "trigger": [ "" ], "timeout": "0", "object_id": null, "isVisible": "0", "display": { "name": "", "icon": "<\/i>" }, "order": "9999", "description": "", "configuration": { "timeDependency": 0, "has_return": 0, "logmode": "default", "allowMultiInstance": "0", "syncmode": "0", "timeline::enable": "0", "timeline::folder": "" }, "elements": [ { "name": null, "type": "action", "options": [], "order": "0", "subElements": [ { "name": null, "type": "action", "subtype": "action", "options": { "collapse": "0", "enable": "1" }, "order": "0", "expressions": [ { "type": "element", "subtype": null, "expression": "995", "options": [], "order": "0", "element": { "name": null, "type": "comment", "options": [], "order": "0", "subElements": [ { "name": null, "type": "comment", "subtype": "comment", "options": { "collapse": "0" }, "order": "0", "expressions": [ { "type": "comment", "subtype": null, "expression": "Scenario permettant la recherche d'une chaine de caractère dans un log et exécution d'une action sur résultat\nchaine trouvée : tag(result) == 1\nchaine absente : tag(result) == 0", "options": [], "order": "0" } ] } ] } }, { "type": "action", "subtype": null, "expression": "tag", "options": { "enable": "1", "background": "0", "name": "chemin", "value": "\/var\/www\/html\/log" }, "order": "1" }, { "type": "action", "subtype": null, "expression": "tag", "options": { "enable": "1", "background": "0", "name": "fichier", "value": "fichier de log" }, "order": "2" }, { "type": "action", "subtype": null, "expression": "tag", "options": { "enable": "1", "background": "0", "name": "chaine", "value": "chaine à rechercher" }, "order": "3" } ] } ] }, { "name": null, "type": "code", "options": [], "order": "0", "subElements": [ { "name": null, "type": "code", "subtype": "action", "options": { "collapse": "1", "enable": "1" }, "order": "0", "expressions": [ { "type": "code", "subtype": null, "expression": "\/\/ Detection d'une chaine dans un fichier de log\n\/\/ version bloc code\n$version = '26\/06\/2024 14:00' ;\n$scenario->setLog('┌──────────── Logs bloc code - version du '.$version);\n\n\/\/ Récupérer les tags Jeedom d'entrée\n$tags = $scenario->getTags(); \/\/récupère la liste des tags\n$filename = $tags['#fichier#'];\n$path = $tags['#chemin#'];\n$searchString = $tags['#chaine#'];\n\nfunction checkNewLines($filename, $path , $searchString, $scenario) {\n \n \/\/ Construire le chemin complet du fichier\n $filePath = rtrim($path, '\/') . '\/' . $filename;\n \n \/\/ Nom de la variable Jeedom pour stocker la dernière position\n $variableName = 'last_position_' . str_replace('\/', '_', $filename);\n \n \n\n \/\/ Vérifier l'existence du fichier\n if (!file_exists($filePath)) {\n $scenario->setLog('| Le fichier '.$filePath.' n\\'existe pas');\n return -1; \/\/ Indiquer que le fichier n'existe pas\n }\n\n \/\/ Récupérer la dernière position de la variable Jeedom\n $lastPosition=$scenario->getData($variableName, '0');\n \n \/\/ Ouvrir le fichier pour lecture\n $file = fopen($filePath, 'r');\n if (!$file) {\n $scenario->setLog('| Impossible d\\'ouvrir le fichier '.$filePath);\n return -1; \/\/ Indiquer que le fichier ne peut pas être ouvert\n }\n\n \/\/ Obtenir la taille actuelle du fichier\n $fileSize = filesize($filePath);\n\n \/\/ Vérifier si la dernière position est supérieure à la taille actuelle du fichier (fichier réinitialisé)\n if ($lastPosition > $fileSize) {\n $lastPosition = 0; \/\/ Réinitialiser la dernière position\n }\n $scenario->setLog('| derniere position : '.$lastPosition.', Taille actuelle : '.$fileSize);\n \n \/\/ Se déplacer à la dernière position\n fseek($file, $lastPosition);\n\n \/\/ Lire les nouvelles lignes et vérifier la présence de la chaîne de recherche\n $found = false;\n while (($line = fgets($file)) !== false) {\n if (strpos($line, $searchString) !== false) {\n $found = true;\n break;\n }\n }\n\n \/\/ Obtenir la position actuelle\n \/\/ $currentPosition = ftell($file);\n\n \/\/ Sauvegarder la position actuelle dans la variable Jeedom\n $scenario->setData($variableName, $fileSize);\n\n \/\/ Fermer le fichier\n fclose($file);\n\n \/\/ Log du résultat\n if ($found) {\n $scenario->setLog('| La chaîne '.$searchString.' a été trouvée dans les nouvelles lignes du fichier '.$filePath);\n return 1; \/\/ Chaîne trouvée\n } else {\n $scenario->setLog('| La chaîne '.$searchString.' n\\'a pas été trouvée dans les nouvelles lignes du fichier '.$filePath);\n return 0; \/\/ Chaîne non trouvée\n }\n}\n\n\/\/ Appeler la fonction checkNewLines\n$result = checkNewLines($filename, $path , $searchString,$scenario);\n\n\/\/ Définir un tag Jeedom avec le résultat\n$tags = array('result' => $result);\n$scenario->setTags($tags);\n", "options": [], "order": "0" } ] } ] }, { "name": null, "type": "if", "options": [], "order": "0", "subElements": [ { "name": null, "type": "if", "subtype": "condition", "options": { "collapse": "0", "enable": "1", "allowRepeatCondition": "0" }, "order": "0", "expressions": [ { "type": "condition", "subtype": null, "expression": "tag(result) == 1", "options": [], "order": "0" } ] }, { "name": null, "type": "then", "subtype": "action", "options": [], "order": "1", "expressions": [ { "type": "element", "subtype": null, "expression": "998", "options": [], "order": "0", "element": { "name": null, "type": "action", "options": [], "order": "0", "subElements": [ { "name": null, "type": "action", "subtype": "action", "options": { "collapse": "0", "enable": "1" }, "order": "0", "expressions": [ { "type": "element", "subtype": null, "expression": "999", "options": [], "order": "0", "element": { "name": null, "type": "comment", "options": [], "order": "0", "subElements": [ { "name": null, "type": "comment", "subtype": "comment", "options": { "collapse": "1" }, "order": "0", "expressions": [ { "type": "comment", "subtype": null, "expression": "Commandes action", "options": [], "order": "0" } ] } ] } }, { "type": "action", "subtype": null, "expression": "", "options": { "enable": "1", "background": "0" }, "order": "1" }, { "type": "element", "subtype": null, "expression": "1000", "options": [], "order": "2", "element": { "name": null, "type": "comment", "options": [], "order": "0", "subElements": [ { "name": null, "type": "comment", "subtype": "comment", "options": { "collapse": "1" }, "order": "0", "expressions": [ { "type": "comment", "subtype": null, "expression": "Commandes notification", "options": [], "order": "0" } ] } ] } }, { "type": "action", "subtype": null, "expression": "", "options": { "enable": "1", "background": "0" }, "order": "3" } ] } ] } } ] }, { "name": null, "type": "else", "subtype": "action", "options": [], "order": "2", "expressions": [] } ] } ] }