Traducido del Türkçe por IA ·
Si ya está conectada a Hermetry, envía la IP allí como atributo de cliente. Siempre lo hago así en los dispositivos de prueba de la planta farmacéutica.Justo después de conectarse, y también si la IP cambia, publica en v1/attributes:
import socket, json
def lan_ip():
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.connect(("10.255.255.255", 1))
ip = s.getsockname()[0]; s.close(); return ip
def on_connect(c, u, f, rc):
c.publish("v1/attributes", json.dumps({"lan.ip": lan_ip(), "host": socket.gethostname()}), qos=1)
En la página del dispositivo, en la pestaña Attributes, al seleccionar el ámbito Client, lan.ip aparece ahí con la hora de su última actualización. De todos modos, el ejemplo de la documentación también usa la clave lan.ip.No confíes en el campo IP address de Overview: es la dirección desde la que llegó la última conexión, así que si hay NAT en la salida será la IP externa del colegio, que no sirve para SSH.Öznitelikler
Zaten Hermetry’e bağlıysa IP’yi oraya client attribute olarak yolla. Ben ilaç tesisindeki test cihazlarında hep böyle yapıyorum.
Bağlandıktan hemen sonra, bir de IP değişirse, v1/attributes’a yayınla:
import socket, json
def lan_ip():
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.connect(("10.255.255.255", 1))
ip = s.getsockname()[0]; s.close(); return ip
def on_connect(c, u, f, rc):
c.publish("v1/attributes", json.dumps({"lan.ip": lan_ip(), "host": socket.gethostname()}), qos=1)
Cihaz sayfasında Attributes sekmesinde Client kapsamını seçince lan.ip orada, son güncellenme zamanıyla görünüyor. Dokümandaki örnekte de lan.ip anahtarı kullanılıyor zaten.
Overview’daki IP address alanına güvenme, o en son bağlantının geldiği adres, yani çıkışta NAT varsa okulun dış IP’si olur, SSH için işe yaramaz.

