Page 2 sur 4

Re: Heure de la dernière communication.

Publié : 10 janv. 2018, 08:42
par BizZ62
Hello,

Pourriez-vous poster un exemple de scénario SVP ? Du coup on a quoi en déclencheur ? Une vérification tous les X minutes ? Merci !!!

Re: Heure de la dernière communication.

Publié : 10 janv. 2018, 09:59
par tomdom
Bonjour,

En ce qui me concerne, c'est mon virtuel qui à un cron et c'est mon virtuel qui sert de déclencheur.

Re: Heure de la dernière communication.

Publié : 11 janv. 2018, 07:50
par fwehrle
Je serais curieux d'avoir plus de détail sur le problème qu'il peut y avoir à utiliser des virtuels pour stocker des valeurs réelles. J'en ai quelques uns, pour les mêmes raisons historiques, et je n'ai pas de problème.

Envoyé de mon Nexus 6P en utilisant Tapatalk


Re: Heure de la dernière communication.

Publié : 16 janv. 2018, 11:43
par BizZ62
Bon ça fonctionne chez moi :)

Petite question... Est-ce que cela pose un problème si on actualise la vérification toutes les minutes ? Ca charge pas trop la bête du côté du Cron ?

Re: Heure de la dernière communication.

Publié : 18 janv. 2018, 14:38
par BizZ62
Merci à tous pour ces éléments qui m'ont bien aidé à compléter mes virtuels de gestion de chauffage en y ajoutant le retour de communication des sondes ainsi que des alertes en cas de défaillance via un widget et des notifications ! ;)

Image

Re: Heure de la dernière communication.

Publié : 10 oct. 2018, 13:26
par benj29
A tout hasard, même si cela n'est pas trop en lien, mais je suis retombé sur ce fil car je cherchais des infos sur des calculs liés au temps.

je cherche à calculer le delta de chauffe depuis 2 entrées de type "string".

On part de ça (au format string) :

Image

Et j'ai fait un bête scénario de code php (désolé, totalement débutant là dessus). j'ai rien dans les logs malgré "log".

Image

(que je passe sur une variable de même nom TempsChauffe).

Code : Tout sélectionner

$cmdfin = cmd::strtotime('#[Eau Chaude][Chauffe Eau][Date de fin]#');
$valeurfin = $cmdfin->execCmd();

$cmddebut = cmd::strtotime('#[Eau Chaude][Chauffe Eau][Date de début]#');
$valeurdbt = $cmddebut->execCmd();

$scenario->setLog($valeurdbt);
$scenario->setLog($valeurfin);

$delta = time_diff($valeurfin,$valeurdbt,m)
$scenario->setLog($delta);

$scenario->setData("TempsChauffe",$delta);

Re: Heure de la dernière communication.

Publié : 12 oct. 2018, 09:35
par Sartog
Bonjour benj29,

Il te manque le ; à la fin de $delta = time_diff($valeurfin,$valeurdbt,m)
C'est une erreur bloquante, ça explique pourquoi tu n'as rien dans ton log.

De plus, il me semble que strtotime travail avec des dates au format US et non FR.

Je dois aller en réunion, j'essaierais d'approfondir ça cet am si j'ai le temps.

Re: Heure de la dernière communication.

Publié : 14 oct. 2018, 11:53
par benj29
Hurmf, Sartog...
J'ai beau avoir mis le ; ... toujours erreur en orange et rien dans le log.

Code : Tout sélectionner

$cmdfin = cmd::strtotime('#[Eau Chaude][Chauffe Eau][Date de fin]#');
$valeurfin = $cmdfin->execCmd();

$cmddebut = cmd::strtotime('#[Eau Chaude][Chauffe Eau][Date de début]#');
$valeurdbt = $cmddebut->execCmd();

$scenario->setLog($valeurdbt);
$scenario->setLog($valeurfin);

$delta = time_diff($valeurfin,$valeurdbt,m);
$scenario->setLog($delta);

$scenario->setData("TempsChauffe",$delta);

Re: Heure de la dernière communication.

Publié : 14 oct. 2018, 14:20
par tomdom
Bonjour,

Tu essaies de faire quoi là ?

Code : Tout sélectionner

$cmdfin = cmd::strtotime('#[Eau Chaude][Chauffe Eau][Date de fin]#');
$valeurfin = $cmdfin->execCmd();

$cmddebut = cmd::strtotime('#[Eau Chaude][Chauffe Eau][Date de début]#');
$valeurdbt = $cmddebut->execCmd();


