Simulation de présence - Fonction Random
#11
Pas réussi à l'agrandir suffisamment dans le premier message. Voilà ce que je parviens à faire de plus grand. Pas sûr que ça suffise... I hope so..

[ATTACH=CONFIG]400[/ATTACH]
[ATTACH=CONFIG]401[/ATTACH]


Pièces jointes Image(s)
       
Répondre
#12
Les amis vous cherchez inutilement la complication...

La fonction "MOD" (c'est-à-dire "Modulo" ou en français "Reste de la division") existe déjà: c'est l'item "%" ...
quelque chose du genre suffit (cliquer sur l'image pour l'agrandir):
[ATTACH=CONFIG]402[/ATTACH]
Vous obtenez ainsi un nombre N entre 1 et 2^31-2, soit 2147483646.
Pour ramener N dans une gamme de 0 à 100 par ex, vous faites un truc comme
A = 100*(N-1)/2147483645
(éventuellement vous pouvez l'arrondir tout dépend de ce que vous cherchez à faire) ...

Mais comme je l'ai dit c'est encore plus facile avec du javascript ...

Vous créez un équipement (dans n'importe quel connecteur qui accepte du JS), avec :
- un retour d'état X (double)
- une commande JS que vous appelez Aleatoire (par ex.) et qui contient comme seul et unique code:
Code PHP :
Math.random(); 

Vous pouvez ensuite appeler la commande "Aleatoire" de l'équipement depuis n'importe quel automate et lire le résultat dans son état "X" ...

Si vous voulez vraiment faire une commande plus pratique encore en JS avec un min et un max (en entiers) vous mettez dans la commande "Aleatoire" un code du genre:

Code PHP :
min parseInt('{valeurMin}')|0;    // la commande accepte en paramètres une "valeurMin" et une "valeurMax". Attention, dans les automates ca doit être des "chaines" ...
max parseInt('{valeurMax}')|0;    // la fonction parseInt transforme la chaine en nombre entier. 
// Le "|0" sert juste à dire que si la conversion chaine->nombre a échoué, alors on utilise 0 (ca évite bien des soucis à la sauvegarde du JS)

=  Math.floor(Math.random() * (max min 1)) + min

Références:
http://stackoverflow.com/questions/15278...ific-range

Attention à bien laisser le temps à la commande JS de s'exécuter (ca va très vite normalement mais tout dépend de la charge de la LD) ... soit vous attendez x msec entre la commande et l'utilisation de l'état X (bof), soit vous synchronisez l'automate avec le JS (bien mieux): par ex. vous "attendez" que le JS renvoie dans un X une valeur différente de celle qui était connue juste avant d'appeler la commande "Aleatoire":

- VAR ancienX = monEquipementJS->Etat "X"
- ACTION monEquipementJS->Aleatoire
- WAIT Jusqu'à ce que: monEquipementJS->Etat "X" <> ancienX
- (utiliser la nouvelle valeur de monEquipementJS->Etat "X")


Pièces jointes Image(s)
   
www.osmotiq.com, domotique, développement logiciel et web -- tests & tutoriels KNX, Lifedomus, ZWave, etc.
Twitter: osmotiq
Répondre
#13
oui c'est plus simple avec le % :D
Merci!
Répondre
#14
Et doublement merci car grace à toi j'ai pu connaitre les celiane KNX :) que j'ai rapidement installé!
Répondre
#15
Je me posais une question. Est ce que si on execute un automate B au cours de l'automate A, est ce que B est lancé "en parallèle de A" ou est ce qu'on attend que B soit terminé?
J'ai l'impression que l'automate B est lancé et que l'automate A suit son cours.
Je voulais faire un automate B qui utilise des variables pour faire un Wait ( Random (min,max) ), un peu comme une procédure ou une fonction avec des variables globales.

PS: j'ai pas la fonction de script dans ma version de LD. J'imagine que ça vient avec un connecteur http ou ...?
Répondre
#16
fredblabla a écrit :Je me posais une question. Est ce que si on execute un automate B au cours de l'automate A, est ce que B est lancé "en parallèle de A" ou est ce qu'on attend que B soit terminé?
J'ai l'impression que l'automate B est lancé et que l'automate A suit son cours.
Je voulais faire un automate B qui utilise des variables pour faire un Wait ( Random (min,max) ), un peu comme une procédure ou une fonction avec des variables globales.

PS: j'ai pas la fonction de script dans ma version de LD. J'imagine que ça vient avec un connecteur http ou ...?

comme tu dis, les deux s'exécutent en parallèle, ils sont asynchrones. Si tu veux les synchroniser, il faut en effet utiliser un WAIT qui attend en déclenchement une certaine valeur, autorisant ainsi le premier automate à continuer.

Automate A:
- bFini = false
- lancer automate B
- WAIT jusqu'à ce que bFini=true
- autres instructions de automate A etc

automate B:
- (fait un tas de trucs)
- bFini = true

attention qu'il est impossible d'avoir deux fois le même automate qui tourne en même temps, donc dans le cas de ton automate qui ferait l'équivalent d'une fonction random(min,Max) il faut être sur qu'aucun autre automate ne va l'appeler alors qu'il est en cours d'exécution car les seules options qu'on a concernant le démarrage d'un automate c'est :
- mode normal (on ignore une exécution alors qu'on est déjà en cours)
- mode recommencer (on abandonne l'exécution en cours et on recommence l'exécution à zéro)
www.osmotiq.com, domotique, développement logiciel et web -- tests & tutoriels KNX, Lifedomus, ZWave, etc.
Twitter: osmotiq
Répondre
#17
fredblabla a écrit :PS: j'ai pas la fonction de script dans ma version de LD. J'imagine que ça vient avec un connecteur http ou ...?


Les scripts JS sont disponibles avec les équipements universels lorsqu'ils sont associés à un connecteur http, tcp, rs232 (y en a surement d'autres j'ai pas encore eu l'occasion de tout essayer) ...
www.osmotiq.com, domotique, développement logiciel et web -- tests & tutoriels KNX, Lifedomus, ZWave, etc.
Twitter: osmotiq
Répondre
#18
Merci :)
J'ai fais un joli automate, qui à l'air de fonctionner, je l'ai testée avec des secondes plutôt que des minutes mais j'ai un point d'exclamation sur le bouton qui permet de copier l'automate sur l'écran qui affiche tous les automates.
Et rien d'autre.
Répondre
#19
Bonjour,
cette problématique est elle toujours d'actualité ? en gros est ce que l'équipe a pondu cela sous forme d'une variable système ou autre ?
C'est pourtant la base.
C'est un peu comme la gestion du chauffage qui est un vrai casse tête pour gérer les dérogations manuelles par rapport au planning pré établi
Répondre
#20
PITP2 a écrit :Bonjour,
cette problématique est elle toujours d'actualité ? en gros est ce que l'équipe a pondu cela sous forme d'une variable système ou autre ?
C'est pourtant la base.
C'est un peu comme la gestion du chauffage qui est un vrai casse tête pour gérer les dérogations manuelles par rapport au planning pré établi
Bonjour,
à ma connaissance il n'existe pas de variable système proposant une valeur aléatoire, mais ce serait une bonne idée.
En attendant la solution proposée par Tilleul est bonne, et je suis finalement parvenu à la mettre en oeuvre (je coinçais sur une bêtise : Le truc est "case sensitive". Il faut respecter la casse entre la variable utilisée dans le JS et le retour d'état paramétré dans le CS).
Concernant la gestion du chauffage je crois comprendre ce que tu veux dire (?). Je me suis codé une petite usine pour gérer finement le basculement de mes thermostats (mode jour, mode veille, mode nuit...)
@+
Thierry
Répondre


Sujets apparemment similaires...
Sujet Auteur Réponses Affichages Dernier message
  Simulation de presence cybergui 4 6,964 03-30-2020, 10:01 AM
Dernier message: AucuneID
  Allumer une lampe de balisage en fonction de l'heure au lieu de la lampe du plafond com@home 19 22,540 12-19-2016, 10:58 PM
Dernier message: com@home
  Allumer une lampe de balisage en fonction de l'heure au lieu de la lampe du plafond com@home 15 17,648 08-27-2015, 09:24 AM
Dernier message: Domo
  Impossible de renommer une fonction AucuneID 3 5,744 01-14-2015, 07:13 PM
Dernier message: tilleul
  Démarrage automate en fonction d'une variable ngm47 4 7,319 06-02-2014, 01:50 PM
Dernier message: ngm47
  Lumière lors d'une présence extérieure [RESOLU] yanaka 4 7,426 01-08-2014, 03:28 PM
Dernier message: Olivier
  Erreur sur ma fonction WeekEnd ? AucuneID 4 6,370 12-31-2013, 06:16 PM
Dernier message: AucuneID
  Demande de fonction: reveil et retours de variables via appli smartphone/tablette! AucuneID 2 4,536 12-03-2013, 12:36 PM
Dernier message: Julien
  Fonction prenant des paramètres en entrée/sortie ? bizniouf 11 17,182 09-22-2013, 12:40 AM
Dernier message: bizniouf



Utilisateur(s) parcourant ce sujet : 1 visiteur(s)