Connaître l'IP de Jeedom sur le réseau local

Bonjour,

afin de réutiliser un script fonctionnant dans un bloc code en PHP sur plusieurs Jeedom sans avoir à faire autre chose qu’un copier/coller, j’ai besoin de connaitre l’adresse IP de la machine hébergeant le Jeedom faisant tourner le script.

J’arrive bien à accéder à cette IP en passant par un bloc action et #IP#.

Je sais également le faire en passant par PHP pour appeler des commandes shell, mais j’aimerais savoir le faire en n’utilisant que les commandes internes de Jeedom.

J’ai trouvé dans l’API et le forum une fonction getClientIp(), je n’arrive pas à la faire fonctionner. Quoique je tente, je n’obtiens qu’une variable vide.

Alors, je peux faire avec le bloc action et #IP#, mais pour ma culture personnelle, quelqu’un sait-il comment connaître l’adresse IP locale de la machine Jeedom en pur Jeedom ? (pas 127.0.0.1, mais l’adresse IP sur le réseau local).

J’ai essayé des tas de variation autour de ceci :

$ip = network::getClientIp();
$scenario->setLog($ip);

J’imagine qu’il y a une façon bien précise d’appeler l’API, mais laquelle ? Si c’est possible dans un scenario…

En vous remerciant de m’avoir lu

https://community.jeedom.com/search?expanded=true&q=getClientIp

Merci :slight_smile: Oui, je l’avais vu et ça ne fonctionne pas dans mon script. Et je viens de réaliser pourquoi : ça permet d’obtenir l’adresse IP du client qui se connecte ou qui envoie une requête au serveur Jeedom. Pas l’IP du serveur :man_facepalming:

Ceci étant, la question reste ouverte : comment dans un bloc code PHP d’un scenario connaître l’adresse IP locale du serveur Jeedom sur lequel le script fonctionne ? En pur Jeedom.

J’aurais aimé passer par les tags, mais je n’ai pas réussi. J’ai tout de même trouvé une méthode. Si ça peut servir à quelqu’un…

$ip_locale_array = network::getInterfacesInfo();

if (is_array($ip_locale_array)) {
    foreach ($ip_locale_array as $interface) {
        if (isset($interface['addr_info']) && is_array($interface['addr_info'])) {
            foreach ($interface['addr_info'] as $addrInfo) {
                if (isset($addrInfo['local']) && $addrInfo['local'] !== '127.0.0.1' && $addrInfo['local'] !== '::1') {
                    $scenario->setLog("Adresse locale (non-loopback) : " . $addrInfo['local']);
                }
            }
        }
    }
} else {
    $scenario->setLog("La valeur obtenue n'est pas un tableau.");
}
[2024-01-13 02:34:33][SCENARIO] -- Start : Scenario lance manuellement.
[2024-01-13 02:34:33][SCENARIO] - Exécution du sous-élément de type [action] : code
[2024-01-13 02:34:33][SCENARIO] Exécution d'un bloc code 
[2024-01-13 02:34:33][SCENARIO] Adresse locale (non-loopback) : 192.168.0.123
[2024-01-13 02:34:33][SCENARIO] Fin correcte du scénario
1 « J'aime »

Avec cette commande tu obtiens l’ip configurée dans la config jeedom, onglet « réseau », section « Accès interne » (par jeedom par défaut donc à priori la bonne mais elle a pu être modifiée par l’utilisateur):

network::getNetworkAccess('internal', 'ip')
3 « J'aime »

:pray: C’est parfait pour ce que je veux faire.

Une question bonus : si la machine a changé d’IP sur le réseau local et que l’utilisateur n’a pas fait la modification nécessaire dans l’onglet réseau de la section Configuration, le bidouillage que j’ai commis va-t-il refléter la nouvelle adresse IP ou n’est-il qu’une façon compliquée d’accéder à l’information fournie par network::getNetworkAccess('internal', 'ip')?

je pense que tu auras la nouvelle ip avec getInterfacesInfo

mais je pense que c’est préférable d’aller chercher celle de la config via la fonction que je donne car c’est ce qu’a configuré l’utilisateur: il pourrait y avoir des cas où c’est un nom de domaine ou un ip d’un reverse proxy interne etc;
je ne sais pas pour qu’elle raison mais du coup utiliser cette config respecte plus le choix de l’utilisateur; à lui d’avoir une config correcte s’il modifie quelque chose (et la page santé sera en NOK si c’est le cas)

Je pense comme toi.

Je posais la question pour l’avenir. Au cas où j’aurais besoin d’écrire un script qui aurait besoin de connaître la véritable IP locale sans pouvoir faire confiance à l’utilisateur et sans passer par des appels système.

Merci beaucoup pour ton aide.

1 « J'aime »

Ce sujet a été automatiquement fermé après 24 heures suivant le dernier commentaire. Aucune réponse n’est permise dorénavant.