Comme annoncé, ce forum est passé en lecture seule au 1er janvier 2020. Désormais nous vous invitons à vous rendre sur notre nouvelle page communauté :
Image

A très bientôt !

Plugin contrôle pompe à chaleur piscine Hayward

Avatar de l’utilisateur
Sattaz
Timide
Messages : 191
Inscription : 22 nov. 2015, 20:34

Plugin contrôle pompe à chaleur piscine Hayward

Message par Sattaz » 16 mai 2018, 23:10

Bonjour à tous,

Je souhaiterai pouvoir visualiser les données de ma pompe à chaleur Hayward depuis Jeedom.
J'ai des connaissances en programmation .NET mais ça s'arrête là.

J'ai programmé une petite application en .NET qui se connecte au cloud de Hayward et récupère les données de la pompe à chaleur.
Il serait tout à fait possible de la paramétrer aussi car le cloud le permet ... mais dans l'exemple ci-dessous je n'ai pris que quelques informations basiques pour démontrer le fonctionnement.

Bref, est-ce que quelqu'un pourrait m'aider à développer un petit plugin Jeedom qui ferait la même chose que ces quelques lignes de code?
(Je ne donne que les morceaux de codes essentiels ...)


1) un timer qui va se connecter au cloud Hayward toutes les minutes.

Code : Tout sélectionner

    Private Sub TimerCheck_Tick(sender As System.Object, e As System.EventArgs) Handles TimerCheck.Tick
        TimerCheck.Interval = 60000
        Try
            LabelTime.Text = "Rafraichissement ..."
            brwsConnect = New WebBrowser
            brwsConnect.ScriptErrorsSuppressed = True
            brwsConnect.Navigate("http://smartemp.hayward.fr:9000", False)
        Catch ex As Exception
            LabelTime.Text = "Erreur: " & ex.Message
        End Try
    End Sub
2) on récupère le code HTML et on l'analyze.
- si on est déjà logué alors on récupères les valeurs depuis les éléments HTML.
- sinon on se connecte au cloud avec le code barre (user) et le mot de passe de la PAC.

