Beta: Call to a member function getConfiguration() on null

Hello

Depuis la MAJ beta du 2022-05-02 j’ai ce message d’erreur:

Erreur sur la fonction cron du plugin : Call to a member function getConfiguration() on null

Merci

Bonjour idem pour moi

Bonjour à tous, j’ai eu le même problème.

Après avoir fait pas mal de debug ce matin je crois que j’ai trouvé où c’est:

dans la fonction updateLocation() du fichier plugins/ioscore/class/ioscloud.class.php

remplacer

$geofence->updateGeofenceValues($device->getId(), $location);

par

$geofence->updateGeofenceValues($geofence->getId(), $location);

Pour info le code complet avec des rajouts de debug chez moi

Au départ je cherchais une erreur dans la fonction updateGeofenceValues() mais j’ai finis par comprendre que c’est son appel qui semble faux.

        public function updateLocation($_options = false) {
                ($_options) ? $eq= ioscloud::byId($_options['cloud_id']) : $eq = $this;

                log::add('ioscloud','debug', '------------------- updateLocation : ' .  $eq->getId() . '---------------------- '  . $eq->getName());
                $FindMyPhone = new FindMyPhone($eq->getConfiguration('iosadr'), $eq->getConfiguration('iospass'));
                $devices = $FindMyPhone->devices;       
                $c = new Cron\CronExpression($eq->getConfiguration('refreshCron'), new Cron\FieldFactory);
                $c->isDue();    
                if(is_array($devices)) {
                        foreach (ioscloud::byType('ioscloud') as $device) {
                                if ($device->getConfiguration('type') == 'devices' && $device->getIsEnable() == 1 && $device->getConfiguration('id_cloud') == $eq->getId() ) {
                                
                                        $id = $device->getConfiguration('id'); 
                                        if ($devices[$id]->id == $device->getLogicalId()) {
                                                log::add('ioscloud','debug', print_r($devices[$id],true));
                                                
                                                if($devices[$id]->deviceStatus == "203" && $device->getConfiguration('stateOff') != "") {
                                                        log::add('ioscloud','debug', ' --- Status 203  --- '  . $device->getHumanName() );
                                                        $delay = $device->getConfiguration('stateOff') * 60; 
                                                        if(((int)($devices[$id]->location->timeStamp/1000)+$delay) < time()) {

                                                                $messages = message::byPluginLogicalId('ioscloud', 'stateFailed' . $device->getId());
                                                                if(count($messages) == 0) {
                                                                        message::add('ioscloud', __('Device hors ligne : ', __FILE__) . $device->getHumanName(), '', 'stateFailed$
                                                                }
                                                                $device->checkAndUpdateCmd('state', 0);
                                                        } else { 
                                                                $device->checkAndUpdateCmd('state', 1);
                                                                foreach (message::byPluginLogicalId('ioscloud', 'stateFailed' . $device->getId()) as $message) {
                                                                        $message->remove();
                                                                }                                                               
                                                        }
                                                        $device->refreshWidget();
                                                } else {
                                                        foreach (message::byPluginLogicalId('ioscloud', 'stateFailed' . $device->getId()) as $message) {
                                                                $message->remove();
                                                        }                                                               
                                                        $device->checkAndUpdateCmd('state', 1);
                                                        $device->refreshWidget();
                                                }
                                                if($devices[$id]->location) {
                                                        log::add('ioscloud','debug', ' --- horizontalAccuracy --- ' . $devices[$id]->location->horizontalAccuracy);
                                                        log::add('ioscloud','debug', ' --- locationFinished --- ' . $devices[$id]->location->locationFinished);
                                                        if($devices[$id]->location->locationFinished != 1 &&  $c->getNextRunDate()->format('H:i') != date('H:i',strtotime("+1 min$
                                                                log::add('ioscloud','debug', ' --- getNextRunDate --- ' . $c->getNextRunDate()->format('H:i')); 
                                                                log::add('ioscloud','debug', ' --- timestamp --- ' . date('H:i',strtotime("+1 minutes")));
                                                                $cron = cron::byClassAndFunction('ioscloud', 'updateLocation', array('cloud_id' => intval($eq->getId())));
                                                                if (!is_object($cron)) {
                                                                        $cron = new cron();
                                                                        $cron->setClass('ioscloud');
                                                                        $cron->setFunction('updateLocation');
                                                                        $cron->setOption(array('cloud_id' => intval($eq->getId())));
                                                                }
                                                                $cron->setEnable(1);
                                                                $cron->setOnce(1);
                                                                $cron->setSchedule(date('i',strtotime("+1 minutes")).' '. date('H',strtotime("+1 minutes")).' * * *');
                                                                $cron->save();
                                                                log::add('ioscloud','debug', ' --- Cron --- ' . date('i',strtotime("+1 minutes")).' '. date('H',strtotime("+1 min$
                                                                continue;
                                                        }
                                                        
                                                        if ($device->getConfiguration('horizontalAccuracy') != "" && $devices[$id]->location->horizontalAccuracy >= $device->getC$
                                                                log::add('ioscloud','debug', ' --- hot horizontalAccuracy --- ');
                                                                log::add('ioscloud','debug', ' --- location: ' . $latitude = $devices[$id]->location->latitude . ',' . $latitude $
                                                                continue;
                                                        }
                                                        log::add('ioscloud','debug', ' --- location: ' . $latitude = $devices[$id]->location->latitude . ',' . $latitude = $devic$
                                                        if($devices[$id]->deviceStatus != "203") {
                                                                $battery = $devices[$id]->batteryLevel * 100;
                                                                $changed = false;
                                                                $changed =  $device->checkAndUpdateCmd('battery', round($battery)) || $changed;
                                                                if ($changed) {
                                                                        log::add('ioscloud','debug', 'Update Battery ' . round($battery) );
                                                                        $device->setConfiguration('battery',round($battery));
                                                                        $device->save();
                                                                        $device->batteryStatus(round($battery));
                                                                }       
                                                        }
                                                                                        
                                                        $latitude = $devices[$id]->location->latitude;
                                                        $longitude = $devices[$id]->location->longitude;
                                                        if($latitude == '' || $longitude == '') {
                                                                log::add('ioscloud','debug', 'Localisation impossible pour ' . $device->getName());
                                                                $device->refreshWidget();
                                                                continue;
                                                        }
                                                        $location = $latitude .','.$longitude;                            
                                                        $changed = false;                                 
                                                        $changed = $device->checkAndUpdateCmd('location', $location);
                                                        $changed = $device->checkAndUpdateCmd('timestamp',$devices[$id]->location->timeStamp) || $changed;
                                                        if ($changed) {
                                                                log::add('ioscloud','debug', 'Update location timestamp ' . $device->getName() . ' : ' . $devices[$id]->location-$
                                                                log::add('ioscloud','debug', 'location ' . $device->getName() . ' update : ' .$location );
                                                                log::add('ioscloud','debug', '---------------------------------------------');
                                                                if($device->getConfiguration("cmdLocal") != "") {
                                                                        $cmd_id = str_replace('#', '', $device->getConfiguration("cmdLocal"));
                                                                        $cmd = cmd::byId($cmd_id);
                                                                        if (is_object($cmd)) {
                                                                                 $cmd->event($location);
                                                                        }
                                                                } 
                                                                $geofences = ioscloud::byTypeAndSearchConfiguration( 'ioscloud', 'geofence_dist');
                                                                foreach ($geofences as $geofence) {
                                                                   if($geofence->getConfiguration('geofence:' . $device->getId()) == 1) {
                                                                           log::add('ioscloud','debug', 'location device : ' . $location );
                                                                           $geofence->updateGeofenceValues($geofence->getId(), $location);
                                                                   }
                                                                }
                                                                $device->refreshWidget();
                                                                log::add('ioscloud','debug', '---------------------------------------------');                                   $
                                                        }                                                         
                                                }
                                        }
                                }
                        }                         
                }       
        }

3 « J'aime »

Avec ça mon objet distance se remet à jour
Capture d’écran 2022-05-06 à 16.06.43

1 « J'aime »

Mille mercis ! Vous me sauvez la vie tellement ce plugin est central dans mon installation. Je confirme que votre solution corrige bien le problème.

Tant mieux!

Bonjour
vous pouvez me dire comment faire pour modifier le fichier svp ?

merci

salut

c’est bon j’ai trouvé et ça fonctionne :slight_smile:

merci

Merci bcp pour ce commentaire ultra précis. Ca fonctionne !

Ce sujet a été automatiquement fermé après 24 heures suivant le dernier commentaire. Aucune réponse n’est permise dorénavant.