Von Türkçe mit KI übersetzt ·
Wenn er bereits mit Hermetry verbunden ist, sende die IP dorthin als Client-Attribut. Ich mache das bei den Testgeräten in der Pharmaanlage immer so.Direkt nach der Verbindung und auch dann, wenn sich die IP später ändert, veröffentliche an 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)
Auf der Geräteseite, im Tab Attributes, erscheint lan.ip unter dem Bereich Client mit dem Zeitpunkt der letzten Aktualisierung. Im Beispiel der Dokumentation wird ohnehin der Schlüssel lan.ip verwendet.Vertraue dem IP-Address-Feld unter Overview nicht: Es zeigt die Adresse, von der die letzte Verbindung kam. Gibt es also NAT beim Ausgang, steht dort die externe IP der Schule, und die ist für SSH nutzlos.Ö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.

