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.
Öznitelikler