Traduit de Türkçe par IA ·
Si il est déjà connecté à Hermetry, envoie l’IP là-bas en tant qu’attribut client. C’est ce que je fais toujours sur les appareils de test de l’usine pharmaceutique.Juste après la connexion, et aussi si l’IP change ensuite, publie vers 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)
Sur la page de l’appareil, dans l’onglet Attributes, lorsque tu sélectionnes la portée Client, lan.ip apparaît avec l’heure de sa dernière mise à jour. L’exemple de la documentation utilise d’ailleurs la clé lan.ip.Ne te fie pas au champ IP address dans Overview : il contient l’adresse d’où provient la dernière connexion. S’il y a du NAT en sortie, ce sera l’IP externe de l’école, inutile pour 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.

