diff --git a/assets/ethernet.png b/assets/ethernet.png
new file mode 100644
index 0000000..b192af9
Binary files /dev/null and b/assets/ethernet.png differ
diff --git a/icons.qrc b/icons.qrc
index 689abb1..c8915dd 100644
--- a/icons.qrc
+++ b/icons.qrc
@@ -10,6 +10,7 @@
.\assets\copy.png
.\assets\disconnect.png
.\assets\download.png
+ .\assets\ethernet.png
.\assets\ip.png
.\assets\logo.png
.\assets\once.png
diff --git a/tdmgr/GUI/delegates/devices.py b/tdmgr/GUI/delegates/devices.py
index c7b0f59..066fb83 100644
--- a/tdmgr/GUI/delegates/devices.py
+++ b/tdmgr/GUI/delegates/devices.py
@@ -344,7 +344,7 @@ def paint(self, p: QPainter, option: QStyleOptionViewItem, index):
col_name = self.get_column_name(index)
if col_name == "Device":
# draw signal strength icon
- self.draw_rssi_pixmap(index, option, p)
+ self.draw_network_pixmap(index, option, p)
device_rect = option.rect.adjusted(2 * GAP + ICON_SIZE.width(), 3, 0, 0)
p.save()
@@ -392,12 +392,15 @@ def paint(self, p: QPainter, option: QStyleOptionViewItem, index):
else:
QStyledItemDelegate.paint(self, p, option, index)
- def draw_rssi_pixmap(self, index, option, p):
+ def draw_network_pixmap(self, index, option, p):
p.save()
px = self.rssi_offline
if index.data(DeviceRoles.LWTRole):
- rssi = index.data(DeviceRoles.RSSIRole)
- px = get_pixmap_for_rssi(rssi)
+ if index.data(DeviceRoles.IsEthernetRole):
+ px = QPixmap(":/ethernet.png")
+ else:
+ rssi = index.data(DeviceRoles.RSSIRole)
+ px = get_pixmap_for_rssi(rssi)
px_y = option.rect.y() + (option.rect.height() - ICON_SIZE.height()) // 2
px_rect = QRect(QPoint(option.rect.x() + GAP, px_y), ICON_SIZE)
diff --git a/tdmgr/GUI/icons.py b/tdmgr/GUI/icons.py
index 886811b..87c783b 100644
--- a/tdmgr/GUI/icons.py
+++ b/tdmgr/GUI/icons.py
@@ -1270,6 +1270,37 @@
\x84\x88\x69\x97\x0f\x14\x18\xf2\x49\x68\x14\x8c\x82\x51\x30\x0a\
\x06\x16\x00\x00\x8a\x37\x47\x8d\x8d\x83\xef\xa9\x00\x00\x00\x00\
\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x01\xc6\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x18\x00\x00\x00\x18\x08\x06\x00\x00\x00\xe0\x77\x3d\xf8\
+\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0b\x13\x00\x00\x0b\x13\
+\x01\x00\x9a\x9c\x18\x00\x00\x01\x78\x49\x44\x41\x54\x78\x9c\x63\
+\x60\x18\x31\x80\xd7\x6d\x61\x2b\xaf\xfb\xc2\xff\x60\xec\xb6\xb0\
+\x95\xea\x16\xf0\xb8\x2d\x9c\x08\xb3\x80\xc7\x6d\xe1\x04\xea\x5b\
+\xe0\xbe\x60\x2e\xc2\x07\x0b\xe6\x50\xdd\x02\x5e\xf7\x05\x2b\x90\
+\x2c\x58\x4e\x75\x0b\x78\xdc\x16\x6e\x81\x07\x91\xfb\x82\xcd\x14\
+\x1b\x68\x3f\xe5\x25\x8f\xf6\xc4\xd7\xdb\x60\x58\x38\x74\xfd\x5b\
+\x98\x05\x20\x36\xb2\x1c\x48\x2d\xc9\x16\xe8\x4e\x79\x15\x29\xd7\
+\xf1\xf4\x3f\x0c\x0b\x84\xae\x87\x04\x8f\xfb\xc2\xff\x02\x21\x1b\
+\xe0\xe2\x20\xac\x37\xf5\x55\x38\xc9\x16\x68\x4d\x7e\x3d\x17\xc5\
+\x82\xc0\x35\x08\x0b\x82\xd6\xa0\x58\xa0\x33\xf9\x25\xe9\x91\xae\
+\x31\xe1\xc5\x79\x64\x43\xf8\xfd\x56\xc0\x2d\xe0\xf7\x5b\x89\x62\
+\x81\xc6\x84\x17\xe7\x48\xb6\x40\xb5\xf7\xf9\x7b\x64\x43\xf8\xbc\
+\x97\xc2\x2d\xe0\xf3\x59\x86\x62\x81\x4a\xef\x8b\xf7\xa4\x99\xfe\
+\xff\x3f\x93\x42\xe7\xd3\x7f\x20\xcd\x32\x8d\xf7\xe0\x06\xa3\x63\
+\x99\xa6\xfb\x60\x0b\x40\x6a\x41\x7a\x88\x36\xdf\x70\xca\x3b\x3b\
+\x98\xeb\x24\x4b\x2e\xe2\xb4\x00\x24\x07\x8f\xe8\x29\xef\x6c\x88\
+\xb6\x40\x77\xd2\x9b\x0e\x98\x46\xd1\x8c\xc3\xff\x05\xc3\x36\x60\
+\xc5\x20\x39\x98\x3a\xed\xa9\x6f\xda\x89\xf7\xc1\x8c\x77\xb3\xf4\
+\xa7\xbd\xf9\x0f\xc2\x52\x59\x87\xff\x8b\xa6\x1e\xc0\x8a\x41\x72\
+\x30\x75\x20\x3d\x44\x5b\xe0\xb8\xf4\x6b\x83\xd3\xd2\xaf\xff\x41\
+\x58\x3e\xef\x28\x4e\x0b\x40\x72\x30\x75\x20\x3d\x64\x59\xe0\x44\
+\x24\x1e\x9c\x16\xfc\xbd\x61\xfa\x7f\xc1\xbe\xa9\x60\x8c\x8f\x3d\
+\x02\x2d\x70\x5e\xfa\xd9\xc5\x71\xe9\xd7\x8e\xdd\x47\xcb\x8f\x74\
+\xec\x58\xb5\x0c\x84\xf1\xb1\x41\x6a\x41\x7a\x88\xb6\x80\x9a\x00\
+\x00\xf5\xa1\x36\x79\xe6\x72\x59\xbf\x00\x00\x00\x00\x49\x45\x4e\
+\x44\xae\x42\x60\x82\
\x00\x00\x01\x1e\
\x89\
\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
@@ -2482,6 +2513,10 @@
\x08\xc8\x58\x67\
\x00\x73\
\x00\x61\x00\x76\x00\x65\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x0c\
+\x09\x52\x8e\x67\
+\x00\x65\
+\x00\x74\x00\x68\x00\x65\x00\x72\x00\x6e\x00\x65\x00\x74\x00\x2e\x00\x70\x00\x6e\x00\x67\
\x00\x0b\
\x0a\x36\xae\x27\
\x00\x73\
@@ -2541,7 +2576,7 @@
"
qt_resource_struct_v1 = b"\
-\x00\x00\x00\x00\x00\x02\x00\x00\x00\x25\x00\x00\x00\x01\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x26\x00\x00\x00\x01\
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
\x00\x00\x00\x16\x00\x00\x00\x00\x00\x01\x00\x00\x06\xd5\
\x00\x00\x00\x34\x00\x00\x00\x00\x00\x01\x00\x00\x08\x4d\
@@ -2566,98 +2601,101 @@
\x00\x00\x02\x34\x00\x00\x00\x00\x00\x01\x00\x00\x42\xd8\
\x00\x00\x02\x50\x00\x00\x00\x00\x00\x01\x00\x00\x49\xd1\
\x00\x00\x02\x66\x00\x00\x00\x00\x00\x01\x00\x00\x4b\x7e\
-\x00\x00\x02\x82\x00\x00\x00\x00\x00\x01\x00\x00\x4c\xa0\
-\x00\x00\x02\xa4\x00\x00\x00\x00\x00\x01\x00\x00\x52\x5f\
-\x00\x00\x02\xba\x00\x00\x00\x00\x00\x01\x00\x00\x57\x85\
-\x00\x00\x02\xd6\x00\x00\x00\x00\x00\x01\x00\x00\x5c\x99\
-\x00\x00\x02\xee\x00\x00\x00\x00\x00\x01\x00\x00\x61\x0b\
-\x00\x00\x03\x0c\x00\x00\x00\x00\x00\x01\x00\x00\x67\x71\
-\x00\x00\x03\x28\x00\x00\x00\x00\x00\x01\x00\x00\x69\x07\
-\x00\x00\x03\x44\x00\x00\x00\x00\x00\x01\x00\x00\x6c\xef\
-\x00\x00\x03\x5e\x00\x00\x00\x00\x00\x01\x00\x00\x75\x52\
-\x00\x00\x03\x72\x00\x00\x00\x00\x00\x01\x00\x00\x7e\xc0\
-\x00\x00\x03\x8a\x00\x00\x00\x00\x00\x01\x00\x00\x81\xe4\
-\x00\x00\x03\xaa\x00\x00\x00\x00\x00\x01\x00\x00\x87\xef\
-\x00\x00\x03\xcc\x00\x00\x00\x00\x00\x01\x00\x00\x8b\x5f\
+\x00\x00\x02\x84\x00\x00\x00\x00\x00\x01\x00\x00\x4d\x48\
+\x00\x00\x02\xa0\x00\x00\x00\x00\x00\x01\x00\x00\x4e\x6a\
+\x00\x00\x02\xc2\x00\x00\x00\x00\x00\x01\x00\x00\x54\x29\
+\x00\x00\x02\xd8\x00\x00\x00\x00\x00\x01\x00\x00\x59\x4f\
+\x00\x00\x02\xf4\x00\x00\x00\x00\x00\x01\x00\x00\x5e\x63\
+\x00\x00\x03\x0c\x00\x00\x00\x00\x00\x01\x00\x00\x62\xd5\
+\x00\x00\x03\x2a\x00\x00\x00\x00\x00\x01\x00\x00\x69\x3b\
+\x00\x00\x03\x46\x00\x00\x00\x00\x00\x01\x00\x00\x6a\xd1\
+\x00\x00\x03\x62\x00\x00\x00\x00\x00\x01\x00\x00\x6e\xb9\
+\x00\x00\x03\x7c\x00\x00\x00\x00\x00\x01\x00\x00\x77\x1c\
+\x00\x00\x03\x90\x00\x00\x00\x00\x00\x01\x00\x00\x80\x8a\
+\x00\x00\x03\xa8\x00\x00\x00\x00\x00\x01\x00\x00\x83\xae\
+\x00\x00\x03\xc8\x00\x00\x00\x00\x00\x01\x00\x00\x89\xb9\
+\x00\x00\x03\xea\x00\x00\x00\x00\x00\x01\x00\x00\x8d\x29\
"
qt_resource_struct_v2 = b"\
-\x00\x00\x00\x00\x00\x02\x00\x00\x00\x25\x00\x00\x00\x01\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x26\x00\x00\x00\x01\
\x00\x00\x00\x00\x00\x00\x00\x00\
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
-\x00\x00\x01\x92\x2f\xfe\x22\x67\
+\x00\x00\x01\x92\x35\xfe\x56\x7b\
\x00\x00\x00\x16\x00\x00\x00\x00\x00\x01\x00\x00\x06\xd5\
-\x00\x00\x01\x92\x2f\xfe\x22\x67\
+\x00\x00\x01\x92\x35\xfe\x56\x7a\
\x00\x00\x00\x34\x00\x00\x00\x00\x00\x01\x00\x00\x08\x4d\
-\x00\x00\x01\x92\x2f\xfe\x22\x63\
+\x00\x00\x01\x92\x35\xfe\x56\x76\
\x00\x00\x00\x4c\x00\x00\x00\x00\x00\x01\x00\x00\x0b\xcd\
-\x00\x00\x01\x92\x2f\xfe\x22\x60\
+\x00\x00\x01\x92\x35\xfe\x56\x73\
\x00\x00\x00\x70\x00\x00\x00\x00\x00\x01\x00\x00\x0d\x32\
-\x00\x00\x01\x92\x2f\xfe\x22\x5f\
+\x00\x00\x01\x92\x35\xfe\x56\x73\
\x00\x00\x00\x88\x00\x00\x00\x00\x00\x01\x00\x00\x14\xe2\
-\x00\x00\x01\x92\x2f\xfe\x22\x5f\
+\x00\x00\x01\x92\x35\xfe\x56\x72\
\x00\x00\x00\xb2\x00\x00\x00\x00\x00\x01\x00\x00\x1c\xa1\
-\x00\x00\x01\x92\x2f\xfe\x22\x62\
+\x00\x00\x01\x92\x35\xfe\x56\x75\
\x00\x00\x00\xc8\x00\x00\x00\x00\x00\x01\x00\x00\x21\x17\
-\x00\x00\x01\x92\x2f\xfe\x22\x62\
+\x00\x00\x01\x92\x35\xfe\x56\x75\
\x00\x00\x00\xe4\x00\x00\x00\x00\x00\x01\x00\x00\x21\xbb\
-\x00\x00\x01\x92\x2f\xfe\x22\x68\
+\x00\x00\x01\x92\x35\xfe\x56\x7b\
\x00\x00\x00\xfe\x00\x00\x00\x00\x00\x01\x00\x00\x24\x93\
-\x00\x00\x01\x92\x2f\xfe\x22\x62\
+\x00\x00\x01\x92\x35\xfe\x56\x75\
\x00\x00\x01\x14\x00\x00\x00\x00\x00\x01\x00\x00\x28\xc5\
-\x00\x00\x01\x92\x2f\xfe\x22\x61\
+\x00\x00\x01\x92\x35\xfe\x56\x74\
\x00\x00\x01\x2a\x00\x00\x00\x00\x00\x01\x00\x00\x2b\x5e\
-\x00\x00\x01\x92\x2f\xfe\x22\x5f\
+\x00\x00\x01\x92\x35\xfe\x56\x72\
\x00\x00\x01\x46\x00\x00\x00\x00\x00\x01\x00\x00\x30\x91\
-\x00\x00\x01\x92\x2f\xfe\x22\x62\
+\x00\x00\x01\x92\x35\xfe\x56\x75\
\x00\x00\x01\x5c\x00\x00\x00\x00\x00\x01\x00\x00\x32\xda\
-\x00\x00\x01\x92\x2f\xfe\x22\x60\
+\x00\x00\x01\x92\x35\xfe\x56\x74\
\x00\x00\x01\x78\x00\x00\x00\x00\x00\x01\x00\x00\x35\xd3\
-\x00\x00\x01\x92\x2f\xfe\x22\x65\
+\x00\x00\x01\x92\x35\xfe\x56\x78\
\x00\x00\x01\x94\x00\x00\x00\x00\x00\x01\x00\x00\x38\x6e\
-\x00\x00\x01\x92\x2f\xfe\x22\x61\
+\x00\x00\x01\x92\x35\xfe\x56\x75\
\x00\x00\x01\xa6\x00\x00\x00\x00\x00\x01\x00\x00\x3c\xc5\
-\x00\x00\x01\x92\x2f\xfe\x22\x65\
+\x00\x00\x01\x92\x35\xfe\x56\x78\
\x00\x00\x01\xc2\x00\x00\x00\x00\x00\x01\x00\x00\x3d\x92\
-\x00\x00\x01\x92\x2f\xfe\x22\x66\
+\x00\x00\x01\x92\x35\xfe\x56\x78\
\x00\x00\x01\xde\x00\x00\x00\x00\x00\x01\x00\x00\x3e\x57\
-\x00\x00\x01\x92\x2f\xfe\x22\x65\
+\x00\x00\x01\x92\x35\xfe\x56\x78\
\x00\x00\x01\xfa\x00\x00\x00\x00\x00\x01\x00\x00\x3f\x24\
-\x00\x00\x01\x92\x2f\xfe\x22\x66\
+\x00\x00\x01\x92\x35\xfe\x56\x78\
\x00\x00\x02\x16\x00\x00\x00\x00\x00\x01\x00\x00\x3f\xf1\
-\x00\x00\x01\x92\x2f\xfe\x22\x61\
+\x00\x00\x01\x92\x35\xfe\x56\x75\
\x00\x00\x02\x34\x00\x00\x00\x00\x00\x01\x00\x00\x42\xd8\
-\x00\x00\x01\x92\x2f\xfe\x22\x63\
+\x00\x00\x01\x92\x35\xfe\x56\x76\
\x00\x00\x02\x50\x00\x00\x00\x00\x00\x01\x00\x00\x49\xd1\
-\x00\x00\x01\x92\x2f\xfe\x22\x64\
+\x00\x00\x01\x92\x35\xfe\x56\x77\
\x00\x00\x02\x66\x00\x00\x00\x00\x00\x01\x00\x00\x4b\x7e\
-\x00\x00\x01\x92\x30\x2c\x43\xd2\
-\x00\x00\x02\x82\x00\x00\x00\x00\x00\x01\x00\x00\x4c\xa0\
-\x00\x00\x01\x92\x2f\xfe\x22\x61\
-\x00\x00\x02\xa4\x00\x00\x00\x00\x00\x01\x00\x00\x52\x5f\
-\x00\x00\x01\x92\x2f\xfe\x22\x66\
-\x00\x00\x02\xba\x00\x00\x00\x00\x00\x01\x00\x00\x57\x85\
-\x00\x00\x01\x92\x2f\xfe\x22\x60\
-\x00\x00\x02\xd6\x00\x00\x00\x00\x00\x01\x00\x00\x5c\x99\
-\x00\x00\x01\x92\x2f\xfe\x22\x5f\
-\x00\x00\x02\xee\x00\x00\x00\x00\x00\x01\x00\x00\x61\x0b\
-\x00\x00\x01\x92\x2f\xfe\x22\x65\
-\x00\x00\x03\x0c\x00\x00\x00\x00\x00\x01\x00\x00\x67\x71\
-\x00\x00\x01\x92\x2f\xfe\x22\x66\
-\x00\x00\x03\x28\x00\x00\x00\x00\x00\x01\x00\x00\x69\x07\
-\x00\x00\x01\x92\x2f\xfe\x22\x63\
-\x00\x00\x03\x44\x00\x00\x00\x00\x00\x01\x00\x00\x6c\xef\
-\x00\x00\x01\x92\x2f\xfe\x22\x68\
-\x00\x00\x03\x5e\x00\x00\x00\x00\x00\x01\x00\x00\x75\x52\
-\x00\x00\x01\x92\x2f\xfe\x22\x68\
-\x00\x00\x03\x72\x00\x00\x00\x00\x00\x01\x00\x00\x7e\xc0\
-\x00\x00\x01\x92\x2f\xfe\x22\x62\
-\x00\x00\x03\x8a\x00\x00\x00\x00\x00\x01\x00\x00\x81\xe4\
-\x00\x00\x01\x92\x2f\xfe\x22\x67\
-\x00\x00\x03\xaa\x00\x00\x00\x00\x00\x01\x00\x00\x87\xef\
-\x00\x00\x01\x92\x2f\xfe\x22\x64\
-\x00\x00\x03\xcc\x00\x00\x00\x00\x00\x01\x00\x00\x8b\x5f\
-\x00\x00\x01\x92\x2f\xfe\x22\x68\
+\x00\x00\x01\x92\x63\xa0\xce\x80\
+\x00\x00\x02\x84\x00\x00\x00\x00\x00\x01\x00\x00\x4d\x48\
+\x00\x00\x01\x92\x35\xfe\x56\x77\
+\x00\x00\x02\xa0\x00\x00\x00\x00\x00\x01\x00\x00\x4e\x6a\
+\x00\x00\x01\x92\x35\xfe\x56\x74\
+\x00\x00\x02\xc2\x00\x00\x00\x00\x00\x01\x00\x00\x54\x29\
+\x00\x00\x01\x92\x35\xfe\x56\x7a\
+\x00\x00\x02\xd8\x00\x00\x00\x00\x00\x01\x00\x00\x59\x4f\
+\x00\x00\x01\x92\x35\xfe\x56\x74\
+\x00\x00\x02\xf4\x00\x00\x00\x00\x00\x01\x00\x00\x5e\x63\
+\x00\x00\x01\x92\x35\xfe\x56\x72\
+\x00\x00\x03\x0c\x00\x00\x00\x00\x00\x01\x00\x00\x62\xd5\
+\x00\x00\x01\x92\x35\xfe\x56\x77\
+\x00\x00\x03\x2a\x00\x00\x00\x00\x00\x01\x00\x00\x69\x3b\
+\x00\x00\x01\x92\x35\xfe\x56\x78\
+\x00\x00\x03\x46\x00\x00\x00\x00\x00\x01\x00\x00\x6a\xd1\
+\x00\x00\x01\x92\x35\xfe\x56\x76\
+\x00\x00\x03\x62\x00\x00\x00\x00\x00\x01\x00\x00\x6e\xb9\
+\x00\x00\x01\x92\x35\xfe\x56\x7b\
+\x00\x00\x03\x7c\x00\x00\x00\x00\x00\x01\x00\x00\x77\x1c\
+\x00\x00\x01\x92\x35\xfe\x56\x7b\
+\x00\x00\x03\x90\x00\x00\x00\x00\x00\x01\x00\x00\x80\x8a\
+\x00\x00\x01\x92\x35\xfe\x56\x76\
+\x00\x00\x03\xa8\x00\x00\x00\x00\x00\x01\x00\x00\x83\xae\
+\x00\x00\x01\x92\x35\xfe\x56\x7a\
+\x00\x00\x03\xc8\x00\x00\x00\x00\x00\x01\x00\x00\x89\xb9\
+\x00\x00\x01\x92\x35\xfe\x56\x77\
+\x00\x00\x03\xea\x00\x00\x00\x00\x00\x01\x00\x00\x8d\x29\
+\x00\x00\x01\x92\x35\xfe\x56\x7c\
"
qt_version = [int(v) for v in QtCore.qVersion().split(".")]
diff --git a/tdmgr/models/devices.py b/tdmgr/models/devices.py
index b19ab8c..fc59c43 100644
--- a/tdmgr/models/devices.py
+++ b/tdmgr/models/devices.py
@@ -38,7 +38,7 @@ def notify_change(self, d, key):
[
key.startswith("POWER"),
key.startswith("FriendlyName"),
- key in ("RSSI", "LWT", "Color", "HSBColor"),
+ key in ("RSSI", "LWT", "Color", "HSBColor", "IPAddress", "Gateway", "Ethernet"),
key.startswith("Channel"),
key.startswith("Dimmer"),
key.startswith("ShutterRelay"),
@@ -128,9 +128,6 @@ def data(self, idx, role=Qt.DisplayRole):
if col_name == "RSSI":
return int(d.p.get("RSSI", 0))
- if col_name == "IPAddress":
- return d.ip_address
-
return val
if role == DeviceRoles.LWTRole:
@@ -160,6 +157,18 @@ def data(self, idx, role=Qt.DisplayRole):
if role == DeviceRoles.HardwareRole:
return getattr(d.p, "Hardware", "ESP8266")
+ if role == DeviceRoles.IsEthernetRole:
+ return (
+ d.p.get("IPAddress") == "0.0.0.0"
+ and d.p.get("Ethernet", {}).get("IPAddress") != "0.0.0.0"
+ )
+
+ if role == DeviceRoles.IPAddressRole:
+ return d.ip_address
+
+ if role == DeviceRoles.GatewayRole:
+ return d.gateway
+
if role == Qt.TextAlignmentRole:
# Left-aligned columns
if col_name in (
diff --git a/tdmgr/models/roles.py b/tdmgr/models/roles.py
index 3c0b030..0a42cb2 100644
--- a/tdmgr/models/roles.py
+++ b/tdmgr/models/roles.py
@@ -13,3 +13,7 @@ class DeviceRoles(int, Enum):
ColorRole = auto()
ModuleRole = auto()
HardwareRole = auto()
+
+ IPAddressRole = auto()
+ GatewayRole = auto()
+ IsEthernetRole = auto()
diff --git a/tdmgr/tasmota/device.py b/tdmgr/tasmota/device.py
index f13cf4b..cd68025 100644
--- a/tdmgr/tasmota/device.py
+++ b/tdmgr/tasmota/device.py
@@ -365,16 +365,23 @@ def color(self):
)
return None
- @property
- def ip_address(self) -> str:
- for ip in [
- self.p.get("IPAddress"),
- self.p.get("Ethernet", {}).get("IPAddress"),
+ def _get_addr_from_wifi_or_ethernet(self, address: str) -> str:
+ for _address in [
+ self.p.get(address),
+ self.p.get("Ethernet", {}).get(address),
]:
- if ip != "0.0.0.0":
- return ip
+ if _address != "0.0.0.0":
+ return _address
return "0.0.0.0"
+ @property
+ def ip_address(self) -> str:
+ return self._get_addr_from_wifi_or_ethernet("IPAddress")
+
+ @property
+ def gateway(self) -> str:
+ return self._get_addr_from_wifi_or_ethernet("Gateway")
+
def setoption(self, o):
if 0 <= o < 32:
reg = 0
diff --git a/tests/status_parsing/jsonfiles/14.2.0.4/STATUS5.1.json b/tests/status_parsing/jsonfiles/14.2.0.4/STATUS5.1.json
index bb765d1..fb30803 100644
--- a/tests/status_parsing/jsonfiles/14.2.0.4/STATUS5.1.json
+++ b/tests/status_parsing/jsonfiles/14.2.0.4/STATUS5.1.json
@@ -13,7 +13,7 @@
"Mac": "34:98:7A:68:FF:97",
"Subnetmask": "255.255.255.0"
},
- "Gateway": "192.168.7.1",
+ "Gateway": "0.0.0.0",
"HTTP_API": 1,
"Hostname": "tasmota-68FF94-8084",
"IP6Global": "",
diff --git a/tests/test_device.py b/tests/test_device.py
index 9fd7376..d878b3b 100644
--- a/tests/test_device.py
+++ b/tests/test_device.py
@@ -48,6 +48,22 @@ def test_ip_address(device, version, filename, expected):
assert device.ip_address == expected
+@pytest.mark.parametrize("version", ("14.2.0.4",))
+@pytest.mark.parametrize(
+ "filename, expected",
+ [
+ ("STATUS5.json", "192.168.0.99"),
+ ("STATUS5.1.json", "192.168.7.1"),
+ ],
+)
+def test_gateway(device, version, filename, expected):
+ payload = get_payload(version, filename)
+ msg = Message("stat/topic/STATUS5", payload, prefix="stat")
+ device.process_message(msg)
+
+ assert device.gateway == expected
+
+
@pytest.mark.parametrize(
"fname, expected",
[