Re: Heure de la dernière communication.

Publié : 14 oct. 2018, 14:22
par benj29
Calculer l'écart en min de deux infos du type string, voir copie d'écran plus haut.

Envoyé de mon Moto G (5S) Plus en utilisant Tapatalk


Re: Heure de la dernière communication.

Publié : 14 oct. 2018, 14:49
par tomdom
Bonjour,

Sauf que je ne vois pas comment

Code : Tout sélectionner

cmd::strtotime
te retourne une commande valide sur laquelle tu puisses faire

Code : Tout sélectionner

$cmdfin->execCmd()
Il n'y a pas (à ma connaissance) de méthode strtotime dans la classe cmd

Re: Heure de la dernière communication.

Publié : 14 oct. 2018, 14:53
par tomdom
Pas tester mais

Code : Tout sélectionner

$cmdfin=cmd::humanReadableToCmd("#tacommande#");
$fin=$cmdfin->getCollectDate();
devrait être une piste plus fonctionnelle.

Re: Heure de la dernière communication.

Publié : 14 oct. 2018, 20:07
par benj29
Hello,

J'ai tenté plusieurs pistes sans succès.

Ce code là part en "en cours" mais vraiment beaucoup de temps pour s'arrêter en erreur.

Code : Tout sélectionner

$cmdfin=cmd::humanReadableToCmd("#[Eau Chaude][Chauffe Eau][Date de fin]#");
$fin=$cmdfin->getCollectDate();

$cmddeb=cmd::humanReadableToCmd("#[Eau Chaude][Chauffe Eau][Date de début]#");
$dbt=$cmddbt->getCollectDate();

$scenario->setLog($fin-$dbt);
$scenario->setData("TempsChauffe",$fin-$dbt);
Celui là aussi part en erreur...

Code : Tout sélectionner

$cmdfin=cmd::humanReadableToCmd("#[Eau Chaude][Chauffe Eau][Date de fin]#");
$fin=$cmdfin->getCollectDate();

$cmddeb=cmd::humanReadableToCmd("#[Eau Chaude][Chauffe Eau][Date de début]#");
$dbt=$cmddbt->getCollectDate();

$scenario->setLog($dbt);
$scenario->setLog($fin);

$delta = time_diff($fin,$dbt,m);
$scenario->setLog($delta);

$scenario->setData("TempsChauffe",$delta);
Idem en erreur.

je trouve ces erreurs ?
Je trouve rien dans log scenario ou scenario_exec ...

Re: Heure de la dernière communication.

Publié : 14 oct. 2018, 20:12
par tomdom
Bonjour,

Déjà il y a une erreur là

Code : Tout sélectionner

$cmddeb=cmd::humanReadableToCmd("#[Eau Chaude][Chauffe Eau][Date de début]#");
$dbt=$cmddbt->getCollectDate();

$cmddeb versus $cmddbt

Re: Heure de la dernière communication.

Publié : 14 oct. 2018, 20:47
par benj29
Euh c'est dimanche soir... joker !
Je suis vraiment bête là... lol.

Bon même corrigé :

Code : Tout sélectionner

$cmdfin=cmd::humanReadableToCmd("#[Eau Chaude][Chauffe Eau][Date de fin]#");
$fin=$cmdfin->getCollectDate();

$cmddeb=cmd::humanReadableToCmd("#[Eau Chaude][Chauffe Eau][Date de début]#");
$dbt=$cmddeb->getCollectDate();

$scenario->setLog($dbt);
$scenario->setLog($fin);

$delta = time_diff($fin,$dbt,m);
$scenario->setLog($delta);
$scenario->setData("TempsChauffe",$delta);
Erreur.

Le même scénario mais sans la fonction de time_diff ...

Code : Tout sélectionner

$cmdfin=cmd::humanReadableToCmd("#[Eau Chaude][Chauffe Eau][Date de fin]#");
$fin=$cmdfin->getCollectDate();

$cmddeb=cmd::humanReadableToCmd("#[Eau Chaude][Chauffe Eau][Date de début]#");
$dbt=$cmddeb->getCollectDate();

$scenario->setLog($dbt);
$scenario->setLog($fin);

$scenario->setLog($fin-$dbt);

$scenario->setData("TempsChauffe",$fin-$dbt);
Idem, erreur !

Re: Heure de la dernière communication.

Publié : 15 oct. 2018, 12:01
par Sartog

Code : Tout sélectionner

$valeurfin = '11/10/2018 05:30';
$valeurdbt = '11/10/2018 05:22';

