Problème avec un script

Bonjour à tous

je voudrais lancer un script qui met des infos dans un fichier sur jeedom

le script est lancé via la plugin script

lors que je le fais à destination du dossier où j’ai créer mon dossier dans : /var/www/html/plugins/script/data/
il me dit acces denied

il y a un dossier dans jeedom qui est accessible en écriture ?

merci

Oui, tous.

La commande ls -al /var/www/html/plugins/script/ doit retourner quelque chose comme drwxrwxr-x 3 www-data www-data 4096 Jun 29 2021 data

Il faut soit être l’utilisateur « www-data » ou que l’utilisateur que tu es (« nemeraud » par exemple) fasse partie du groupe « www-data » et aussi vérifier les droits d’écriture du groupe sur le dossier dans lequel tu veux écrire.

Je te laisser chercher sur le net la commande pour ajouter l’utilisateur « nemeraud » au groupe « www-data ».

merci pour ta réponse

c’est pas un soucis de création du fichier en fait, il a des droits suffisant :
-rw-r–r-- 1 www-data www-data 188 Jun 29 11:58 log.txt

j’ai quand j’analyse le fichier qui est un json avec la commande : $vehicule=json_decode($jsonmod,true);

que j’ai une erreur de cache

DEBUG VEHICULE = ArrayPHP Fatal error: Uncaught InvalidArgumentException: The directory "/tmp/jeedom/cache" is not writable. in /var/www/html/vendor/doctrine/cache/lib/Doctrine/Common/Cache/FileCache.php:92
Stack trace:
#0 /var/www/html/vendor/doctrine/cache/lib/Doctrine/Common/Cache/FilesystemCache.php(37): Doctrine\Common\Cache\FileCache->__construct('/tmp/jeedom/cac...', '.doctrinecache....', 2)
[#1](https://github.com/NicKoehler/fordpass-python/pull/1) /var/www/html/core/class/cache.class.php(116): Doctrine\Common\Cache\FilesystemCache->__construct('/tmp/jeedom/cac...')
[clarkd#2](https://github.com/clarkd/fordpass-python/issues/2) /var/www/html/core/class/cache.class.php(151): cache::getCache()
[clarkd#3](https://github.com/clarkd/fordpass-python/pull/3) /var/www/html/core/class/cmd.class.php(2759): cache::byKey('cmdCacheAttr327...')
[clarkd#4](https://github.com/clarkd/fordpass-python/issues/4) /var/www/html/core/class/cmd.class.php(1084): cmd->getCache(Array)
[clarkd#5](https://github.com/clarkd/fordpass-python/pull/5) /var/www/html/core/class/cmd.class.php(1674): cmd->execCmd()
[clarkd#6](https://github.com/clarkd/fordpass-python/issues/6) /var/www/html/plugins/script/data/fordpass/analyse_status.php(44): cmd->event('UNLOCKED')
[clarkd#7](https://github.com/clarkd/fordpass-python/pull/7) {main}
thrown in /var/www/html/vendor/doctrine/cache/lib/Doctrine/Common/Cache/FileCache.php on line 92

c’est normal d’avoir ca avec un "ls -s /temp/jeedom/cache "

Aucune idée.

Je ne sais pas ce que fait ton script, mais normalement, on n’a pas à toucher à « /tmp/jeedom/cache »

Là, il faudra des experts pour corriger les éventuels problèmes du cache Jeedom…

c’est juste un décodage du fichier json

si un expert passe par là :slight_smile:

merci pour ton aide

Salut,

Il n’y a aucun problème dans la gestion du cache Jeedom par contre effectivement il n’y a strictement aucune bonne raison pour jouer avec sans savoir exactement ce que l’on fait.

Dans la même idée il vaut mieux éviter de balancer des scripts dont on ne sait pas ce qu’ils font. Dans l’absolu sans partager ton script il est strictement impossible de savoir de quoi il en retourne.

Enfin, merci de mettre le code entre les balises adaptées.

Bonjour

je ne joue pas avec le cache :slight_smile: ni à cache-cache, ok elle était facile.

je maitrise mon script qui fonctionnait très bien il y a peu

j’ai juste cette commande qui est sensée dépioter un fichier json qui me renvoi une erreur que je n’avais pas avant

$vehicule=json_decode($jsonmod,true);

Bonjour,

C’est normal que cela crash, $jsonmod n’est pas définit.
(Si la question est mal posée, la reponse sera incorrecte :wink:)

Je répète donc:

En voyant la stack trace d’erreur, on constate qu’il est question de fordpass-python (https://github.com/clarkd/fordpass-python).
Votre script est un wrapper PHP du script python ?
A mon avis l’erreur de cache n’a rien à voir avec l’usage de la fonction json_decode.

Sans plus d’info de votre part, ca va être compliqué…

As-tu fait un $scenario->setLog de cette variable ?

Merci pour vos réponses

La variable jsonmod contient le contenu du json après nettoyage

J’ai vérifié en affichant le contenu de la variable

J’ai même testé ce contenu dans un parser online, qui est bien valide

<?php

# lancement de la récupération des données
$json = shell_exec('python3 /var/www/html/plugins/script/data/fordpass/fordpass_vehicule_status.py X Y Z');

require_once dirname(__FILE__) . '/../../../../core/php/core.inc.php';

# Nettoyage du fichier
$jsonmod=str_replace('xxx','XXXXX',$json); // supprime VIN
$jsonmod=str_ireplace(["'",'true','false'],['"','true','false'],$jsonmod); // remplace les ' par "  et met en minuscule true,false
$jsonmod=preg_replace('/([a-zA-Z_]+)/','"$1"',$jsonmod); // quote les valeurs qui en ont besoin (même celles qui n'en ont pas besoin
$jsonmod=str_replace('""','"',$jsonmod); // enlève les sur-quote (cf dessus)

echo "DEBUG VEHICULE = ".$jsonmod;

$vehicule=json_decode($jsonmod,true);


#Récupértion des informations
cmd::byId(32784)->event($vehicule['lockStatus']['value']);

?>

voici le résultat

DEBUG VEHICULE = {"vin": "XXXXX", "lockStatus": {"value": "LOCKED", "status": "CURRENT", "timestamp": "06-30-2022 16:01:31"}, "alarm": {"value": "NOTSET", "status": "CURRENT", "timestamp": "06-30-2022 16:01:31"}, "PrmtAlarmEvent": {"value": "Null", "status": "CURRENT", "timestamp": "06-30-2022 16:01:31"}, "odometer": {"value": 7890.0, "status": "CURRENT", "timestamp": "06-30-2022 16:01:31"}, "fuel": {"fuelLevel": 24.891384, "distanceToEmpty": 250.8, "status": "CURRENT", "timestamp": "06-30-2022 16:01:31"}, "gps": {"latitude": "xxx", "longitude": "-xxx", "gpsState": "UNSHIFTED", "status": "CURRENT", "timestamp": "06-30-2022 16:01:31"}, "remoteStart": {"remoteStartDuration": 0, "remoteStartTime": 0, "status": "CURRENT", "timestamp": "06-30-2022 16:01:31"}, "remoteStartStatus": {"value": 0, "status": "CURRENT", "timestamp": "06-30-2022 16:01:31"}, "battery": {"batteryHealth": {"value": "STATUS_GOOD", "timestamp": "05-29-2022 11:36:20"}, "batteryStatusActual": {"value": 12, "status": "CURRENT", "timestamp": "06-30-2022 16:01:31"}}, "oil": {"oilLife": "STATUS_GOOD", "oilLifeActual": 56, "status": "CURRENT", "timestamp": "06-30-2022 16:01:31"}, "tirePressure": {"value": "STATUS_GOOD", "timestamp": "06-30-2022 16:01:31"}, "authorization": "AUTHORIZED", "TPMS": {"tirePressureByLocation": {"value": 1, "status": "CURRENT", "timestamp": "06-30-2022 16:01:31"}, "tirePressureSystemStatus": {"value": "Systm_Activ_Composite_Stat", "status": "CURRENT", "timestamp": "06-30-2022 16:01:31"}, "dualRearWheel": {"value": 0, "status": "CURRENT", "timestamp": "06-30-2022 16:01:31"}, "leftFrontTireStatus": {"value": "Normal", "status": "CURRENT", "timestamp": "06-30-2022 16:01:31"}, "leftFrontTirePressure": {"value": "239", "status": "CURRENT", "timestamp": "06-30-2022 16:01:31"}, "rightFrontTireStatus": {"value": "Normal", "status": "CURRENT", "timestamp": "06-30-2022 16:01:31"}, "rightFrontTirePressure": {"value": "241", "status": "CURRENT", "timestamp": "06-30-2022 16:01:31"}, "outerLeftRearTireStatus": {"value": "Normal", "status": "CURRENT", "timestamp": "06-30-2022 16:01:31"}, "outerLeftRearTirePressure": {"value": "229", "status": "CURRENT", "timestamp": "06-30-2022 16:01:31"}, "outerRightRearTireStatus": {"value": "Normal", "status": "CURRENT", "timestamp": "06-30-2022 16:01:31"}, "outerRightRearTirePressure": {"value": "229", "status": "CURRENT", "timestamp": "06-30-2022 16:01:31"}, "innerLeftRearTireStatus": {"value": "Not_Supported", "status": "CURRENT", "timestamp": "06-30-2022 16:01:31"}, "innerLeftRearTirePressure": "None", "innerRightRearTireStatus": {"value": "Not_Supported", "status": "CURRENT", "timestamp": "06-30-2022 16:01:31"}, "innerRightRearTirePressure": "None", "recommendedFrontTirePressure": {"value": 35, "status": "CURRENT", "timestamp": "06-30-2022 16:01:31"}, "recommendedRearTirePressure": {"value": 30, "status": "CURRENT", "timestamp": "06-30-2022 16:01:31"}}, "firmwareUpgInProgress": {"value": "false", "timestamp": "05-29-2022 11:27:25"}, "deepSleepInProgress": {"value": "false", "timestamp": "05-29-2022 11:27:25"}, "ccsSettings": {"timestamp": "10-09-2021 07:50:52", "location": 1, "vehicleConnectivity": 1, "vehicleData": 1, "drivingCharacteristics": -1, "contacts": -1}, "lastRefresh": "06-30-2022 16:01:31", "lastModifiedDate": "06-30-2022 16:01:31", "serverTime": "07-01-2022 20:21:54", "batteryFillLevel": "None", "elVehDTE": "None", "hybridModeStatus": {"value": "NullState", "status": "CURRENT", "timestamp": "06-30-2022 16:01:31"}, "chargingStatus": {"value": "NotReady", "status": "CURRENT", "timestamp": "06-30-2022 16:01:31"}, "plugStatus": {"value": 0, "status": "CURRENT", "timestamp": "06-30-2022 16:01:31"}, "chargeStartTime": {"value": "01-01-2010 00:00:00", "status": "CURRENT", "timestamp": "06-30-2022 16:01:31"}, "chargeEndTime": {"value": "01-01-2010 00:00:00", "status": "CURRENT", "timestamp": "06-30-2022 16:01:31"}, "preCondStatusDsply": {"value": "NotScheduled", "status": "CURRENT", "timestamp": "06-30-2022 16:01:31"}, "chargerPowertype": "None", "batteryPerfStatus": {"value": "Oknomessagedisplayed", "status": "CURRENT", "timestamp": "06-30-2022 16:01:31"}, "outandAbout": {"value": "PwPckOffTqNotAvailable", "status": "CURRENT", "timestamp": "06-30-2022 16:01:31"}, "batteryChargeStatus": "None", "dcFastChargeData": "None", "windowPosition": {"driverWindowPosition": {"value": "Fully_Closed", "status": "CURRENT", "timestamp": "06-30-2022 16:01:31"}, "passWindowPosition": {"value": "Fully_Closed", "status": "CURRENT", "timestamp": "06-30-2022 16:01:31"}, "rearDriverWindowPos": {"value": "Fully_Closed", "status": "CURRENT", "timestamp": "06-30-2022 16:01:31"}, "rearPassWindowPos": {"value": "Fully_Closed", "status": "CURRENT", "timestamp": "06-30-2022 16:01:31"}}, "doorStatus": {"rightRearDoor": {"value": "Closed", "status": "CURRENT", "timestamp": "06-30-2022 16:01:31"}, "leftRearDoor": {"value": "Closed", "status": "CURRENT", "timestamp": "06-30-2022 16:01:31"}, "driverDoor": {"value": "Closed", "status": "CURRENT", "timestamp": "06-30-2022 16:01:31"}, "passengerDoor": {"value": "Closed", "status": "CURRENT", "timestamp": "06-30-2022 16:01:31"}, "hoodDoor": {"value": "Closed", "status": "CURRENT", "timestamp": "06-30-2022 16:01:31"}, "tailgateDoor": {"value": "Closed", "status": "CURRENT", "timestamp": "06-30-2022 16:01:31"}, "innerTailgateDoor": {"value": "Closed", "status": "CURRENT", "timestamp": "06-30-2022 16:01:31"}}, "ignitionStatus": {"value": "Off", "status": "CURRENT", "timestamp": "06-30-2022 16:01:31"}, "batteryTracLowChargeThreshold": "None", "battTracLoSocDDsply": "None", "dieselSystemStatus": {"exhaustFluidLevel": "None", "filterSoot": "None", "ureaRange": "None", "metricType": {"value": "Active", "status": "CURRENT", "timestamp": "06-30-2022 16:01:31"}, "filterRegenerationStatus": {"value": "DPF_Normal_Operation", "status": "CURRENT", "timestamp": "06-30-2022 16:01:31"}}}
PHP Fatal error:  Uncaught InvalidArgumentException: The directory "/tmp/jeedom/cache" is not writable. in /var/www/html/vendor/doctrine/cache/lib/Doctrine/Common/Cache/FileCache.php:92
Stack trace:
#0 /var/www/html/vendor/doctrine/cache/lib/Doctrine/Common/Cache/FilesystemCache.php(37): Doctrine\Common\Cache\FileCache->__construct('/tmp/jeedom/cac...', '.doctrinecache....', 2)
#1 /var/www/html/core/class/cache.class.php(116): Doctrine\Common\Cache\FilesystemCache->__construct('/tmp/jeedom/cac...')
#2 /var/www/html/core/class/cache.class.php(151): cache::getCache()
#3 /var/www/html/core/class/cmd.class.php(2759): cache::byKey('cmdCacheAttr327...')
#4 /var/www/html/core/class/cmd.class.php(1084): cmd->getCache(Array)
#5 /var/www/html/core/class/cmd.class.php(1674): cmd->execCmd()
#6 /var/www/html/plugins/script/data/fordpass/analyse_status.php(20): cmd->event('LOCKED')
#7 {main}
  thrown in /var/www/html/vendor/doctrine/cache/lib/Doctrine/Common/Cache/FileCache.php on line 92

en fait c’est pas la commande json_deconde qui génère l’erreur mais cette commande

cmd::byId(32784)->event($vehicule['lockStatus']['value']);

si je remplace par

echo $vehicule['lockStatus']['value'];

alors je n’ai plus l’erreur

cette ID de commande existe bien

cette commande pour injecter le résultat dans un commande info d’un virtuel de jeedom n’est plus possible ?

en faisant ce simple test

<?php
require_once dirname(__FILE__) . '/../../../../core/php/core.inc.php';

cmd::byId(32784)->event("toto");

echo "\nFIN"
?>

j’ai l’erreur

Stack trace:
#0 /var/www/html/vendor/doctrine/cache/lib/Doctrine/Common/Cache/FilesystemCache.php(37): Doctrine\Common\Cache\FileCache->__construct('/tmp/jeedom/cac...', '.doctrinecache....', 2)
#1 /var/www/html/core/class/cache.class.php(116): Doctrine\Common\Cache\FilesystemCache->__construct('/tmp/jeedom/cac...')
#2 /var/www/html/core/class/cache.class.php(151): cache::getCache()
#3 /var/www/html/core/class/cmd.class.php(2759): cache::byKey('cmdCacheAttr327...')
#4 /var/www/html/core/class/cmd.class.php(1084): cmd->getCache(Array)
#5 /var/www/html/core/class/cmd.class.php(1674): cmd->execCmd()
#6 /var/www/html/plugins/script/data/fordpass/test.php(21): cmd->event('toto')
#7 {main}
  thrown in /var/www/html/vendor/doctrine/cache/lib/Doctrine/Common/Cache/FileCache.php on line 92

Bonjour @Nemeraud,

C’est encore un joli cas de problème X Y…

J’imagine que ton script fordpass_vehicule_status.py est inspiré du script de démo de fordpass.

La sortie de ce script est une sortie de test faite avec un print(), ce qui explique que tu ais besoin de la transformer en json…
Vu que la seule valeur qui t’intéresse est celle dans ['lockStatus']['value'], tu ne peux pas juste afficher celle-ci, t’évitant ainsi le post traitement ?
Sinon, remplace simplement print( par json.dumps( et ajoute import json en haut du script et tu auras un json valide parsable directement en PHP.

Cela étant, ton problème principal ne vient en effet pas de là… Elle est vraisemblablement liée au fait que le cache est verrouillé au moment où tu envois l’event :

Si ce script PHP est lancé par le plugin script, le cache est déjà verrouillé par le plugin au moment ou tu fais l’event depuis ce script, donc impossible d’envoyer l’event. Pour vérifier, lance le script à la main hors plugin script si tout se passe bien, mon hypothèse est juste, sinon il faut creuser ailleurs.

Bad

1 « J'aime »

merci pour ta réponse

le json n’est pas en cause, mais je vais appliquer tes conseils pour éviter le nettoyage :slight_smile:

je viens de faire un test avec juste la commande d’injection dans mon virtuel jeedom

et ca ne marche plus, même en lancant le script à la mano

Donc en console, directement avec sudo -u www-data php ./monscript.php, on est d’accord ?

C’est fun quand même, tu n’as aucune idée de ce que tu fais mais arrive quand même à sous-entendre que le problème viendrait de Jeedom !

C’est quoi comme sous-type de commande déjà ?

le script à les bons droits mais je le lancais pas en sudo
Je ne savais pas que via le plugin script, il lancait correctement
je viens de faire le test via le plugin script et cela fonctionne, il me met tata dans le virtuel

retour à la case départ, car j’ai toujours un soucis avec mon script d’origine, je refais mes tests

merci pour ton aide @Bad

alors quand je lance le script en sudo, il ne trouve pas le module fordpass

jeedom@Jeedom:/var/www/html/plugins/script/data/fordpass$ sudo php ./test.php
Traceback (most recent call last):
  File "/var/www/html/plugins/script/data/fordpass/fordpass_vehicule_status.py", line 8, in <module>
    from fordpass import Vehicle
ModuleNotFoundError: No module named 'fordpass'

Bonjour @Salvialf

merci pour tes remarques toujours très agréables.

je ne sous entend rien, je cherche à faire re-fonctionner un script avec la gentillesse et la bienveillance des membres de cette communauté, si ce n’est plus sont objectif, dite le moi.