Gestion de chauffage : Homematic

Dans le forum Chauffage - par sylo le 22 Octobre 2015

  1. CJP

    CJP 66 ans, Bruxelles

    Bonjour àtous,

    Merci à xachopin pour les fichiers, j'ai pu updater la centrale en 2.25.15 sans problème. Sorry, mais je n'utilise pas (encore) CuXD.

    J'ai complèté mon installation par 3 têtes Thermostatiques, 1 thermostat ainsi qu'un contacteur double 220V pour ma chaudière et mon circulateur. Tout marche nikel. Mais j'ai eu avec mes 3 nouvelles têtes des erreurs F2 à chaque montage sur mes vannes, après plusieurs essais infructueux, tout a été résolu en glissant sur le piston de mes vannes, un capuchon très fin provenant des bouts de petits fusibles (pour l'électronique) cylindrique en verre que j'ai cassés pour en récupérer les 2 extrémités. Il me manquait 4/10ième de mm !!!!

    J'ai aussi créé pas mal de scripts: Vacances, Femme d'ouvrage, Petits-Enfants viennent dormir, Status complet du système, ...
    Total Status.JPG

    Pas encore testé les emails mais j'y pense: est-ce que mon compte Emails peut-être l'envoyeur (smpt) et le receveur (pop3) des emails de la centrale ???

    Par contre, je suis bloqué sur la connexion à la centrale depuis l'Internet: j'ai une bbox Proximus, ou j'ai configuré un port-forwarding redirigé vers la centrale mais cela ne fonctionne pas, je crois que le Firewall de la bbox bloque toute intrusion. Oui je sais ce n'est pas très "secure" mais je voudrais tester, en premier lieu, la plus simple connexion possible: Internet - DynDns - IP_ProximusBbox - port_xxxxxBbox - port80_IP_Centrale.
    Je crois que Sylo avait réussi a configurer un VPN à travers sa bbox, un coup de main serais bien appréciable.

    Merci.
     
    CJP , 13 Mars 2017
    ironglove aime ça.
  2. ironglove

    ironglove 28 ans, Hainaut

    ironglove , 14 Mars 2017
    CJP aime ça.
  3. CJP

    CJP 66 ans, Bruxelles

    ironglove, je n'ai pas le problème DynDNS car j'ai utilisé mon IP-Belgacom http://91.x.x.x:18080 et cela ne fonctionne pas, faut dire aussi que belgacom/proximus ne donne pas accès à beaucoup de choix de débugage ! (pas de ping, pas de traceroute, pas de ...) J'ai parlé de DynDns pour dire "Dynamic Domain Name Service" et non la société DynDNS, car je pense utilisé dans le futur DtDNS.net

    Pour mes erreurs F2,je ne croix pas à un défaut de fabrication des têtes homematic mais à un défaut sur mes 3 vannes de radiateur car ces 3 nouvelles têtes se montaient sans problème sur d'autres radiateurs ! Et mes anciennes têtes HM de mes autres radiateurs me donnaient les même F2 sur les 3 radiateurs concernés !

    Merci de m'avoir pointé le problème avec DynDNS.
     
    CJP , 14 Mars 2017
  4. xachopin

    xachopin 43 ans, Bruxelles

    Tant mieux si mes fichiers ont pu aider pour ta mise à jour :)

    Pour l'erreur F2, a mon avis ce sont tes vannes qui ont une "tête" un peut trop courte. Est-ce que les HM ne sont pas justement livrées avec un petit capuchon plastique (en plus des adaptateurs plastiques) justement pour ce genre de cas? Je sais que j'ai eu ces petit capuchon (a mettre sur la tige de la vanne), mais je ne sais plus si c'est avec les HM ou mes anciennes vannes électroniques (non wireless).

    Concernant l'email, tu peux utiliser le même compte pour l'envoi et la réception, pas de souci.

    Pour la connexion Proximus, la je ne sais pas trop d'aider, je suis chez Telenet... Peut-être que proximus bloque le port 80.
    Si tu as un NAS (Qnap ou Synology... et sans doute d'autres marques), tu peux l'utiliser comme serveur VPN, ça te permettra de sécurisé ta connexion à la centrale et aussi de contourner le problème de blocage de port.
     
    xachopin , 14 Mars 2017
    CJP aime ça.
  5. CJP

    CJP 66 ans, Bruxelles

    xachopin, oui merci pour les 3 fichiers d'update que j'ai utilisés, tous les 3 sans problème.

    Des petits capuchons sont livrés avec les têtes mais pour les vannes Danfoss RAV et ces extentions de piston étaient trop longues pour mon problème, il me manquait 4/10ième de mm seulement !!

    Pour la connexion Proximus j'aimerais entrer sur un port haut, genre 18080, pour redescendre sur le port 80 de la centrale et ainsi by-passer les ports bas qui sont souvent bloqués par les FAI.
     
    CJP , 14 Mars 2017
  6. xachopin

    xachopin 43 ans, Bruxelles

    Bonjour à tous,

    Ca fait un petit temps que recherchait comment récuperer le contenu d'une page HTML (ou xml, json, etc)
    Je savais comment la downloader (WGET), mais je ne savais pas comment l'ouvrir. Après quelques recherches sur les fonctions Linux et quelques essais, j'ai enfin trouvé! :) :party:

    Je vous join un petit script qui me permet de récupérer la température extérieur et le taux d'humidité sur le site de Weather Underground. On peut également récupérer la vitesse du vent, la pression, les prévisions, les alerts, etc...

    Ici mon but était d'avoir un aperçu de la température extérieur dans les mails automatique que je reçois, et de peut-être aussi pouvoir adapter la gestion de mon chauffage en fonction... genre s'il fait plus de 8° je ne déclenche la chaudière que si un radiateur est ouvert à 30%, et s'il fait moins de 8° dehors, alors je déclenche plus tôt, genre à 20%

    Attention que pour utiliser leur API, il faut d'abord s'inscrire sur le site, puis souscrire un a plan d'utilisation pour recevoir une clé. Le plan de base est gratuit et donne droit a 500 demandes par jour, ce qui est largement suffisant.

    https://www.wunderground.com/weather/api/d/docs?d=data/index&MR=1

    Bon amusement ;)

    Code:
    string stdout;
    string stderr;
    string sWrk;
    string sHumid="";
    string sTemp="";
    integer iPos;
    
    ! Va rechercher les conditions météo locale en fonction de l'adresse ip
    ! Remplacer les XXXXXXXXXXXXX par votre clé d'utilisation !!!
    string url = "http://api.wunderground.com/api/XXXXXXXXXXXXXX/conditions/lang:FR/q/autoip.json";
    
    ! Récupération de la météo et sauvegarde dans le fichier http_result.txt
    
    system.Exec ("wget -q -O /dev/http_result.txt " # url, &stdout, &stderr);
    
    ! Lecture du fichier http_result.txt
    system.Exec ("cat /dev/http_result.txt", &stdout, &stderr);
    
    ! Recherche du taux d'humidité
    iPos = stdout.Find('"relative_humidity":"');
    if (iPos > -1)
    {
        sWrk = stdout.Substr((iPos + 21), 4);
        iPos = sWrk.Find('%');
        sHumid = sWrk.Substr(0, iPos);
    }
    else { sHumid = "n/a"; }
    
    ! Recherche de la température
    iPos = stdout.Find('"temp_c":');
    if (iPos > -1)
    {
        sWrk = stdout.Substr((iPos + 9), 4);
        iPos = sWrk.Find(',');
        sTemp = sWrk.Substr(0, iPos);
    }
    else { sTemp = "n/a"; }
    
    ! Sauvegarde des infos dans des variables
    dom.GetObject("Out Temp").State(sTemp);
    dom.GetObject("Out Humidity").State(sHumid);
    dom.GetObject("Out Refresh").State((system.Date("%d/%m %H:%M").ToString()));
    
    ! Suppression du fichier http_result.txt
    system.Exec ("rm -f /dev/http_result.txt", &stdout, &stderr);
     
    xachopin , 24 Mars 2017
    CJP et ironglove aiment ça.
  7. CJP

    CJP 66 ans, Bruxelles

    Bonjour à tous,


    Pour ceux que cela intéresse,
    j'ai réécris un getparam.tcl qui permet d'avoir les résultats MASTER ou VALUES ou LINK ou 1 seul paramètre de ceux-ci, soit dans stdout ou dans une « predefined system variable ».


    Dans stdout:
    system.Exec("tclsh /usr/local/getparam.tcl "#address#" MASTER WEEK_PROGRAM_POINTER", &stdout, &stderr);


    Dans la variable ABCD:
    system.Exec("tclsh /usr/local/getparam.tcl "#address#" MASTER WEEK_PROGRAM_POINTER ABCD", &stdout, &stderr);

    Code:
    #!/bin/tclsh
    load tclrega.so
    #
    # Show/Save one or all parameters of getParamset
    # =================================================
    # Written by CJP.(03/2017)
    #
    # tclsh getparam <address> <MASTER|VALUES|LINK> [ParamName] [SysVariable]    [...] are optional
    # If ParamNane is ""/invalid/not found, you receive the complete PARAMLIST.
    # If PARAMLIST is empty, you receive N/A.
    # Examples:
    # tclsh /usr/local/getparam.tcl MEQ0123456 MASTER P3_ENDTIME_SUNDAY_1
    ###    Display the P3_ENDTIME_SUNDAY_1 value    ###
    # tclsh /usr/local/getparam.tcl MEQ0123456:1 VALUES TEMPERATURE My_System_Variable_Name
    ###    Put the TEMPERATURE value in My_System_Variable_Name    ###
    # tclsh /usr/local/getparam.tcl MEQ0123456:3 LINK TEMPERATUR_WINDOW_OPEN_VALUE
    ###    Display the TEMPERATUR_WINDOW_OPEN_VALUE value    ###
    # tclsh /usr/local/getparam.tcl MEQ0123456 MASTER "" Output
    ###    Put the whole MASTER listing in System_Variable Output    ###
    #
    # The result is displayed(stdout) as a string.
    # If SysVariable is defined in the command AND in the WEBUI, the result goes in.
    #
    # This version is for Radio equipments. For Wired, the port 2001 needs to be changed to 2000.
    #
    load tclrpc.so
    #
    set PARAMLIST [xmlrpc http://127.0.0.1:2001/ getParamset [list string [lindex $argv 0]] [list string [lindex $argv 1]] ]
    set Value $PARAMLIST
    set searchstr [list [lindex $argv 2]]
    set index [lsearch -exact $Value $searchstr]
    if { $index >= 0 } {
       set Value [lindex $PARAMLIST [expr $index+1]]
    }
    if { $Value == "" } { set Value "N/A" }
    set SysVarName [list [lindex $argv 3]]
    if { $SysVarName != "{}"} {
       set command "string SysVariable=\"$SysVarName\"; string value=\"$Value\";"
       append command {
          object o_SysVar=dom.GetObject(SysVariable);
          if(o_SysVar) {   
             if(o_SysVar.Variable() != value) {
                o_SysVar.Variable(value);
                o_SysVar.State(value);
             }
          }
       }
       array set result [rega_script $command]
       if { $result(o_SysVar) != $SysVarName } {
          puts "???\tIS $SysVarName DEFINED IN THE WEBUI\t???"
          parray result
       }
    } else {
       puts $Value
    }
    
    Bon Homematic amusement !
     
    CJP , 31 Mars 2017
  8. CJP

    CJP 66 ans, Bruxelles

    xachopin, dans ton script pour « downloader » les conditions météorologiques sur wunderground.com, tu fais 3 appels à « System.Exec ».

    Or il est conseillé partout sur les forums de n’en faire que le minimum requis car cela peut planter ou bloquer la CCU surtout si plusieurs appels sont fait dans le même script.


    Je te conseille donc de travailler directement sur un « string » de résultat et non sur des fichiers, comme par exemple ceci :
    Code:
    string sResult="";
    string stderr;
    string sUrl = "http://api.wunderground.com/api/---KEY---KEY---/conditions/lang:FR/q/---QUERY---.json";
    string sCmmd = "/bin/sh -c 'wget -q -O - "#sUrl#"|sed -r s/\\"//g'";
    system.Exec (sCmmd, &sResult, &stderr);
    WriteLine("Hello world!");
    WriteLine(sResult);
    WriteLine("Hello world!");
    
    Je trouve que les « " » sont bien embêtant dans ce fichier donc je les ai supprimé par un « pipe » dans « sed ». (Attention 2 escapes \\ devant le " du substitude ).

    Je suis aussi passé par « /bin/sh –c » car le « System.Exec » ne permet qu’une seule commande ! donc pas de possibilité de faire un « pipe ».

    J’avais aussi fait un script pour wunderground.com mais à partir du résultat en XML.

    J’y ai travaillé avec une boucle pour pouvoir en extraire beaucoup de données automatiquement.

    Je le publie au cas où cela intéresse quelqu’un.
    Code:
    string SearchList = "observation_epoch;relative_humidity;temp_c;pressure_mb;weather";
    string SysVarList = "ObsTime;HumidExt;TempExt;PressionExt;Temps";   ! System Variables MUST exist !
    integer iItems=5;
    string sUrl = "http://api.wunderground.com/api/---KEY---KEY---/conditions/lang:EN/q/pws:ABCDEFGHIJ.xml";
    !!!   No modifications needed below this line   !!!
    object  svObj;
    string sSysVar;
    integer iNdx=0;
    while (iNdx < iItems) {
       sSysVar = SysVarList.StrValueByIndex(";", iNdx);
       svObj  = dom.GetObject(sSysVar);
    ! TEST IF System Variable exist !
       if (!svObj) { WriteLine("SYSTEM VARIABLE '" # sSysVar # "' DOESN'T EXIST !"); quit; }
       iNdx = iNdx + 1;
    }
    string sResult="";
    string stderr;
    string sSrch;
    string sData;
    integer iPos1;
    integer iLgth1;
    integer iLgth2;
    ! Récupération XML de la météo dans sResult
    system.Exec ("wget -q -O - " # sUrl, &sResult, &stderr);
    ! WriteLine(sResult); quit;
    iNdx=0;
    while (iNdx < iItems) {
       sSrch=SearchList.StrValueByIndex(";", iNdx);
       iPos1 = sResult.Find("<"#sSrch#">");
       iLgth1= 2+sSrch.Length();
       if (iPos1 > -1) {
          iPos1 = iPos1+iLgth1;
          iLgth2 = sResult.Find("</"#sSrch#">") - iPos1;
          if (iLgth2 > 0) {
             sData = sResult.Substr(iPos1, iLgth2);
          } else {
             sData = "N/A";
          }
       } else {
         sData = "NotFound";
       }
       sSysVar = SysVarList.StrValueByIndex(";", iNdx);
       if (sSysVar == "ObsTime") { sData = sData.ToInteger().ToTime().Format("%d/%m/%Y %H:%M:%S"); }
    ! WriteLine(sSysVar #": "#sData);
       dom.GetObject(sSysVar).State(sData);
       iNdx = iNdx + 1;
    }
    
    Bon amusement, CJP.
     
    CJP , 12 Avril 2017
  9. CJP

    CJP 66 ans, Bruxelles

    Salut à tous, j’espère que vous passez un agréable WE Pascal !

    Pour ma part, j’ai retravaillé tous mes scripts et j’ai découvert que je faisais parfois plusieurs appel à system.Exec» dans un même script pour configurer mes thermostats.

    Comment configurer plusieurs « devices » en changeant plusieurs paramètres sans faire appel à plusieurs commandes « system.Exec» ? (Pourquoi ?, Voir discussion avec xachopin ci-dessus).

    Tout simplement en passant à « tclsh /usr/local/setparam.tcl » une liste de « Devices » et une liste de paramètres à appliquer sur ces différents « Devices ».

    J’ai donc écrit un nouveau setparam.tcl (setallparam.tcl) que je vous présente ci-dessous :

    Code:
    #!/bin/tclsh
    #
    # Calls for multiple putParamset (for example via system.Exec)
    # ============================================================
    # Written by CJP. (04/2017)
    #    !!!   ALL Settings are applied to ALL addresses   !!!   Spaces or commas are items separators BUT List MUST be Quoted if "Space" is used.
    # tclsh setallparam <address>,<address>,... <item>,<datatype>,<value>,<item>,<datatype>,<value>,<item>,<datatype>,<value>,...
    # --- commas separeted list OR space separeted list & surrounded quotes---
    # tclsh setallparam '<address> <address> ...' '<item> <datatype> <value> <item> <datatype> <value> <item> <datatype> <value> ...'
    # --- OR MIXED, one list with commas, other list with space & surrounded quotes ---
    # tclsh setallparam '<address> <address> ...' <item>,<datatype>,<value>,<item>,<datatype>,<value>,<item>,<datatype>,<value>,...
    # Example:
    # tclsh /usr/local/setallparam.tcl MEQ1234567,NEQ1235678,MEQ1235789 'BUTTON_LOCK boolean 0 WEEK_PROGRAM_POINTER int 0 TEMPERATURE_SATURDAY_2 string 21.00'
    #
    # This version is for Radio equipments. For Wired, the port 2001 needs to be changed to 2000 .
    #
    load tclrpc.so
    if {[string first "," [lindex $argv 0]] >= 0} {set Devices [split [lindex $argv 0] ,] } else {set Devices [split [lindex $argv 0] ]}
    if {[llength $Devices] < 1} { error "ERROR: Device List Empty"} else {set Devmax [llength $Devices]}
    if {[string first "," [lindex $argv 1]] >= 0} {set Params [split [lindex $argv 1] ,] } else {set Params [split [lindex $argv 1] ]}
    if {[llength $Params] < 1} { error "ERROR: Device &/ Param List Empties"} else {set Parmax [llength $Params]}
    if { $Parmax != [expr $Parmax/3 *3] } { error "ERROR: Number of parameters = $Parmax, ! Must be a multiple of 3 !" }
    set Parndx 0
    set Paramlist ""
    while {$Parndx < $Parmax} {
       append Paramlist "{"
       if {[lindex $Params $Parndx] == ""} {error "ERROR: Parameter [expr $Parndx+1] Empty"} else {append Paramlist [lindex $Params $Parndx]}
       append Paramlist " {"
       incr Parndx
       if {[lindex $Params $Parndx] == ""} {error "ERROR: Parameter [expr $Parndx+1] Empty"} else {append Paramlist [lindex $Params $Parndx]}
       append Paramlist " "
       incr Parndx
       if {[lindex $Params $Parndx] == ""} {error "ERROR: Parameter [expr $Parndx+1] Empty"} else {append Paramlist [lindex $Params $Parndx]}
       append Paramlist "}} "
       incr Parndx
    }
    for {set Devndx 0} {$Devndx < $Devmax} {incr Devndx} {
    #   puts "[lindex $Devices $Devndx] $Paramlist"
       xmlrpc http://127.0.0.1:2001/ putParamset [lindex $Devices $Devndx] [list string "MASTER"] [list struct $Paramlist]
       after 250
    }
    
    Faites bien attention à la syntaxe, les items des listes peuvent être séparés par des espaces ou des virgules, MAIS si vous employez des espaces alors la liste DOIT être entre « Quotes ».

    Ceci permet dans un seul appel à « system.Exec » de modifier plusieurs « devices » avec plusieurs paramètres. Fonctionne aussi, bien sur, avec 1 « Device » et X paramètres et X« Device » et 1 paramètre.

    Si vous modifiez beaucoup de paramètres, la commande peut durer quelques secondes pour chaque « Devices » surtout que le tcl script attend ¼ de seconde entre chaque « Devices ».


    Voici quelques exemples :
    string stdout;
    string stderr;
    system.Exec("tclsh /usr/local/setallparam.tcl LEQ1842999,LEQ1222999,NEQ1567812 'BUTTON_LOCK boolean 1 WEEK_PROGRAM_POINTER integer 1'", &stdout, &stderr);
    OU
    ...
    string sParam="BUTTON_LOCK,boolean,1,WEEK_PROGRAM_POINTER,integer,1";
    system.Exec("tclsh /usr/local/setallparam.tcl LEQ1842999,LEQ1222999,NEQ1567812 "+sParam, &stdout, &stderr);
    OU
    ...
    string sParam="BUTTON_LOCK boolean 0 WEEK_PROGRAM_POINTER integer 0";
    string sDevices="LEQ1842999 LEQ1222999 NEQ1567812";
    system.Exec("tclsh /usr/local/setallparam.tcl '"+sDevices+"' '"+sParam+"'", &stdout, &stderr);
    OU
    ...
    string sParam="BUTTON_LOCK,boolean,1,WEEK_PROGRAM_POINTER,integer,1";
    string sDevices="LEQ1842999,LEQ1222999,NEQ1567812";
    system.Exec("tclsh /usr/local/setallparam.tcl "+sDevices+" "+sParam, &stdout, &stderr);
    OU
    system.Exec("tclsh /usr/local/setallparam.tcl LEQ1842999,LEQ1222999,NEQ1567812 BUTTON_LOCK,boolean,1,WEEK_PROGRAM_POINTER,integer,1", &stdout, &stderr);

    Les 2 dernières solutions avec les virgules est, bien entendu, la plus simple.

    Bon amusement, CJP.
     
    CJP , 16 Avril 2017
  10. sylo

    sylo Brabant Wallon

    Bonjour,

    La majorité des produits Homematic est maintenant intégrée dans le projet "Home Assistant" https://home-assistant.io/

    De bon augure pour le futur de nos installations.
     
    sylo , 17 Juillet 2017
Chargement...

Sujet similaires

Vous pouvez aussi lancer une recherche sur : Gestion chauffage Homematic

Similar Threads - Gestion chauffage Homematic
  1. devilhacker

    identification type de chauffage et améliorations

    devilhacker, +1 (LED3), 22 Novembre 2017, à 22:32
    1
    Affichages:
    83
    LED3
    23 Novembre 2017, à 10:33
  2. desmo

    raccordement thermostat sur gestion boiler externe

    desmo, +1 (desmo), 22 Novembre 2017, à 20:08
    1
    Affichages:
    58
    desmo
    22 Novembre 2017, à 20:24
  3. Aqualung64

    Problème gestion chauffage

    Aqualung64, +4 (kenny82), 3 Mai 2017
    4
    Affichages:
    171
    kenny82
    3 Mai 2017
  4. Sylar

    Gestion Chauffage Thermostat et vn thermostatique

    Sylar, +19 (Billmarcel), 22 Janvier 2017
    19
    Affichages:
    435
    Billmarcel
    26 Janvier 2017
  5. kc32323
    2
    Affichages:
    515
    alex1978
    15 Novembre 2015
  6. sylo

    Gestion de ma chaudière DeDietrich

    sylo, +1 (sylo), 4 Décembre 2013
    1
    Affichages:
    761
    sylo
    6 Février 2015
  7. olaxi

    Gestion du chauffage central

    olaxi, +7 (bubu007), 4 Décembre 2012
    7
    Affichages:
    1 306
    bubu007
    4 Décembre 2012