Page 3 sur 4

Re: Heure de la dernière communication.

Publié : 15 oct. 2018, 21:25
par benj29
Via le plugin de Chauffe-Eau de mika... je commence à me poser des questions sur le type de sortie, mais c'est bien string.

Image

J'ai tenté aussi

Code : Tout sélectionner

$delta = strftime($valeurfin-$valeurdbt);
0 aussi...

Re: Heure de la dernière communication.

Publié : 15 oct. 2018, 21:36
par benj29
Bon, je vois plus...
j'ai tenté ajouter les secondes au cas où etc...
Je sèche totalement !

Image

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);
$scenario->setLog($valeurfin.":00");
$scenario->setLog($valeurdbt.":00");
$delta = strftime($valeurfin.":00") - strftime($valeurdbt.":00");
$scenario->setLog(strftime($valeurfin.":00"));
$scenario->setLog(strftime($valeurdbt.":00"));
$scenario->setLog($delta);
$scenario->setData("TempsChauffe",$delta/60);
J'ai l'impression de demander la lune ! :D

Re: Heure de la dernière communication.

Publié : 15 oct. 2018, 21:42
par f6dmn
Bonsoir, avec le plugin surveillance équipement c est simple à faire non ?

Re: Heure de la dernière communication.

Publié : 15 oct. 2018, 21:50
par benj29
Sachant que c'est du prédictif pour la nuit d'après j'en doute...

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


Re: Heure de la dernière communication.

Publié : 15 oct. 2018, 22:18
par winhex
faut mettre au format date
cmd php gmdate avant ta soustraction

