Aller au contenu

Messages recommandés

Posté(e)

Bonjour,

 

Je souhaite créer une scène automatique qui ping régulièrement un de mes serveurs et en cas de non réponse le démarre (WOL).

J'ai essayé d'utiliser le script que j'ai trouvé sur internet, mais il faut cliquer manuellement sur un virtual device.

 

En somme, j'ai souvent des coupure de courant. J'aimerais que quand la HC2 redémarre, il test si mes serveurs sont en marche, et qu'il les relance le cas échéant.

 

Merci de votre aide

Posté(e)

 Bonjour,

Pour appuyer automatiquement sur le bouton d'un VD, tu peux le faire avec GEA.

GEA.add(true, 30, "", {"VirtualDevice", 535, 1},{"Time", "00:00", "00:01"}})

où 535 est l'Id du VD et 1, le numéro du bouton (à adapter à ton VD). Tu peux répéter la ligne avec des horaires différents pour appuyer plusieurs fois par jour.

 

 

Posté(e)

Bonjour et merci de la réponse.

 

N'y a t'il pas un moyen plus simple d'écrire une scène qui effectuerait les actions suivantes :

- Pinger mon serveur toutes les x minutes

- Si faux wol de mon serveur

Posté(e)

Ca ne sera jamais du vrai "ping", ce n'est pas possible avec le LUA de la HC2.

En te basant sur le VD Network Monitor, tu peux faire un faux ping, qui consiste à se connecter sur un port ouvert du serveur, et en déduire son fonctionnement. Encore faut-il que tu serveur aie au moins un port ouvert (ce qui est normalement le cas pour un serveur....)

 

Ensuite, pour réveiller le serveur en WOL, tu peux :

- utiliser le plugin Fibaro officiel

