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

JavaScript Discussion :

Gérer ma station domotique [Débutant(e)]


Sujet :

JavaScript

  1. #1
    Candidat au Club
    Homme Profil pro
    bidouilleur en info lol
    Inscrit en
    Septembre 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : bidouilleur en info lol

    Informations forums :
    Inscription : Septembre 2014
    Messages : 7
    Points : 3
    Points
    3
    Par défaut Gérer ma station domotique
    Bonjour,
    Je voudrais faire un script (sur google script) me permettant de gérer ma station domotique.
    j'arrive a prélever de ma station l'url de l’état de mes sorties mais je ne vois pas comment traiter son résultat.
    en effet je récupère ceci : <html>P61=1,P62=0,P63=0,P64=0,P65=1,P66=0,P67=1,P68=0</html>
    ce que je voudrais c'est récupérer les valeurs et les mettre dans leur sorties associé. et avoir une variable P61 égale à 1 une variable P62=0 etc...
    mais j'ai aucune idée de comment extraire de mon résultat précédent ces valeurs.

    Si une âme charitable pouvait me mettre sur la voie.

    Merci d'avance.

    PS : Pour l'instant mon script ressemble à ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    URL = "http://monurl:3218/Set.cmd?user=????+pass=????+CMD=GetPower";
    var SORTIES = UrlFetchApp.fetch(URL);
    MailApp.sendEmail("monmail" ,"rapport ippower"," LES SORTIES " + SORTIES  );

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 125
    Points : 149
    Points
    149
    Par défaut
    Salut,

    Serait-ce trop demander d'avoir la référence du/des produits que tu utilise.
    J'entends par là la marque et la référence de ton matériel stp .

  3. #3
    Candidat au Club
    Homme Profil pro
    bidouilleur en info lol
    Inscrit en
    Septembre 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : bidouilleur en info lol

    Informations forums :
    Inscription : Septembre 2014
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    Bonjour,
    Non j'aurai du le mettre c'est un ippower 9212. voir http://www.aviosys.com/9212delux.html et http://www.aviosys.com/downloads/man...12delux_en.pdf
    l'interface avec n'est pas terrible et je veux essayer d'arranger celà via google agenda par la suite mais j'y vais petit a petit.
    La question ci dessus me permettrait de pouvoir traiter entrées et sorties avec une logique booléenne.

  4. #4
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 636
    Points : 66 655
    Points
    66 655
    Billets dans le blog
    1
    Par défaut
    tu reçois donc un retour sous forme de code html
    il te suffirait à partir d'une page htlm de faire une requete ajax et de parser la réponse en la splittant sur la virgule puis sur le signe =

    ça se code facilement avec jquery


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    $.ajax({
    type: "GET",
    url: "http://monurl:3218/Set.cmd",
    data: {user: "?????",CMD:"commande"
    })
    .done(function( msg ) {
    alert( "la station me répond: "+ msg );
    });
    URL =
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  5. #5
    Candidat au Club
    Homme Profil pro
    bidouilleur en info lol
    Inscrit en
    Septembre 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : bidouilleur en info lol

    Informations forums :
    Inscription : Septembre 2014
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    ok merci je regarde ça dans la mâtiné. Comme je le dis je débute et je ne connais pas les requêtes AJAX mais je vais chercher c'est ce que je voulais une piste pour aller dans le bon sens.

  6. #6
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 636
    Points : 66 655
    Points
    66 655
    Billets dans le blog
    1
    Par défaut
    j'ai complété le message précédent ...

    pour plus d'infos sur jquery http://javascript.developpez.com/faq/jquery/
    si tu as d'autre question n'hésite pas a revenir selon ton avancement.
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  7. #7
    Candidat au Club
    Homme Profil pro
    bidouilleur en info lol
    Inscrit en
    Septembre 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : bidouilleur en info lol

    Informations forums :
    Inscription : Septembre 2014
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    Hello
    Je reviens car je n'ai pas encore trouvé comment programmer selon votre méthode.
    Bon j'ai quand même chercher et ne rigolez pas de ma méthode qui est peu académique mais elle marche.

    on va l'appeler la méthode du neuneu nul en javascript :

    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
    23
    24
    25
    function myFunction() {
     
      var ENTREES = UrlFetchApp.fetch("mon url qui renvoi des balise comme mon premier message").getContentText();
      reg=new RegExp("<.[^>]*>", "gi" );
      ENTREES = ENTREES.replace(reg, "" );
      ENTREES = ENTREES.replace("P61=", "").replace(",P62=", "").replace(",P63=", "").replace(",P64=", "").replace(",P65=", "").replace(",P66=", "").replace(",P67=", "").replace(",P68=", "");
      ENTREES = parseFloat(ENTREES); 
      var b = 100000000
     
      for (var S=[],i = 0; i < 9; i++) 
      {
       if (ENTREES < b) 
      {
        S[i] = 0;
            }
        else
        {
          S[i] =1;
        }
      ENTREES = ENTREES - S[i]*b;
      b = b/10;
      }
     
     }
    Vous en pensez quoi ?:aie:
    (ail non pas tapé)
    vs avez certainement plus simple

    Autre chose j'ai vraiment bien avancé sur la gestion de ma domotique via le google agenda je reviendrai sur le forum vous en faire part quand ce sera terminé.
    edit :

    Bon j'edite mon message, j'ai pris quelques exemples pour le google agenda sur le net afin de concevoir mon programme.
    ça marche plutot nickel mais j'ai un peu de mal a comprendre certaines ligne.


    voici mon programme pour l'ippower 9212 : Les quelques lignes en rouge demeure un peu mystérieuse pour moi donc si vous pouviez m'aider a comprendre


    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    function calendrier() {
    MONMAIL = "???????@yahoo.fr"  
    DDNS = "xxx.xxx.xxx.xxx"; /adresse ip fixe de votre box ou ddns si ip changeante /
    PORT = ":3218"; / port j'ai inclu les : car le port sera toujours utilisé ainsi /
    UTIL = "user=?????"; / 
    MDP = "+pass=mon mot de passe"; / mot de passe (ne pas laisser celui par defaut.) /
    URL = DDNS + PORT + "/Set.cmd?" + UTIL + MDP; /URL complete de la centrale domotique sans les commandes /
    CAL = "Domotique"; /nom de votre calendrier dans google agenda /
    
    
    
    /** Les commandes domotiques **/
    var entrees = "+CMD=Getio"; /complément de commande pour afficher les entrées/
    var sorties = "+CMD=GetPower"; /complément de commande pour afficher les sorties/
    
    
    
    
      
    /** Entrées Sorties de l'IPPower **/
      
      var ENTREES = UrlFetchApp.fetch(URL + entrees); /met l'état des entrées dans la variable ENTREES/
      var SORTIES = UrlFetchApp.fetch(URL + sorties); /met l'état des sorties dans la variable SORTIES/
    
    
      
     
    
    /** AFFECTATION DES ENTREES/SORTIES ACTUELLES **/
      
    
      
      
      
    /** declaration de variables **/  
      
    var Description = "0";  
    
    var now = new Date();
    
    var now2 = new Date();
    
    var resultat;
    
    var API_Periph;
    
    var API_Valeur;
    
    
    
    now.setTime(now2.getTime()- (5*60*1000)); / on prend un décallage de 5 minutes /
    
    var cal = CalendarApp.getCalendarsByName(CAL)[0]; / chargement du calendrier /
    
    var ordre = cal.getEvents(now, now2); /regarde si un ordre doit être lancé DANS L'intervalle de 5 minutes/
    
    
    
     
    /** affectation des sorties de votre IPPOWER 
    
    VMC = P61
    chauffe-eau = P62
    
    Radiateur-eco = P65+P67
    **/ 
      
     for (i in ordre)
     
    {
      
      var Titre = ordre[i].getTitle(); // On récupère le titre de l'événement
      var Description = ordre[i].getDescription(); // On récupère la description de l'événement
      var Error = null; // On initialise le retour d’erreur à null
    
    
      
      if (Description.indexOf(" Action réalisée le ") == -1) // Si la description de l’événement contient « Action réalisée le » alors aucune action
    
      {
    
        switch(Titre)
    
        {
            /** attention AppelAPI lance la fonction AppelAPI dans chacune des "case" ci dessous. cette fonction se trouve en fin de programme**/
          case "vmc on" :
            Error = Error || AppelAPI("P61" , "0" ); // allumer VMC. 
            
            MailApp.sendEmail( MONMAIL ,"rapport ippower", Titre + Error + Description); /Ceci est un test qui renvoi l'etat des entréeS sortieS sur votre mail./
            break;
         
            
          case "vmc off" :
            Error = Error || AppelAPI("P61" , "1" ); // éteindre VMC. ne pas oublier que les 4 premieres sorties sur l'ippower 9212 sont inversé.
            break;
            
            
          case "radiateur eco" :
            Error = Error || AppelAPI("P65" , "1" ); // pour eco les 2 sorties doivent etre à 1
            Error = Error || AppelAPI("P67" , "1" ); // fil pilote branché sur 2 diodes
            break;
            
          case "radiateur on" :
            Error = Error || AppelAPI("P65" , "0" ); // pour marche normale le fil pilote ne doit pas être allimenté
            Error = Error || AppelAPI("P67" , "0" ); // les 2 sorties sont donc à 0
            break;
            
          case "radiateur off" :
            Error = Error || AppelAPI("P65" , "1" ); // P65 seule à 1 : Hors gel
            Error = Error || AppelAPI("P67" , "0" ); // P67 seule à 1 : arret
            break;
            
          case "chauffe eau on" :
            Error = Error || AppelAPI("P62" , "0" ); // mise en marche du chauffe eau, ne pas oublier que les 4 premieres sorties sur l'ippower 9212 sont inversé.
            break;
            
          case "chauffe eau off" :
            Error = Error || AppelAPI("P62" , "1" ); // arret du chauffe eau, ne pas oublier que les 4 premieres sorties sur l'ippower 9212 sont inversé.
            break; 
            
        }
    
        var Maintenant = new Date();
    
        if (Error == false)
    
        {
    
          ordre[i].setDescription("Action réalisée le" + Maintenant.toLocaleString()); // Inscrit " Action réalisée le " + date dans le descriptif de l’événement pour éviter qu’il ne se reproduise
          
        }
    
        else if (Error == true)
    
        {
    
          if (Description.indexOf(" Erreur lors de l’appel d’une API eedomus ") < 0)
    
          {
    
            Events.setDescription(" Erreur lors de l’appel d’une API ippower le  " + Maintenant.toLocaleString()); // Inscrit " Erreur lors de l’appel d’une API " + date dans le descriptif de l’événement pour éviter qu’il ne se reproduise
    
            // envoi d’un mail de rapport d’erreur
    
            MailApp.sendEmail(MONMAIL , " Erreur du script domotique ", " Une erreur s’est produite lors à la réalisation de l’événement [" + Titre + "]" );
    
          }
    
        }
    
      }
      
    }
    }
    
    
    
    
    function AppelAPI(Sortie, état)
    
    {
    
    var Reponse;
    
    Reponse = UrlFetchApp.fetch( URL + "+cmd=SetPower+" + Sortie + "=" + état );
    
      
      
    Reponse = Reponse.getContentText();
    
    Logger.log (Reponse);
    
    return(Reponse.indexOf(" error_code ") >= 0);
    
    }
    La suite sera de pouvoir gérer plusieurs évènement en même temps si possible.
    Bref passionnant quand on a un project et le matos pour tester.

  8. #8
    Membre actif

    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2013
    Messages : 119
    Points : 203
    Points
    203
    Billets dans le blog
    1
    Par défaut
    J'ai pas tout compris !

    Mais si c est juste pour extraire les chiffre de la chaine <HTML >....</html>

    je te donne ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    "<html>P61=1,P62=0,P63=0,P64=0,P65=1,P66=0,P67=1,P68=0</html>".split(/,|<.[^>]*>|p[\d]+=/i).join("")
     
    ce qui donne "10001010"

  9. #9
    Candidat au Club
    Homme Profil pro
    bidouilleur en info lol
    Inscrit en
    Septembre 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : bidouilleur en info lol

    Informations forums :
    Inscription : Septembre 2014
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    ok merci c + simple.
    par contre ça n’empêche pas de devoir faire la boucle pour avoir chacune des valeurs de l'expression séparément dans des variables.
    en fait l'ideal aurait été de supprimer uniquement les balises puis de faire un var de l'expression.

    Mais est ce faisable ?
    en fait j'aurai voulu faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    var ENTREES = UrlFetchApp.fetch //("mon url qui renvoi des balise <html>P61=1,P62=0,P63=0,P64=0,P65=1,P66=0,P67=1,P68=0</html>;
    reg=new RegExp("<.[^>]*>", "gi" );
    ENTREES = ENTREES.replace(reg, "" );// là il me reste P61=1,P62=0,P63=0,P64=0,P65=1,P66=0,P67=1,P68=0
    var "ENTREES"
    // c'est là que ça marche pas.puisque je voudrais qu'il me retourne mes 8 variables
    //////////////////// comme si je faisais var P61=1,P62=0,P63=0,P64=0,P65=1,P66=0,P67=1,P68=0

    Merci pour les balises code c effectivement plus lisible. j'y penserai dorénavant

  10. #10
    Membre actif

    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2013
    Messages : 119
    Points : 203
    Points
    203
    Billets dans le blog
    1
    Par défaut
    salut totu2002 :

    Et que penses tu de ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    var ENTREES = "<html>P61=1,P62=0,P63=0,P64=0,P65=1,P66=0,P67=1,P68=0</html>";
     
         eval( "var "+ENTREES.replace(/<.[^>]*>/g,""))
     
     console.log(P61);//1
      console.log(P62);//0
    var som=P65+P67;
    console.log(som);//2
    le eval n est pas tres adapté mais ca repond a ce que tu veux .

    une autre solution
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    var ENTREES = "<html>P61=1,P62=0,P63=0,P64=0,P65=1,P66=0,P67=1,P68=0</html>";
    var temp="{"+ENTREES.replace(/<.[^>]*>/gi,"").replace(/(p[\d]+)=(\d)/gi,"\"$1\":$2")+"}";
     
     var entreesParsee=JSON.parse(temp);
     
     console.log(entreesParsee.P62);//0
    console.log(entreesParsee.P61+entreesParsee.P65);//2

  11. #11
    Candidat au Club
    Homme Profil pro
    bidouilleur en info lol
    Inscrit en
    Septembre 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : bidouilleur en info lol

    Informations forums :
    Inscription : Septembre 2014
    Messages : 7
    Points : 3
    Points
    3
    Par défaut merci
    Merci,
    J'essayerai certainement demain. J'ai pas pu répondre plus tôt j’étais sans connexion durant 2 jours.
    Par contre au premier regard j'ai l'impression que tu mets des valeurs fixe en p1, p2 etc....
    hors il me paraissait évident que les valeurs 1 ou 0 peuvent changer a chaque lecture de ma page html.

    Bon je pense que je n'arriverai pas à avoir mieux que ça :

    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
    function myFunction() {
     
      var ENTREES = UrlFetchApp.fetch("monurl:port/Set.cmd?user=????+pass=?????+CMD=GetPower").getContentText().split(/,|<.[^>]*>|p[\d]+=/i).join("");
      var b = 100000000
     
      for (var S=[],i = 0; i < 9; i++) 
      {
     
      if (ENTREES < b) 
      {
        S[i] = 0;
     
        }
        else
        {
          S[i] =1;
        }
      ENTREES = ENTREES - S[i]*b;
      b = b/10;
      }
     
    }
    ça me permet de renommer les sorties de type P61 en S1, je vais faire la même chose pour les sorties.
    Je passe en résolu.

  12. #12
    Candidat au Club
    Homme Profil pro
    bidouilleur en info lol
    Inscrit en
    Septembre 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : bidouilleur en info lol

    Informations forums :
    Inscription : Septembre 2014
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    Je donne mon script actuel pour l'ippower 9212, ça peut toujours servir à quelqu'un. j'ai essayé de commenter au mieux, si vous passez par là et que vous avez du temps vous pouvez eventuellement me signaler mes erreurs de débutant.
    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    function calendrier() {
    MONMAIL = "xxxx@fournisseur.fr"  
    DDNS = "http://xxxxx.ddns.net"; //adresse ip fixe de votre box ou ddns si ip changeante
    PORT = ":3218"; // port j'ai inclu les : car le port sera toujours utilisé ainsi. Par défaut le 80 est utilisé je conseille de le changer
    UTIL = "user=xxxxxxx"; // utilisateur de la centrale domotique
    MDP = "+pass=xxxxxxxx"; // mot de passe (ne pas laisser celui par defaut.)
    URL = DDNS + PORT + "/Set.cmd?" + UTIL + MDP; //URL complete de la centrale domotique sans les commandes
    CAL = "Domotique"; //nom de votre calendrier dans google agenda
     
     
     
    /** Les commandes domotiques **/
    var entrees = "+CMD=Getio"; //complément de commande pour afficher les entrées
    var sorties = "+CMD=GetPower"; //complément de commande pour afficher les sorties
     
     
     
     
     
     
     
     
    /** AFFECTATION DES ENTREES/SORTIES ACTUELLES **/
      // attention pour la suite entrees et ENTREES sont des variables différentes.entrees correspond à la commande de lecture en html et ENTREES est un résultat en binaire de l etat des entrées.
      var ENTREES = UrlFetchApp.fetch(URL + entrees).getContentText().split(/,|<.[^>]*>|p[\d]+=/i).join("");//cette commande enlève les balises et le texte afin de ne garder que les chiffres au résultat de l'url :
                                                                                                           //en effet si vous faites juste "ENTREES = UrlFetchApp.fetch(URL + entrees)", alors vous avez un résultat qui ressemble à ça "<html>P51=1,P52=0,P53=0,P54=0,P55=1,P56=0,P57=1,P58=0 <html>" 
                                                                                                           // la suite de la commande permet d'enlever les balises et le texte on a donc dans ce cas 10001010 dans ENTREES.
    var b = 10000000; 
      for (var E=[],i = 1; i < 9; i++) //La commande for va permettre de séparer chaque entrées et de mettre la valeur binaire dans E[1], E[2],....E[8]
      {
        if (ENTREES < b)    //à la première boucle on isole l'entrée 1 qui va dans E[1], cette fois suivant l'etat de l'entrée 1, on met 0 ou 1 dans E[1], explication : avec l'exemple ci dessus  ENTREES est égal à 10001010
        {                    // 1er boucle : ce chiffre étant strictement supérieur à b et i etant égal à 1 on met 1 dans E[1], ensuite on retranche à ENTREES LA VALEUR E[1] * b.  on a donc ENTREES egal à 1010 puis on divise b par 10,
          E[i] = 0;            // 2eme boucle : ENTREES étant strictement inférieur à b et i etant égal à 2 on met 1 dans E[2], ensuite on retranche à ENTREES LA VALEUR E[2] * b.  on a donc ENTREES egal encore à 1010 puis on divise b par 10,
       }                     // etc..... pour les 8 entrées.
        else
        {
          E[i] =1;
         }
      ENTREES = ENTREES - E[i]*b;
      b = b/10;
      }
     
     
    var SORTIES = UrlFetchApp.fetch(URL + sorties).getContentText().split(/,|<.[^>]*>|p[\d]+=/i).join("");//cette commande enlève les balises et le texte afin de ne garder que les chiffres
    var b = 10000000;
      for (var S=[],i = 1; i < 9; i++) //La commande for va permettre de séparer chaque sorties et de mettre la valeur binaire dans S[1], S[2],....S[8] , Même explication que ci-dessus
      {
       if (SORTIES < b) 
       {
        S[i] = 0;
       }
        else
       {
          S[i] =1;
       }
      SORTIES = SORTIES - S[i]*b;
      b = b/10;
      }  
    // MailApp.sendEmail(MONMAIL ,"rapport ippower","LES ENTREES : " + E[1] + E[2] + E[3] +E[4] + E[5] + E[6] + E[7] + E[8] + ", LES SORTIES : " + S[1] + S[2] + S[3] +S[4] + S[5] + S[6] + S[7] + S[8] ); //cette ligne décommentée enverra un mail de l'etat des entrées sorties a chaque execution du script
    /**  
     Pour le moment je ne traite pas de commande directe entree/sorties
    Mais cette affectation permet par exemple si on a branché sur l'entrée 1 un bouton marche/arret alarme et sur l'entrée 2 un detecteur de porte ouverte
    de déclencher une alarme branché sur la sortie 4. Pour celà il suffit d'ecrire :
     
      if (E[1]==1 && E[2]==1)
    { alarme = UrlFetchApp.fetch( URL + "+cmd=SetPower+" + "P64=1" );
    }
    else{}
    **/
     
    /** declaration de variables **/  
     
    var Description = "0";  
     
    var now = new Date();
     
    var now2 = new Date();
     
    var resultat;
     
     
    now.setTime(now2.getTime()- (1*60*1000)); / now = now2 - 1 minute /
     
    var cal = CalendarApp.getCalendarsByName(CAL)[0]; / chargement du nom du calendrier /
     
    var ordre = cal.getEvents(now, now2); /regarde si un ou plusieurs ordre doit être lancé DANS L'intervalle de 1 minutes/
     
     
     
     
    /** affectation des sorties de votre IPPOWER pour info
     
    vmc = P61
    chauffe eau = P62
    Radiateur Hors gel = P65
    Radiateur-eco = P65+P67
    **/ 
     
     for (i in ordre) // tant qu'il y a un évènement on boucle.(cas de plusieurs actions à la même heure)
     
    {
     
      var Titre = ordre[i].getTitle(); // On récupère le titre de l'événement
      var Description = ordre[i].getDescription(); // On récupère la description de l'événement
      var Error = null; // On initialise le retour d’erreur à null
     
    // MailApp.sendEmail(MONMAIL ,"rapport ippower", ordre + Titre + i + ordre[i] + cal) //pour tests
     
      if (Description.indexOf(" Action réalisée le ") == -1) // Si la description de l’événement contient « Action réalisée le » alors aucune action et c'est la fin du script
     
      {
     
        switch(Titre) //exécute la case correspondant au titre trouvé dans l'agenda (évènement).
     
        {
            /** note IPPOWER lance la fonction IPPOWER dans chacune des "case"s ci dessous. cette fonction se trouve en fin de programme**/
          case "vmc on" :
            Error = Error || IPPOWER("P61" , "0" ); // allumer VMC. ne pas oublier que les 4 premieres sorties sur l'ippower 9212 sont inversé donc un 0 allume la sortie 1.
            break;// sortie du switch
     
     
          case "vmc off" :
            Error = Error || IPPOWER("P61" , "1" ); // éteindre VMC. ne pas oublier que les 4 premieres sorties sur l'ippower 9212 sont inversé donc un 1 éteind la sortie 1.
            break;// sortie du switch
     
     
          case "radiateur eco" :
            Error = Error || IPPOWER("P65" , "1" ); // pour eco les 2 sorties doivent etre à 1
            Error = Error || IPPOWER("P67" , "1" ); // fil pilote branché sur 2 diodes tête bèche sur sortie 5 et 7
            break;// sortie du switch
     
          case "radiateur on" :
            Error = Error || IPPOWER("P65" , "0" ); // pour marche normale le fil pilote ne doit pas être allimenté
            Error = Error || IPPOWER("P67" , "0" ); // les 2 sorties sont donc à 0
            break;// sortie du switch
     
          case "radiateur off" :
            Error = Error || IPPOWER("P65" , "1" ); // P65 seule à 1 : Hors gel
            Error = Error || IPPOWER("P67" , "0" ); // P67 seule à 1 : arret, dans mon cas je laisse plutot sur hors gel que sur arret.
            break;// sortie du switch
     
          case "chauffe eau on" :
            Error = Error || IPPOWER("P62" , "0" ); // mise en marche du chauffe eau, ne pas oublier que les 4 premieres sorties sur l'ippower 9212 sont inversé donc un 0 allume la sortie 2.
            break;// sortie du switch
     
          case "chauffe eau off" :
            Error = Error || IPPOWER("P62" , "1" ); // arret du chauffe eau, ne pas oublier que les 4 premieres sorties sur l'ippower 9212 sont inversé donc un 1 éteind la sortie 2.
            break; // sortie du switch
     
        }
     
        var Maintenant = new Date();// on prend la date de fin d'évènement
     
        if (Error == false)
     
        {
     
          ordre[i].setDescription(" Action réalisée le " + Maintenant.toLocaleString()); // Inscrit " Action réalisée le " + date dans le descriptif de l’événement pour éviter qu’il ne se reproduise
     
        }
     
        else if (Error == true)
     
        {
     
          if (Description.indexOf(" Erreur lors de l’appel de l'ippower ") < 0)
     
          {
     
            Events.setDescription(" Erreur lors de l’appel de l'ippower le  " + Maintenant.toLocaleString()); // Inscrit " Erreur lors de l’appel d’une API " + date dans le descriptif de l’événement pour éviter qu’il ne se reproduise
     
            // envoi d’un mail de rapport d’erreur
     
            MailApp.sendEmail(MONMAIL , " Erreur du script domotique ", " Une erreur s’est produite lors à la réalisation de l’événement [" + Titre + "]" );
     
          }
     
        }
     
      }
     
    }
    }
     
     
     
     
    function IPPOWER(Sortie, état)
     
    {
     
    var Reponse;
     
    Reponse = UrlFetchApp.fetch( URL + "+cmd=SetPower+" + Sortie + "=" + état );
     
     
     
    Reponse = Reponse.getContentText();
     
     
     
    Logger.log (Reponse);
     
    MailApp.sendEmail(MONMAIL ,"rapport ippower", Reponse);    
     
    return(Reponse.indexOf(" error_code ") >= 0);
     
     
    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [BPW] Gérer les réservations dans une station de bus
    Par féeréelle dans le forum Turbo Pascal
    Réponses: 0
    Dernier message: 15/04/2012, 01h53
  2. Gérer le ALT-TAB ?
    Par Magus (Dave) dans le forum DirectX
    Réponses: 15
    Dernier message: 04/01/2004, 01h43
  3. Comment gérer les espaces blancs?
    Par Lambo dans le forum XML/XSL et SOAP
    Réponses: 10
    Dernier message: 16/05/2003, 10h44
  4. gérer le clic gauche-droite en même temps de la sou
    Par Guigui_ dans le forum Langage
    Réponses: 4
    Dernier message: 29/11/2002, 23h52
  5. gérer les jpg dans une fenetre directdraw???
    Par Anonymous dans le forum DirectX
    Réponses: 1
    Dernier message: 14/06/2002, 14h39

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