$scenario->setLog($valeurdbt);
$scenario->setLog(strtotime($valeurdbt));
$scenario->setLog($valeurfin);
$scenario->setLog(strtotime($valeurfin));

$delta = strtotime($valeurfin) - strtotime($valeurdbt);
$scenario->setLog($delta);
Ce code fonctionne.

Pour l'adapter a ton besoin, il suffit de le modifier pour récupérer les valeurs de tes commandes :

Code : Tout sélectionner

$valeurfin = cmd::byString("#[Eau Chaude][Chauffe Eau][Date de fin]#")->execCmd();
$valeurdbt = cmd::byString("#[Eau Chaude][Chauffe Eau][Date de début]#")->execCmd();

$scenario->setLog($valeurdbt);
$scenario->setLog(strtotime($valeurdbt));
$scenario->setLog($valeurfin);
$scenario->setLog(strtotime($valeurfin));

$delta = strtotime($valeurfin) - strtotime($valeurdbt);
$scenario->setLog($delta);
Ainsi tu aura le nombre de seconde écoulée entre les 2 dates.
Si tu veux des minutes, pas besoin de te faire un dessin :P

P.S.: Tous les setLog ne sont là que pour débuger
Version light (à tester):

Code : Tout sélectionner

$valeurfin = strtotime(cmd::byString("#[Eau Chaude][Chauffe Eau][Date de fin]#")->execCmd());
$valeurdbt = strtotime(cmd::byString("#[Eau Chaude][Chauffe Eau][Date de début]#")->execCmd());

$delta = $valeurfin - $valeurdbt;

Re: Heure de la dernière communication.

Publié : 15 oct. 2018, 12:24
par benj29
Hurmf, tu es sûr de ton coup ?
J'ai testé plein de trucs mais visiblement, je n'arrive pas à convertir au format

Code : Tout sélectionner

$valeurfin = cmd::byString("#[Eau Chaude][Chauffe Eau][Date de fin]#")->execCmd();
$valeurdbt = cmd::byString("#[Eau Chaude][Chauffe Eau][Date début]#")->execCmd();
$scenario->setLog($valeurfin);
$scenario->setLog($valeurdbt);
$delta = strtotime($valeurfin) - strtotime($valeurdbt);
$scenario->setLog(strtotime($valeurfin));
$scenario->setLog(strtotime($valeurdbt));
$scenario->setData("TempsChauffe",$delta/60);
On voit que la récupération de la commande marche, mais pas la conversion...

Image

En tout cas merci de ton aide.

EDIT : j'ai tenté strftime et là j'ai déjà du mieux, y a bien la conversion en time.
Par contre la différence ne marche pas... (0).

Code : Tout sélectionner

// pensez à changer la variable en variable,0 pour garder la valeur précédente !

$valeurfin = cmd::byString("#[Eau Chaude][Chauffe Eau][Date de fin]#")->execCmd();
$valeurdbt = cmd::byString("#[Eau Chaude][Chauffe Eau][Date début]#")->execCmd();
//$scenario->setLog($valeurfin);
//$scenario->setLog($valeurdbt);
$delta = strftime($valeurfin) - strftime($valeurdbt);
//$scenario->setLog(strftime($valeurfin));
//$scenario->setLog(strftime($valeurdbt));
$scenario->setLog($delta);
$scenario->setData("TempsChauffe",$delta/60);
Image

Re: Heure de la dernière communication.

Publié : 15 oct. 2018, 12:35
par Sartog
Mon test fonctionne, oui :

Code : Tout sélectionner

$valeurfin = '11/10/2018 05:30';
$valeurdbt = '11/10/2018 05:22';

$scenario->setLog($valeurdbt);
$scenario->setLog(strtotime($valeurdbt));
$scenario->setLog($valeurfin);
$scenario->setLog(strtotime($valeurfin));

$delta = strtotime($valeurfin) - strtotime($valeurdbt);
$scenario->setLog($delta);

Code : Tout sélectionner

[2018-10-15 11:55:30][SCENARIO] Start : Scenario lance manuellement.
[2018-10-15 11:55:30][SCENARIO] Exécution du sous-élément de type [action] : code
[2018-10-15 11:55:30][SCENARIO] Exécution d'un bloc code
[2018-10-15 11:55:30][SCENARIO] 11/10/2018 05:22
[2018-10-15 11:55:30][SCENARIO] 1541823720
[2018-10-15 11:55:30][SCENARIO] 11/10/2018 05:30
[2018-10-15 11:55:30][SCENARIO] 1541824200
[2018-10-15 11:55:30][SCENARIO] 480
[2018-10-15 11:55:30][SCENARIO] Fin correcte du scénario

Je n'explique pas ton problème de différence ...
Je vais essayer de créer un virtuel et de passer par la récupération des valeurs pour être au plus prêt de ton cas et voir si c'est ça qui pose problème ... mais là, le resto chinois m'appel :D

Re: Heure de la dernière communication.

Publié : 15 oct. 2018, 12:40
par benj29
Bon app !

Envoyé de mon Moto G (5S) Plus en utilisant Tapatalk


Re: Heure de la dernière communication.

Publié : 15 oct. 2018, 15:43
par Sartog
Merci :D

Bon, je ne comprends pas ton problème car moi ça fonctionne :

Code : Tout sélectionner

$scenario->setLog("------ Test avec dates inscrites dans le code ------");
$scenario->setLog("");
$valeurfin = '11/10/2018 05:30';
$valeurdbt = '11/10/2018 05:22';

$scenario->setLog("valeurdbt : ".$valeurdbt);
$scenario->setLog("strtotime : ".strtotime($valeurdbt));
$scenario->setLog("valeurfin : ".$valeurfin);
$scenario->setLog("strtotime :".strtotime($valeurfin));

$delta = strtotime($valeurfin) - strtotime($valeurdbt);
$scenario->setLog("delta : ".$delta);

$scenario->setLog("");
$scenario->setLog("------ Fin du 1er test ------");
$scenario->setLog("");
$scenario->setLog("");
$scenario->setLog("------ Test avec dates récupérés dans un virtuel ------");
$scenario->setLog("");
$valeurfin = cmd::byString("#[Maison][Test][Date fin]#")->execCmd();
$valeurdbt = cmd::byString("#[Maison][Test][Date début]#")->execCmd();

$scenario->setLog("valeurdbt : ".$valeurdbt);
$scenario->setLog("strtotime : ".strtotime($valeurdbt));
$scenario->setLog("valeurfin : ".$valeurfin);
$scenario->setLog("strtotime : ".strtotime($valeurfin));

$delta = strtotime($valeurfin) - strtotime($valeurdbt);
$scenario->setLog("delta : ".$delta);

$scenario->setLog("");
$scenario->setLog("------ Fin du 2nd test ------");
Me donne :

Code : Tout sélectionner

[2018-10-15 15:36:22][SCENARIO] Start : Scenario lance manuellement.
[2018-10-15 15:36:22][SCENARIO] Exécution du sous-élément de type [action] : code
[2018-10-15 15:36:22][SCENARIO] Exécution d'un bloc code
[2018-10-15 15:36:22][SCENARIO] ------ Test avec dates inscrites dans le code ------
[2018-10-15 15:36:22][SCENARIO]
[2018-10-15 15:36:22][SCENARIO] valeurdbt : 11/10/2018 05:22
[2018-10-15 15:36:22][SCENARIO] strtotime : 1541823720
[2018-10-15 15:36:22][SCENARIO] valeurfin : 11/10/2018 05:30
[2018-10-15 15:36:22][SCENARIO] strtotime :1541824200
[2018-10-15 15:36:22][SCENARIO] delta : 480
[2018-10-15 15:36:22][SCENARIO]
[2018-10-15 15:36:22][SCENARIO] ------ Fin du 1er test ------
[2018-10-15 15:36:22][SCENARIO]
[2018-10-15 15:36:22][SCENARIO]
[2018-10-15 15:36:22][SCENARIO] ------ Test avec dates récupérés dans un virtuel ------
[2018-10-15 15:36:22][SCENARIO]
[2018-10-15 15:36:22][SCENARIO] valeurdbt : 11/10/2018 05:22
[2018-10-15 15:36:22][SCENARIO] strtotime : 1541823720
[2018-10-15 15:36:22][SCENARIO] valeurfin : 11/10/2018 05:30
[2018-10-15 15:36:22][SCENARIO] strtotime : 1541824200
[2018-10-15 15:36:22][SCENARIO] delta : 480
[2018-10-15 15:36:22][SCENARIO]
[2018-10-15 15:36:22][SCENARIO] ------ Fin du 2nd test ------
[2018-10-15 15:36:22][SCENARIO] Fin correcte du scénario
Et le virtuel :
Capture.JPG
Capture.JPG (11.17 Kio) Consulté 388 fois
Comment sont alimentées tes infos date de début et date de fin ?