- utiliser les quelques lignes de LUA partagées par Krikroff sur le forum (qui est à mon avis une meilleure solution, cela permet d'avoir tout le code dans une seule et même scène, et de ne pas dépendre d'un plugin extérieur qui est susceptible de changer d'ID, et de remplir ton interface)

Posté(e)

Nickel

 

Ca fonctionne parfaitement.

 

Encore une petite question, j'essai de mettre des retours chariots dans une variable de type string, mais rien n'y fait.

 

J'ai essayé cela : 

logOut = logOut .. "\r\nSearch on the local network, try #" .. retry .. " please wait...";
fibaro:debug(logOut)

 

Posté(e)

c'est du html, qui  n'interprète pas les retours chariots.

Essaye plutôt avec des balises <br> ou <br/>

 

mais je te le déconseille, la fenêtre de debug emploie un CSS particulier pour afficher les lignes, si tu mets du textes sur plusieurs lignes ça va te pourrir tout ton affichage.

 

Plutôt que de sauter des lignes pour la mise en forme, je te conseille l'emploi de couleurs <font color="red">blah blah</font>

Posté(e)
c'est du html, qui  n'interprète pas les retours chariots.
Essaye plutôt avec des balises
ou

 
mais je te le déconseille, la fenêtre de debug emploie un CSS particulier pour afficher les lignes, si tu mets du textes sur plusieurs lignes ça va te pourrir tout ton affichage.
 
Plutôt que de sauter des lignes pour la mise en forme, je te conseille l'emploi de couleurs blah blah





Envoyé de mon iPhone en utilisant Tapatalk
Posté(e)
En fait le but est d'afficher le résultat dans un champ étiquette du virtuel device.
Il interprète mal les balise
ou



Ça fonctionne nickel avec


Merci pour l'aide
Posté(e)

Le code du bouton du VD : 


--[[
%% properties
%% globals
--]]

 

-- convert MAC adress, every 2 Chars (7-bit ASCII), to one Byte Char (8-bits) 
local function convertMacAddress(address) 
    local s = string.gsub(address, ":", ""); 
    local x = "";  -- will contain converted MAC 
    for i=1, 12, 2 do 
        x = x .. string.char(tonumber(string.sub(s, i, i+1), 16)); 
    end
    return x; 
end 

-- IP adress
local _ipAddress = "192.168.1.x";
-- MAC adress 
local _macAddress = convertMacAddress("xx:xx:xx:xx:xx:xx"); 
-- Create Magic Packet 6 x FF 
local _magicPacket = string.char(0xff, 0xff, 0xff, 0xff, 0xff, 0xff); 
-- Broadcast Address 
local _broadcastAddress = "255.255.255.255"; 
-- Default port used 
local _wakeOnLanPort = 9;
local _pingPort = 22;

-- Process result (displayed into a label of VD)

local logOut = ""

-- recursive function to ping device
local function _ping(retry)
    retry = retry or 0;
    --open the socket
    local tcpSocket = Net.FTcpSocket(_ipAddress, _pingPort);
    --set the read timeout 
    tcpSocket:setReadTimeout(250);
    --notify user
    logOut = logOut .. "<br/>Search on the local network, try #" .. retry .. " please wait...";
      --send packet
    local bytes, errorCode = tcpSocket:write("ping");
    --check for error
    if errorCode == 0 then
        tcpSocket:disconnect();
        tcpSocket = nil;
        return true;
    else
        if retry < 4 then
            logOut = logOut .. "<br/>Retry process, please wait...";
            fibaro:sleep(1000);
            return _ping(retry + 1);
        end
        tcpSocket:disconnect();
        tcpSocket = nil;
        return false;
    end
end

-- function to wake on computer
local function _wakeonlan()
    for i = 1, 16 do
        _magicPacket = _magicPacket .. _macAddress;
    end
    logOut = logOut .. "<br/>Magic packet successfully created";
    local socket = Net.FUdpSocket();
    socket:setBroadcast(true);
    local bytes, errorCode = socket:write(_magicPacket, _broadcastAddress, _wakeOnLanPort);
    -- clean up memory
    soket = nil;
    --check for error
    if errorCode == 0 then
        logOut = logOut .. "<br/>Magic packet sent";
    else
        logOut = logOut .. "<br/>Magic paquet failed";
    end
    return;
end

 

-- Start process

logOut = "Start process";
fibaro:call(fibaro:getSelfId(), "setProperty", "ui.result.value",'');


fibaro:sleep(750); 

--ping device, secure with pcall to catch errors. 
local f, result = pcall(_ping); 

if (f) then 
    if (result == true) then
        logOut = logOut .. "<br/>Computer has been found, is awake and listening.";
        fibaro:sleep(750);
    else

        --Send push notification 

        fibaro:call(48, "sendDefinedPushNotification", "38");
        logOut = logOut .. "<br/>Computer was not found !";
        fibaro:sleep(750);
        _wakeonlan();
        fibaro:sleep(750);
    end 
else 
    logOut = logOut .. "<br/>Error: " .. result;
end

-- Display result on label of VD
fibaro:call(fibaro:getSelfId(), "setProperty", "ui.result.value",logOut);
fibaro:debug(logOut)

 

J'ai aussi mis un champs étiquette pour afficher le résultat.

Il faut bien sur adapter l'adresse IP et l'adresse MAC.

Je lance à partir d'une scène auto qui vérifie que mon serveur est bien en marche.

  • Upvote 1
Posté(e)

Bonjour,

 

Encore une petite question concernant les périphériques virtuels :

Je voudrais faire apparaitre le module virtuel comme une ampoule (ON/OFF)

J'ai bien mis deux boutons dans mon VD

J'appelle le bouton ON par une scene toutes les 10mns (pour vérifier que l'ordi est bien en fonction)

J'essai d'afficher le status (pour l'appli mobile) : 


if (result == true) then
        fibaro:call(fibaro:getSelfId(),'turnOn');
else
        fibaro:call(fibaro:getSelfId(),"pressButton","2"); --Appel du button off pour le changement d'icone du VD
        fibaro:call(fibaro:getSelfId(),'turnOff');
end 

 

Ca ne change rien dans l'appli mobile

 

Posté(e)

C'est vrai que je n'ai pas été très clair.

 

En fait ce que je voudrais, c'est que mon périphérique apparaisse dans les applications mobiles avec un état (Eteint ou Allumé).Un peu comme un volet roulant, ou encore une ampoule.

 

Posté(e)
pas possible, il faudrait des plugins utilisateurs pour cela, si Fibaro veut bien les ajouter un jour (on peut rêver)....

Merci pour l'info.
Ils sont plutôt bien chez Fibaro, ca devrait venir
Posté(e)

euh.....

 

disons que ça existait dans les v4 Beta, mais ça a été retiré, et ils n'ont aucune intention de le remettre... donc on risque d'attendre assez longtemps (si ce n'est indéfiniment)

Si tu veux savoir comment cela fonctionnait, cherche Virtual Sensor et Virtual Switch de Krikroff

×
×
  • Créer...