IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBScript Discussion :

Domotique Exécution d'une commande dès que sonde < Température de consigne


Sujet :

VBScript

  1. #1
    Candidat au Club
    Homme Profil pro
    Gestionnaire Domotique
    Inscrit en
    Août 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Gestionnaire Domotique
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Août 2014
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Domotique Exécution d'une commande dès que sonde < Température de consigne
    Bonjour,

    J'utilise un programme de gestion Domotique qui est Homeseer Pro, avec ce dernier je souhaite gérer la commande de mise en et hors service de ma chaudière.

    J'ai donc créé un script (vbscript) qui demande l'exécution d'une commande marche dès que la mesure relevée par la sonde est < à la température de consigne et une commande arrêt dès que la mesure de sonde est >= à la température de consigne (a noter que la sonde envoie ses donnée au système dès qu'elle varie d'un 10ème de °) cela fonctionne mais ...

    Mon problème est que la commande d'un sens comme dans l'autre est envoyé à chaque mesure reçue par le système sollicitant les relais plus que nécessaire.

    Ce que je souhaite c'est que dès que la condition est remplie d'un sens comme dans l'autre la commande soit envoyée une fois seulement par exemple:

    10h00 Température sonde < température de consigne ===> envoie de la commande marche
    10h05 Température sonde < température de consigne ===> pas de commande
    10h08 Température sonde < température de consigne ===> pas de commande
    10h15 Température sonde >= température de consigne ===> envoie de la commande Arrêt
    10h18 Température sonde >= température de consigne ===> pas de commande
    10h22 Température sonde >= température de consigne ===> pas de commande
    Etc..

    J'espère être claire étant un vrai, vrai débutant en vbscript pour un peu plus de clarté je colle çi dessous l'extrait du code qui aujourd'hui fonctionne mais pas comme je le souhaite.

    D'avance merci de votre aide
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
       '### DEMARAGE DU CHAUFFAGE
            If (Sonde_oregon<Mode_chauffage) Then
                    hs.execX10 "M2", "on"
                    hs.execX10 "M12", "off"
                    hs.WriteLog "Info", "chauffage Marche"
        End If
     
            '### ARRET DU CHAUFFAGE
            If (Mode_chauffage<=Sonde_oregon) Then
                    hs.execX10 "M12", "on"
                    hs.execX10 "M2", "off"
                    hs.WriteLog "Info", "chauffage Arret"
     
         End If
    Nota les commandes qui commence par "hs" sont propre au système "Homeseer" de gestion domotique

  2. #2
    Modérateur
    Avatar de l_autodidacte
    Homme Profil pro
    Retraité : Directeur de lycée/Professeur de sciences physiques
    Inscrit en
    Juillet 2009
    Messages
    2 415
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Retraité : Directeur de lycée/Professeur de sciences physiques
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2009
    Messages : 2 415
    Points : 5 805
    Points
    5 805
    Par défaut
    Salut et BIENVENU sur DVP

    D'après ce que j'ai pu comprendre, tu devrais mettre une condition sur la fréquence d'envoi des commandes ; c-à-d toutes les 4 ou 5 minutes car à vrai dire je n'ai pas bien saisie ta demande !
    Ne pas oublier le tag si satisfait.
    Voter pour toute réponse satisfaisante avec pour encourager les intervenants.
    Balises CODE indispensables. Regardez ICI
    Toujours utiliser la clause Option Explicit(VBx, VBS ou VBA) et Ne jamais typer variables et/ou fonctions en VBS.
    Vous pouvez consulter mes contributions
    Ne pas oublier de consulter les différentes FAQs et les Cours/Tutoriels VB6/VBScript
    Ne pas oublier L'Aide VBScript et MSDN VB6 Fr

  3. #3
    Modérateur
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 077
    Points : 17 175
    Points
    17 175
    Par défaut
    Salut l_autodidacte & perstef
    Cela pourrait ressembler à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    Dim EtatCmd ' drapeau état du relais 
    'Time, fonction: Renvoie un Variant de sous-type Date indiquant l'heure système en cours
     
     '### DEMARAGE DU CHAUFFAGE
    		If Time >= Cdate("10:00:00") And Time <= Cdate("10:08:00") Then
    			If (Sonde_oregon<Mode_chauffage) And EtatCmd <> "Marche" Then
                    		hs.execX10 "M2", "on"
                    		hs.execX10 "M12", "off"
                    		hs.WriteLog "Info", "chauffage Marche"
    				EtatCmd = "Marche"
    			End If
    		End If
     
            '### ARRET DU CHAUFFAGE
    		If Time >= Cdate("10:15:00") And Time <= Cdate("10:22:00") Then
    			If (Mode_chauffage<=Sonde_oregon) And EtatCmd <> "Arret" Then
                    		hs.execX10 "M12", "on"
                    		hs.execX10 "M2", "off"
                    		hs.WriteLog "Info", "chauffage Arret"
    				EtatCmd = "Arret"
    			End If
    		End If
    Prise en compte de l'heure de déclenchement de mise en et/ou hors service (ligne 5 et 15) plus dernière commande Arrêt/Marche effectué par le script (ligne 6 et 16) avec le And évalué en même temps que la condition température.
    Soyez sympa, pensez -y
    Balises[CODE]...[/CODE]
    Balises[CODE=NomDuLangage]...[/CODE] quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Balises[C]...[/C] code intégré dans une phrase.
    Balises[C=NomDuLangage]...[/C] code intégré dans une phrase quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Le bouton en fin de discussion, quand vous avez obtenu l'aide attendue.
    ......... et pourquoi pas, pour remercier, un pour celui/ceux qui vous ont dépannés.
    👉 → → Ma page perso sur DVP ← ← 👈

  4. #4
    Candidat au Club
    Homme Profil pro
    Gestionnaire Domotique
    Inscrit en
    Août 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Gestionnaire Domotique
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Août 2014
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Domotique Exécution d'une commande dès que sonde < Température de consigne Résolu
    Bonjour,

    Merci à tous de votre contribution même si la solution n'y était pas "L'autodidact" à allumer chez moi une lumière, un éclair de lucidité.

    En effet j'avais oublié que le système proposait une fonction permettant de vérifier l'état de la commande cette fonction est "hs.isoff ou hs.ison", il m'a donc suffit d'ajouter un "And hs.isoff ("M2") dans la condition (voir si dessous) ainsi la cmde n'est envoyée qu'une seul fois quelques soit la variation de la sonde de température jusqu'a ce que celle ci atteigne la température de consigne. et la j'suis trop content CA MARCHE COMME JE VEUX. Je colle ci dessous l'extrait du code au cas ou cela servirait à quelqu'un.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    '### DEMARAGE DU CHAUFFAGE
    If (Sonde_oregon<Mode_chauffage)and hs.isoff ("M2") Then ' si température sonde < consigne et M2 off (marche chauffage est off alors
         hs.execX10 "M2", "on"                            ' Cmde marche Chaudière sur on
         hs.execX10 "M12", "off"                          ' Cmde arret Chaudiere sur off
         hs.WriteLog "Info", "chauffage Marche"           ' Pase info marche chaudiere ds journal
    End If
     
    '### ARRET DU CHAUFFAGE
    If (Mode_chauffage<=Sonde_oregon)and hs.isoff ("M12") Then ' si température sonde >= consigne et M12 off (Arret chauffage est off alors
         hs.execX10 "M12", "on"                             ' Cmde arret Chaudière sur on
         hs.execX10 "M2", "off"                             ' Cmde marche Chaudiere sur off
         hs.WriteLog "Info", "chauffage Arret"              ' Pase info Arret chaudiere ds journal
    End If

  5. #5
    Modérateur
    Avatar de l_autodidacte
    Homme Profil pro
    Retraité : Directeur de lycée/Professeur de sciences physiques
    Inscrit en
    Juillet 2009
    Messages
    2 415
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Retraité : Directeur de lycée/Professeur de sciences physiques
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2009
    Messages : 2 415
    Points : 5 805
    Points
    5 805
    Par défaut
    Bonjour,
    Heureux pour toi d'avoir trouvé la solution.
    ProgElecT ( ) et moi avons répondu selon le peu d'infos que nous avons pu récupérer de ta demande car nous ne connaissons pas ton support de travail.
    Comme consigné dans ma signature : Ne pas oublier le tag si satisfait.
    Ne pas oublier le tag si satisfait.
    Voter pour toute réponse satisfaisante avec pour encourager les intervenants.
    Balises CODE indispensables. Regardez ICI
    Toujours utiliser la clause Option Explicit(VBx, VBS ou VBA) et Ne jamais typer variables et/ou fonctions en VBS.
    Vous pouvez consulter mes contributions
    Ne pas oublier de consulter les différentes FAQs et les Cours/Tutoriels VB6/VBScript
    Ne pas oublier L'Aide VBScript et MSDN VB6 Fr

  6. #6
    Membre confirmé Avatar de pitchalov
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 340
    Points : 582
    Points
    582
    Par défaut
    Bonjour,
    Le problème est résolu et c'est tant mieux, mais après avoir lu le sujet et les réponses, je me permets d'ajouter mon grain de sel.
    Cela pourra servir si le même problème se reposait, sans capacité d'interroger l'état de la commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    '### INITIALISATION
    boolChauffageOn = False
    Do While 1
    	'### DEMARAGE DU CHAUFFAGE
    	If ((boolChauffageOn = False) AND (Sonde_oregon < Mode_chauffage)) Then
    		hs.execX10 "M2", "on"
    		hs.execX10 "M12", "off"
    		hs.WriteLog "Info", "chauffage Marche"
    		boolChauffageOn = True
    	End If
     
    	'### ARRET DU CHAUFFAGE
    	If ((boolChauffageOn = True) AND (Mode_chauffage <= Sonde_oregon)) Then
    		hs.execX10 "M12", "on"
    		hs.execX10 "M2", "off"
    		hs.WriteLog "Info", "chauffage Arret"
    		boolChauffageOn = False
    	End If
    Loop
    Bonne continuation

  7. #7
    Modérateur
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 077
    Points : 17 175
    Points
    17 175
    Par défaut
    Salut

    Je ne veux pas troler, mais ce qui me gène dans les codes proposés c'est la notion de plages horaires .
    Citation Envoyé par perstef post N°1
    10h00 Température sonde < température de consigne ===> envoie de la commande marche
    10h05 Température sonde < température de consigne ===> pas de commande
    10h08 Température sonde < température de consigne ===> pas de commande
    10h15 Température sonde >= température de consigne ===> envoie de la commande Arrêt
    10h18 Température sonde >= température de consigne ===> pas de commande
    10h22 Température sonde >= température de consigne ===> pas de commande
    pitchalov, pourrais tu m'expliquer cette ligne de code Do While 1
    Soyez sympa, pensez -y
    Balises[CODE]...[/CODE]
    Balises[CODE=NomDuLangage]...[/CODE] quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Balises[C]...[/C] code intégré dans une phrase.
    Balises[C=NomDuLangage]...[/C] code intégré dans une phrase quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Le bouton en fin de discussion, quand vous avez obtenu l'aide attendue.
    ......... et pourquoi pas, pour remercier, un pour celui/ceux qui vous ont dépannés.
    👉 → → Ma page perso sur DVP ← ← 👈

  8. #8
    Membre confirmé Avatar de pitchalov
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 340
    Points : 582
    Points
    582
    Par défaut
    Hello ProgElecT

    J'avais peut-être mal compris, mais j'avais l'impression que les heures étaient des résultats de logs, envoyés à titre d'exemple.
    Si je me suis trompé, mon code n'a effectivement rien à faire là étant donné qu'il ne prend pas en compte de plage horaire.

    Par contre, si le script doit juste faire du maintien en température, sans tenir compte des horaires, alors mon exemple pourrait être utile --> son seul objectif est de ne pas renvoyer de commande "on/off" si la commande en cours est déjà la bonne.

    Le "Do While 1" est une boucle infinie (il lui manque un Wait afin de faire de la tempo bien sûr) permettant d'avoir un script unique de maintien de la température (pas la peine de le relancer toutes les 5/10 minutes) et de justement garder dans une variable l'état de la commande en cours --> je l'ai rajouté pour illustrer mon exemple.

    Si ma contribution n'est pas constructive, voir plus troublante qu'autre chose, je l'enlèverai sans problème

Discussions similaires

  1. Réponses: 9
    Dernier message: 30/05/2006, 19h38
  2. Exécution d'une commande dans un Trigger
    Par Perr1 dans le forum Oracle
    Réponses: 6
    Dernier message: 08/04/2006, 00h14
  3. [VB]Problème d'exécution d'une commande dos...
    Par Empty_body dans le forum VB 6 et antérieur
    Réponses: 21
    Dernier message: 17/02/2006, 12h28
  4. Réponses: 6
    Dernier message: 09/11/2005, 17h29
  5. [Système] Pb exécution d'une commande externe
    Par licorne dans le forum Langage
    Réponses: 9
    Dernier message: 19/10/2005, 16h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo