Méthode cron()

Bonjour @Loic

Mon plugin touche à sa fin.
J’ai une dernière question au sujet de ma méthode cron().

Voici la méthode : (qui me sert de test)

public static function cron() {
	foreach (self::byType('verisure') as $verisure) {
		if ($this->getIsEnable() == 1) {
			log::add('verisure', 'info', 'Id : '.$verisure->getId().' - Name : '.$verisure->getName());
		}	
    }
}

Et à chaque fois j’obtiens dans mes logs :

[2020-04-13 09:22:06][INFO] : Id : 12 - Name : Alarme Verisure
[2020-04-13 09:22:06][INFO] : Id : 12 - Name : Alarme Verisure

D’où ma question : pourquoi le log est affiché 2 fois alors que je n’ai qu’un équipement ? (d’ailleurs l’id et le nom sont idem !)

Merci de ton aide,

Xav

Bonjour
Tu es dans une fonction static pas de $this il faut que tu utilises $verisure (ta variable de boucle)

Ca peut aussi être simplifié avec le 2ème paramètre de byType pour filtrer les enables:

foreach (eqLogic::byType(__CLASS__, true) as $verisure) {
  log::add(__CLASS__, 'info', 'Id : '.$verisure->getId().' - Name : '.$verisure->getName());
}
1 « J'aime »

Hello,

Tu devrais faire ton inscription en tant que dev et poser cette question dans la section dev sans tag Loic pour le coup;
Il répond mais c’est juste pas logique de tag Loic pour la moindre question (basique en l’occurrence) alors que d’autres personnes peuvent aider, ce n’est pas vivable à grande échelle :wink:

L’erreur était probablement décrite dans le log http.error également.

1 « J'aime »

Merci pour vos retours !
@Mips : je ne savais pas que la section apparaissait avec l’inscription. Du coup, je vais m’inscrire de suite :slight_smile:

pour en revenir au sujet, j’ai bien

if ($verisure->getIsEnable() == 1)

et pas :

if ($this->getIsEnable() == 1)

Mauvais copié collé de ma part sur le forum.
Le pb reste le même (idem avec la simplification de jpty), il me fait 2 passage alors qu’il ne devrait y en avoir qu’un.

Xav

Quel est le résultat de:

SELECT * FROM `eqLogic` WHERE `eqType_name` = 'verisure'

?

Je n’ai bien qu’un seul équipement :

12	Alarme Verisure	null		1	verisure	{"createtime":"2020-04-12...

Je me posais la question d’avoir créé 2 crons par erreur ? A force de faire des tests ?

Avec une fonction nommée cron, il est inutile de créer une entrée dans le moteur des taches. :thinking:

Je parlais de mon fichier ‹ install.php › ou j’ai :

$cron = cron::byClassAndFunction('verisure', 'cron');
   if (!is_object($cron))	{
   		$cron = new cron();
   		$cron->setClass('verisure');
   		$cron->setFunction('cron');
   		$cron->setEnable(1);
   		$cron->setDeamon(0);
   		$cron->setSchedule('* * * * * *');
   		$cron->save();
   }

Je me disais que peut-être, à force de faire des modfis et tests, l’erreur pouvait venir de là.

Quand il existe dans la classe, une fonction cron, cron5, cron10, cron15, cron30, cronHourly, cronDaily… elles sont appelées automatiquement.
Inutile de mettre du code dans install.php pour créer une entrée dans le moteur des taches.

1 « J'aime »

ok merci pour cette info
je vais corriger du coup et voir si cela peut venir de là.

Merci pour ton aide

Pour tester il suffit d’aller dans le moteur des taches,

  • supprimer/désactiver la tache avec Classe verisure et Fonction cron
  • Enregistrer la modif du moteur des taches
  • attendre le passage du cron.

Puis ensuite supprimer le code dans install.php

:+1: :+1:
C’était bien cela : il y avait le cron ‹ plugin › et le cron ‹ verisure ›
D’où le double passage !

Merci infiniment pour ton aide

Xav

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