exemple commande jeedom mais code c'est pareil
gmdate("H:i",durationBetween(#[Cuisine][Hotte][Etat]#,0,-#[Cuisine][Filtration][sur]#day0:00,now)*60

ou soit tes dates tu les passes en timestramp
tu auras un résultat en secondes
et une soustraction fonctionnera

mais tu arriveras a la même finalité
convertir le format de sortie (gmdate)
pour une résultat en hh:mm

Re: Heure de la dernière communication.

Publié : 15 oct. 2018, 22:19
par benj29
Euh, je vais prendre un doliprane je reviens :D.

Merci winhex, je regarde demain et te tiens au courant.

Re: Heure de la dernière communication.

Publié : 15 oct. 2018, 22:24
par winhex
un autre exemple
gmdate("Hi",strtotime(#time#) - strtotime(variable(hum_sdb_time))

Re: Heure de la dernière communication.

Publié : 16 oct. 2018, 11:39
par benj29
Bon, visiblement, je commence à me poser des questions sur le format de sortie captée par byString...

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);
$timefin = gmdate("j/m/Y H:i",strtotime($valeurfin));
$timedbt = gmdate("j/m/Y H:i",strtotime($valeurdbt));
$scenario->setLog($timefin);                
$scenario->setLog($timedbt);
Image

La fonction proposée par winhex est encore pire que celle de Sartog... lol !

Re: Heure de la dernière communication.

Publié : 16 oct. 2018, 11:45
par benj29
J'ai tenté via date_create etc.... je ne vois pas !

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);
$timefin = date_create($valeurfin);
$timedbt = date_create($valeurdbt);
$delta = date_diff($timefin, $timedbt);
$scenario->setLog($timefin);                
$scenario->setLog($timedbt);
$scenario->setLog($delta);
$scenario->setData("TempsChauffe",$delta/60);
Image

Re: Heure de la dernière communication.

Publié : 16 oct. 2018, 12:57
par mika-nt28
bonjour

Je n'ai pas lu tous le post mais j'ai vue cmd::strtotime() qui n'existe pas dans la class cmd
strtotime() est un instruction php donc votre code donnerai

Code : Tout sélectionner


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

$cmddebut=cmd::byString("#[Eau Chaude][Chauffe Eau][Date de debut]#");
if(is_object($cmddebut))
	$valeurdbt = strtotime($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é : 16 oct. 2018, 13:23
par benj29
On l'a essayé... il me semble.
J'ai tenté ton code et je n'ai rien du tout dans les logs.

Rien en sortie malgré les appels scénario :

Image

Code : Tout sélectionner

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

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

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

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

$scenario->setData("TempsChauffe",$delta);
Mika au passage, tu as mis dans le plugin Date de fin et Date début (et non Date de début). Je te dis ça car même toi dans le code que tu proposes tu es parti sur "de début".

Re: Heure de la dernière communication.

Publié : 16 oct. 2018, 13:28
par mika-nt28
Oui c'est une faute de frappe dans le plugin je le corrige
En faite dans le script je ne l'ai pas prcisé mais la varriable $scenario n'est pas initialisé
il faut l'initilisé
$scenario=scenario::byId()
https://jeedom.github.io/documentation/ ... nario.html

Re: Heure de la dernière communication.

Publié : 16 oct. 2018, 23:42
par winhex
benj29 a écrit :
16 oct. 2018, 11:39

La fonction proposée par winhex est encore pire que celle de Sartog... lol !
tu m'as piquer au vif

si une opération sur le temps ne fonctionne pas
c'est qu'elle n'est pas comprise par le système

ex :
si 3+2 = rien
c'est que le chiffres ne sont pas numeriques

donc on les créés/convertis

on remplace les / par -
afin de déterminer l'unité date "new DateTime" au format
et ensuite le calcul
[2018-10-16 21:57:09][SCENARIO] Start : Scenario lance manuellement.
[2018-10-16 21:57:09][SCENARIO] Exécution du sous-élément de type [action] : code
[2018-10-16 21:57:09][SCENARIO] Exécution d'un bloc code
[2018-10-16 21:57:09][SCENARIO] la date de debut 2018-10-16 04:53
et la fin 2018-10-16 09:30
soit un temps de fonctionnement de 4 heures et 37 minutes
[2018-10-16 21:57:09][SCENARIO] Fin correcte du scénario

Code : Tout sélectionner

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

$valeurfin = str_replace("/","-",$valeurfin);
$valeurdbt = str_replace("/","-",$valeurdbt);
$valeurfin = new DateTime($valeurfin);
$valeurdbt = new DateTime($valeurdbt);
$valeurfin = $valeurfin->format('Y-m-d H:i');
$valeurdbt = $valeurdbt->format('Y-m-d H:i');
$delta = gmdate("g:i",strtotime($valeurfin) - strtotime($valeurdbt));
$delta = str_replace(":"," heures et ",$delta." minutes");
$scenario->setLog("la date de debut ".$valeurdbt."\n et la fin ".$valeurfin."\n soit un temps de fonctionnement de ".$delta);
$delta brut

Code : Tout sélectionner

$valeurfin = cmd::byString("#[test2][fonctionnement][Date de fin]#")->execCmd();
$valeurdbt = cmd::byString("#[test2][fonctionnement][Date début]#")->execCmd();
$valeurfin = str_replace("/","-",$valeurfin);
$valeurdbt = str_replace("/","-",$valeurdbt);
$scenario->setLog($valeurfin);
$scenario->setLog($valeurdbt);

$valeurfin = new DateTime($valeurfin);
$valeurdbt = new DateTime($valeurdbt);
$valeurfin = $valeurfin->format('Y-m-d H:i');
$valeurdbt = $valeurdbt->format('Y-m-d H:i');
$delta = gmdate("H:i",strtotime($valeurfin) - strtotime($valeurdbt));
$scenario->setLog($delta);
il existe plein de possibilités pour le même resultat
j'avais la logique initial puisque le calcul ne fonctionnait pas

et j'ai pioché sur le net (convertir une date php)
fonction que je n'avais jamais utilisé.

https://stackoverflow.com/questions/216 ... her-in-php

Re: Heure de la dernière communication.

Publié : 24 oct. 2018, 08:10
par benj29
Suis désolé je n'avais pas vu ton message. Le pire n'était pas au sens premier du terme mais dans le sens donner de mauvais résultats.

Merci à toi mais tu as vu que ça tourne maintenant

Envoyé de mon JSN-L21 en utilisant Tapatalk


Re: Heure de la dernière communication.

Publié : 24 oct. 2018, 15:35
par winhex
oui j'ai vu,
t'inquiete pas je ne l'ai pas mal pris
j'ai surtout voulu vérifier si mon intuition etait vrai (du à l'erreur) par defi.
ma petite satisfaction

Re: Heure de la dernière communication.

Publié : 24 oct. 2018, 15:38
par benj29
T'as bien raison. Ne rien lâcher. Toi qui aime le tordu casse pied tu as vu mon topic sur les camemberts qui changent de taille position ?

Envoyé de mon JSN-L21 en utilisant Tapatalk


Re: Heure de la dernière communication.

Publié : 24 oct. 2018, 16:17
par winhex
rapidement je t'y retrouve

Re: Heure de la dernière communication.

Publié : 05 août 2019, 15:42
par mich0111
Bonjour,
Pourriez-vous me dire ce qu'il y a de faux dans cette formule:

Code : Tout sélectionner

#time# > 0230 et (#timestamp# - strtotime(variable(Time_detect)) >= 43200)
Sachant que dans la variable "Time_detect" il y a 0230.
Mon but est de contrôler qu'il est plus de 2h30 et qu'il y a plus de 12h que j'ai détecté un mouvement.
La partie "strtotime(variable(Time_detect))" me rend une valeur vide, donc probablement en erreur.
Je tourne en rond depuis 1/2 heure.
Merci de votre aide.

Re: Heure de la dernière communication.

Publié : 05 août 2019, 18:19
par tomdom
Bonjour,

Si dans Time_detect, tu mets des minutes ça sera plus simple :

Code : Tout sélectionner

#timestamp# - strtotime(now - variable(Time_detect) minute) >= 43200

Re: Heure de la dernière communication.

Publié : 05 août 2019, 22:05
par mich0111
Merci pour ton retour.

Il me semblait que 0230 signifiait 2h30 donc converti en minutes cela doit faire 150.

Du coup, j'ai adapté ta formule pour en faire:

Code : Tout sélectionner

Temp = Round((variable(Time_detect)/100)-1)*60 + variable(Time_detect) - Round((variable(Time_detect)/100)-1)*100
SI #time# > 0230 et (#timestamp# - strtotime(today - variable(Temp) minute)) >= 43200
C'est mieux en termes de cohérence mais ça ne marche pas non plus. Le résultat est autour des 9000, donc sort en False alors que j'effectue le test à 22h00 soit près de 20h après les 2h30
Si c'est des secondes, cela ne ferait que 2h30, si c'est des minutes cela ferait 150h.

Quelque chose doit m'échaper.

Autre point, je trouve bizarre que la fonction round rend systématiquement la valeur supérieure. De mémoire, elle devrait rendre l'entier le plus proche.
Y-a-t-il une spécificité à Jeedom?

Merci de votre aide.