PHP fatal error lors de la sauvegarde de modifications

Bonjour,

Lorsque je clique sur « sauvegarder » pour enregistrer les modifications faites dans mes objets du plugin volet, j’ai une erreur 500 Internal server error qui s’affiche et une erreur PHP fatale dans les logs http.error :

[Wed Feb 12 18:28:05.874182 2020] [php7:error] [pid 27208] [client 81.13.196.24:50983] PHP Fatal error:  Uncaught Error: Call to a member function execCmd() on boolean in /var/www/html/plugins/Volets/core/class/Volets.class.php:928
Stack trace:
#0 /var/www/html/core/class/DB.class.php(140): Volets->preSave()
#1 /var/www/html/core/class/eqLogic.class.php(945): DB::save(Object(Volets), false)
#2 /var/www/html/core/ajax/eqLogic.ajax.php(379): eqLogic->save()
#3 {main}
thrown in /var/www/html/plugins/Volets/core/class/Volets.class.php on line 928, referer: https://xxx/index.php?v=d&m=Volets&p=Volets&id=260

Mon Jeedom est installé sur une machine virtuelle Debian 9.11 avec php 7.2.

En début de semaine j’ai pu modifier un volet et rajouter une gestion conditionnelle

Je vais regarder ça

C’est très étrange car l’exception est bien gérer.
À la sauvegarde on vérifie qu’heliotrope et geotrav soit bien configurer.
La c’est geotrav qui pose problème mais je ne comprend pas pourquoi elle n’ai pas gérer

Peux tu vérifier ta configuration geotrav ?

Effectivement j’ai trouvé, c’est le fait d’activer la géolocalisation via Jeedom dans le plugin Heliotrope au lieu de la géolocalisation via geotrav

Salut.

Je confirme, j’ai finalement éliminé le plugin geotrav et j’ai la même erreur.
ça n’empêche pas le plugin Volets de fonctionner, tant que l’on ne fait pas de changement
Il manque un test si geotravCmd est dispo

				$geoloc = geotravCmd::byEqLogicIdAndLogicalId($heliotrope->getConfiguration('geoloc'),'location:coordinate');
				if(is_object($geoloc) && $geoloc->execCmd() == '')	
					throw new Exception(__('Impossible d\'enregistrer, la configuration de  "Localisation et trajet" (geotrav) n\'est pas correcte', __FILE__));

Je regarderai ça
Je n’ai pas vue l’évolution d’heliotrope mais si on peut se passer de geotrav je prend

Top et merci pour le plugin !

Salut,

J’ai bricolé un truc rapide

	public function preSave() {
		if($this->getConfiguration('heliotrope') == "Aucun")
			throw new Exception(__('Impossible d\'enregistrer, la configuration de l\'équipement heliotrope n\'existe pas', __FILE__));
		else{
			$heliotrope=eqlogic::byId($this->getConfiguration('heliotrope'));
			if(is_object($heliotrope)){	
				if($heliotrope->getConfiguration('geoloc') == "")
					throw new Exception(__('Impossible d\'enregistrer, la configuration  heliotrope n\'est pas correcte', __FILE__));
				$geotrav=eqlogic::byId($this->getConfiguration('geotrav'));
				if(is_object($geotrav)){
					$geoloc = geotravCmd::byEqLogicIdAndLogicalId($heliotrope->getConfiguration('geoloc'),'location:coordinate');
					if(is_object($geoloc) && $geoloc->execCmd() == '')	
						throw new Exception(__('Impossible d\'enregistrer, la configuration de  "Localisation et trajet" (geotrav) n\'est pas correcte', __FILE__));
					$center=explode(",",$geoloc->execCmd());
					$GeoLoc['lat']=$center[0];
					$GeoLoc['lng']=$center[1];
				}else{
					$GeoLoc['lat']=config::byKey('info::latitude');
					if($GeoLoc['lat'] == '')	
						throw new Exception(__('Impossible d\'enregistrer, la configuration de  "latitude" n\'est pas correcte', __FILE__));
					$GeoLoc['lng']=config::byKey('info::longitude');
					if($GeoLoc['lng'] == '')	
						throw new Exception(__('Impossible d\'enregistrer, la configuration de  "longitude" n\'est pas correcte', __FILE__));
				}
				if($this->getConfiguration('Droite') != ''){
					if(!is_array($this->getConfiguration('Droite')))
						$this->setConfiguration('Droite',$GeoLoc);
				}
				if($this->getConfiguration('Gauche') != ''){
					if(!is_array($this->getConfiguration('Gauche')))
						$this->setConfiguration('Gauche',$GeoLoc);
				}
				if($this->getConfiguration('Centre') != ''){
					if(!is_array($this->getConfiguration('Centre')))
						$this->setConfiguration('Centre',$GeoLoc);
				}
			}
		}
	}