Code : Tout sélectionner

    Private Sub brwsConnect_DocumentCompleted(ByVal sender As System.Object, ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles brwsConnect.DocumentCompleted
        Try
            Dim MyHTML As String = brwsConnect.DocumentText

            If InStr(UCase(MyHTML), "NAVIGATION CANCELED") > 0 Then
                LabelTime.Text = "Erreur de connexion ..."
                Exit Sub
            End If

            Temp_Current = "..."
            Temp_Target = "..."
            Temp_Inlet = "..."
            Temp_Outlet = "..."
            Dim outputs As HtmlElementCollection = brwsConnect.Document.GetElementsByTagName("span")
            For Each pElem As HtmlElement In outputs
                If (pElem.GetAttribute("id") = "lbwd") Then
                    Temp_Target = pElem.GetAttribute("innerText")
                End If
                If (pElem.GetAttribute("id") = "lbwd1") Then
                    Temp_Current = pElem.GetAttribute("innerText")
                End If
                If (pElem.GetAttribute("id") = "lbwd2") Then
                    Temp_Outlet = pElem.GetAttribute("innerText")
                End If
                If (pElem.GetAttribute("id") = "lbwd3") Then
                    Temp_Inlet = pElem.GetAttribute("innerText")
                End If
            Next
            If Temp_Current <> "..." And Temp_Target <> "..." And Temp_Inlet <> "..." And Temp_Outlet <> "..." And Table_Data.Rows.Count = 4 Then
                Table_Data.Rows(0)("Value") = Temp_Current
                Table_Data.Rows(1)("Value") = Temp_Target
                Table_Data.Rows(2)("Value") = Temp_Inlet
                Table_Data.Rows(3)("Value") = Temp_Outlet

                Do While IsNumeric(Temp_Current) = False And Temp_Current.Length > 1
                    Temp_Current = Temp_Current.Substring(0, Temp_Current.Length - 1)
                Loop
                Thermometer_CurrentTarget.Value = Temp_Current

                LabelTime.Text = Now
                brwsConnect = Nothing
                Exit Sub
            End If

            Dim inputs As HtmlElementCollection = brwsConnect.Document.GetElementsByTagName("input")
            For Each pElem As HtmlElement In inputs
                If (pElem.GetAttribute("name") = "barCode") Then
                    pElem.SetAttribute("value", Trim(TextBoxCodeBarre.Text))
                End If
                If (pElem.GetAttribute("name") = "pwd") Then
                    pElem.SetAttribute("value", Trim(TextBoxMotDePasse.Text))
                End If
                If (pElem.GetAttribute("name") = "ImageButton1") Then
                    pElem.InvokeMember("click")
                    Exit Sub
                End If
            Next

            LabelTime.Text = "Erreur Reconnaissance"

        Catch ex As Exception
            LabelTime.Text = "Erreur: " & ex.Message
        End Try
    End Sub
Hayward.jpg
Hayward.jpg (38.32 Kio) Consulté 1718 fois
Merci d'avance pour l'aide que vous pourriez m'apporter.

Sébastien
Sébastien

yostone
Timide
Messages : 106
Inscription : 04 févr. 2019, 07:15

Re: Plugin contrôle pompe à chaleur piscine Hayward

Message par yostone » 07 févr. 2019, 07:36

Bonjour, je vais regarder aussi pour pouvoir récupérer les infos sur Jeedom.

Vous avez trouvé la solution ? avec un script ça doit marcher.

yostone
Timide
Messages : 106
Inscription : 04 févr. 2019, 07:15

Re: Plugin contrôle pompe à chaleur piscine Hayward

Message par yostone » 07 févr. 2019, 09:15

Voici l'info de la page, mais je ne sais pas comment l'extraire en script.

Comment je dois faire ? Je dois faire une requête qui ouvre toutes les div depuis le main ?

Code : Tout sélectionner


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Hayward--Remote</title>
    <link rel="Stylesheet" type="text/css" href='/assets/css/main.css' />
    <!--[if lte IE 6]>
    <script src='/assets/javascript/DD_belatedPNG_0.0.8a.js' type="text/javascript"></script>
    <script type="text/javascript">
        DD_belatedPNG.fix('.mainIn background,.liebiao background,.yxms background,.sdwd background,.kg background,.xtsz background');
    </script>
    <![endif]-->
    <link rel="stylesheet" href='/assets/css/jquery.checkbox.css' />
    <script type="text/javascript" src='/assets/javascript/jquery-1.4.1.js'></script>
    <script type="text/javascript" src='/assets/javascript/jquery.checkbox.min.js'></script>
 </head>
<body>
<div class="inner-frame">
    &nbsp;
</div>
<div class="main">
    <div style="float:right"><!--<a href="/lang?c=zh">中文</a>/--><a href="/lang?c=en">English</a>/<a href="/lang?c=fr">Français</a>/<a href="/lang?c=es">Spanish</a>/<a href="/lang?c=de">German</a>/<a href="/lang?c=it">Italiano</a>/<a href="/lang?c=pt">Português</a>/<a href="/lang?c=nl">Dutch</a></div>
    <div class="topTitle">
        <img src="/assets/images/logo.png" alt=""/>
    </div>
    <div id="mainIn" class="mainIn">
            <div class="mid">
                <div class="content">
                    <div class="liebiao">
                        <input type="image" name="ib6" id="ib6" class="lb3" align="right" title="Quit"
                        onclick="window.location='/logout'"
                        src='/assets/images/main/29.png' style="border-width:0px;"/>
                        <input type="image" name="ib4" id="ib4" class="lb3" align="right" onclick="document.getElementById('mainif').src='/internal/index?'+Math.random()"  src='/assets/images/main/7.jpg' style="border-width:0px;" />
                        <input type="image" name="ib1" id="ib1" class="lb3" align="right" onclick="document.getElementById('mainif').src='/internal/more?'+Math.random()" src='/assets/images/main/6.jpg' style="border-width:0px;" />
                        <input type="image" name="ib3" id="ib3" class="lb3" align="right" onclick="document.getElementById('mainif').src='/internal/timer?'+Math.random()" src='/assets/images/main/5.jpg' style="border-width:0px;" />
                        
                        <input type="image" name="ib2" id="ib2" class="lb3" align="right" src='/assets/images/main/4.jpg' style="border-width:0px;" />
                        
                    </div>
                    <div class="p1">
                        <span id="jq" onclick="document.getElementById(&#39;mainif&#39;).src=&#39;/internal/name&#39;;">HeatPump</span>
                    </div>
                </div>
                <div class="mainL">
                    <div class="wdzz">
                        <img id="Imrsl" alt="" src="/assets/images/main/wd/10.png" style="border-width:0px;">
                        <span id="lbwd1" class="lbwd">0.0℃</span>
                    </div>
                    <div class="jqcz">
                        <div class="pc">
                            <div class="z1"><span>Mode</span></div>
                            <div class="kg">
                                <p>
                                    <span id="lbms" class="z2" onclick="document.getElementById('mainif').src='/internal/mode?'+Math.random()">Heating</span>
                                    <input type="image" name="ibyxms1" id="ibyxms1" class="tab" align="right"
                                           src='/assets/images/main/T-jiantou.png' style="border-width:0px;" onclick="document.getElementById('mainif').src='/internal/mode?'+Math.random()">
                                </p>
                            </div>
                        </div>
                        <div class="pc">
                            <div class="z1"><span>Ambient</span></div>
                            <div class="kg1">
                                <p>
                                    <span id="lbhjwd">17.5℃</span>
                                </p>
                            </div>
                        </div>
                        <div class="pc">
                            <div class="z1"><span>Target</span></div>
                            <div class="kg">
                                <p>
                                <span id="lbwd" class="z2" onclick="document.getElementById('mainif').src='/internal/target?'+Math.random()">8.0℃</span>
                                    <input type="image" name="ibTarget" id="ibTarget" class="tab" align="right" src='/assets/images/main/T-jiantou.png' onclick="document.getElementById('mainif').src='/internal/target?'+Math.random()" style="border-width:0px;" />
                                </p>
                            </div>
                        </div>
                        <div class="pc">
                            <div class="z1"><span>Inlet Water</span></div>
                            <div class="kg1">
                                <p>
                                    <span id="lbwd3">0.0℃</span>
                                </p>
                            </div>
                        </div>
                        <div class="pc">
                            <div class="z1"><span>Outlet Water</span></div>
                            <div class="kg1">
                                <p>
                                    <span id="lbwd2">1.0℃</span>
                                </p>
                            </div>
                        </div>
                        <div class="pc">
                            <div class="z1"><span>Timer One</span></div>
                            <div class="kg">
                                <p>
                                    <span id="lbTurntime" class="z2" onclick="document.getElementById('mainif').src='/internal/timer?'+'t=1&r='+Math.random()">On</span>
                                    <input type="image" name="ibtiming1" onclick="document.getElementById('mainif').src='/internal/timer?'+'t=1&r='+Math.random()" id="ibtiming1" class="tab" align="right" src='/assets/images/main/T-jiantou.png' style="border-width:0px;" />
                                </p>
                            </div>
                        </div>
                        <div class="pc">
                            <div class="z1"><span>Timer Two</span></div>
                            <div class="kg">
                                <p>
                                    <span id="lbTurntime1" class="z2" onclick="document.getElementById('mainif').src='/internal/timer?'+'t=2&r='+Math.random()">Off</span>
                                    <input type="image" name="ibtiming2" onclick="document.getElementById('mainif').src='/internal/timer?'+'t=2&r='+Math.random()" id="ibtiming2" class="tab" align="right" src='/assets/images/main/T-jiantou.png' style="border-width:0px;" />
                                </p>
                            </div>
                        </div>
                        <div class="pc">
                            <div class="z1"><span style="color:#000000;">Power</span></div>
                            <input id="isPowerSwitch" type="checkbox" name="isPowerSwitch" checked="checked" />

                        </div>
                        <div class="pc">
                            <div class="z1"><span style="color:#000000;">Authorization</span></div>
                            <input id="hasRemoteControl" type="checkbox" name="hasRemoteControl" checked="checked" />

                        </div>
                    </div>
                </div>
                <div class="mainR">
                    <iframe name="main" id="mainif" frameborder="0" width="100%" height="100%" src="/internal/index" allowTransparency="true" runat="server" ></iframe>
                </div>
            </div>
    </div>
</div>
<script type="text/javascript">
    $(document).ready(function () {
        $('input:checkbox:not([safari])').checkbox();
        $('input[safari]:checkbox').checkbox({ cls: 'jquery-safari-checkbox' });
        $('input:radio').checkbox();

        $('#isPowerSwitch').click(function () {
            $.post( "/power", { power: this.checked }, function( data ) {
                window.location.reload();
            }, "json");
            });

        $('#hasRemoteControl').click(function () {
            $.post( "/control", { control: this.checked }, function( data ) {
            window.location.reload();
            }, "json");
            });
        });

    displayForm = function (elementId) {
    var content = [];
    $('#' + elementId + ' input').each(function () {
    var el = $(this);
    if ((el.attr('type').toLowerCase() == 'radio')) {
    if (this.checked)
    content.push([
    '"', el.attr('name'), '": ',
    'value="', (this.value), '"',
    (this.disabled ? ', disabled' : '')
    ].join(''));
    }
    else
    content.push([
    '"', el.attr('name'), '": ',
    (this.checked ? 'checked' : 'not checked'),
    (this.disabled ? ', disabled' : '')
    ].join(''));
    });
    alert(content.join('\n'));
    }

    changeStyle = function (skin) {
    jQuery('.main :checkbox').checkbox((skin ? { cls: skin} : {}));
    }

</script>

</body>
</html>

iopaza
Timide
Messages : 196
Inscription : 11 avr. 2015, 09:56

Re: Plugin contrôle pompe à chaleur piscine Hayward

Message par iopaza » 07 févr. 2019, 18:43

Bravo. J’ai également ce module pour ma pompe à chaleur
Si un plug-in sort je suis preneur
Encore bravo
Jeedom mini+ et Rpi2
-RFXCOM --> 4 modules/-ZWAVE --> 15 modules/-KNX --> 3 modules/-LOXONE et EXTENSION/-IPX V4 et Extension, Fil pilote/- HUE --> 2 modules/-MILIGHT et ARILUX/-ORVIBO
-LEGRAND CPL (non utilisé)

yostone
Timide
Messages : 106
Inscription : 04 févr. 2019, 07:15

Re: Plugin contrôle pompe à chaleur piscine Hayward

Message par yostone » 06 mars 2019, 20:42

Bonjour,
le plugin est sorti sur le market viewtopic.php?f=144&t=43769

Répondre

Revenir vers « Suggestions de Plugins »

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 1 invité