linkqaulity added for zigbee devices

This commit is contained in:
Dirk Alders 2023-12-31 17:57:24 +01:00
parent a0327db258
commit a9e9ac1974
4 changed files with 29 additions and 1 deletions

View File

@ -7,7 +7,7 @@ import time
from z_server import config from z_server import config
from z_server import tcp_socket from z_server import tcp_socket
from z_server.z_protocol import server as client_prot from z_server.z_protocol import server as client_prot
from z_server.z_protocol import DID_FOLLOWS_SETPOINT, DID_BATTERY_LEVEL, DID_HEARTBEAT from z_server.z_protocol import DID_FOLLOWS_SETPOINT, DID_BATTERY_LEVEL, DID_HEARTBEAT, DID_LINKQUALITY
from z_server import socket_protocol from z_server import socket_protocol
import sys import sys
@ -38,6 +38,9 @@ if __name__ == '__main__':
elif sys.argv[0].endswith('check_z_battery'): elif sys.argv[0].endswith('check_z_battery'):
sp.send(socket_protocol.SID_READ_REQUEST, DID_BATTERY_LEVEL, data) sp.send(socket_protocol.SID_READ_REQUEST, DID_BATTERY_LEVEL, data)
sp_data = sp.receive(socket_protocol.SID_READ_RESPONSE, DID_BATTERY_LEVEL).get_data() sp_data = sp.receive(socket_protocol.SID_READ_RESPONSE, DID_BATTERY_LEVEL).get_data()
elif sys.argv[0].endswith('check_z_linkquality'):
sp.send(socket_protocol.SID_READ_REQUEST, DID_LINKQUALITY, data)
sp_data = sp.receive(socket_protocol.SID_READ_RESPONSE, DID_LINKQUALITY).get_data()
elif sys.argv[0].endswith('check_z_follow'): elif sys.argv[0].endswith('check_z_follow'):
sp.send(socket_protocol.SID_READ_REQUEST, DID_FOLLOWS_SETPOINT, data) sp.send(socket_protocol.SID_READ_REQUEST, DID_FOLLOWS_SETPOINT, data)
sp_data = sp.receive(socket_protocol.SID_READ_RESPONSE, DID_FOLLOWS_SETPOINT).get_data() sp_data = sp.receive(socket_protocol.SID_READ_RESPONSE, DID_FOLLOWS_SETPOINT).get_data()

1
check_z_linkquality Symbolic link
View File

@ -0,0 +1 @@
check_z_follow

View File

@ -15,6 +15,7 @@ class base(object):
MONITORING_HEARTBEAT = "heartbeat" MONITORING_HEARTBEAT = "heartbeat"
MONITORING_BATTERY = "battery" MONITORING_BATTERY = "battery"
MONITORING_FOLLOW_SETPOINT = "follow_setpoint" MONITORING_FOLLOW_SETPOINT = "follow_setpoint"
MONITORING_LINKQUALITY = "linkquality"
# #
FOLLOW_REQUEST_WARNING = 5 # Seconds, till warning comes up, if device does not follow the command FOLLOW_REQUEST_WARNING = 5 # Seconds, till warning comes up, if device does not follow the command
FOLLOW_REQUEST_ERROR = 60 # Seconds, till error comes up, if device does not follow the command FOLLOW_REQUEST_ERROR = 60 # Seconds, till error comes up, if device does not follow the command
@ -23,6 +24,9 @@ class base(object):
BATTERY_LVL_WARNING = 15 BATTERY_LVL_WARNING = 15
BATTERY_LVL_ERROR = 5 BATTERY_LVL_ERROR = 5
# #
LINKQUALITY_WARNING = 50
LINKQUALITY_ERROR = 25
#
LAST_MSG_WARNING = 6 * 60 * 60 LAST_MSG_WARNING = 6 * 60 * 60
LAST_MSG_ERROR = 24 * 60 * 60 LAST_MSG_ERROR = 24 * 60 * 60
@ -40,6 +44,7 @@ class base(object):
self.__state_storage__ = {} self.__state_storage__ = {}
# #
self.battery = None self.battery = None
self.linkquality = None
def __rx__(self, client, userdata, message): def __rx__(self, client, userdata, message):
try: try:
@ -66,6 +71,11 @@ class base(object):
# #
if self.MONITORING_BATTERY in payload and message.topic == self.topic: if self.MONITORING_BATTERY in payload and message.topic == self.topic:
self.battery = payload[self.MONITORING_BATTERY] self.battery = payload[self.MONITORING_BATTERY]
#
# linkquality
#
if self.MONITORING_LINKQUALITY in payload and message.topic == self.topic:
self.linkquality = payload[self.MONITORING_LINKQUALITY]
def target(self, key, value): def target(self, key, value):
tm_t, value_t = self.__target_storage__.get(key, (0, None)) tm_t, value_t = self.__target_storage__.get(key, (0, None))
@ -126,6 +136,18 @@ class base(object):
return self.__nagios_return__(self.MONITORING_BATTERY, nagios.Nagios.WARNING, "Battery level low (%.1f%%)" % self.battery) return self.__nagios_return__(self.MONITORING_BATTERY, nagios.Nagios.WARNING, "Battery level low (%.1f%%)" % self.battery)
else: else:
return self.__nagios_return__(self.MONITORING_BATTERY, nagios.Nagios.OK, "Battery okay (%.1f%%)" % self.battery) return self.__nagios_return__(self.MONITORING_BATTERY, nagios.Nagios.OK, "Battery okay (%.1f%%)" % self.battery)
#
# LINKQUALITY
#
elif key == self.MONITORING_LINKQUALITY:
if self.linkquality is None:
return self.__nagios_return__(self.MONITORING_LINKQUALITY, nagios.Nagios.UNKNOWN, "Device exists, but no data received or unknown monitoring")
elif self.linkquality <= self.LINKQUALITY_ERROR:
return self.__nagios_return__(self.MONITORING_LINKQUALITY, nagios.Nagios.ERROR, "Linkquality critical low (%d)" % self.linkquality)
elif self.linkquality <= self.LINKQUALITY_WARNING:
return self.__nagios_return__(self.MONITORING_LINKQUALITY, nagios.Nagios.WARNING, "Linkquality level low (%d)" % self.linkquality)
else:
return self.__nagios_return__(self.MONITORING_LINKQUALITY, nagios.Nagios.OK, "Linkquality okay (%d)" % self.linkquality)
def __nagios_return__(self, monitoring_name, status, msg, force=False): def __nagios_return__(self, monitoring_name, status, msg, force=False):
tm = time.time() tm = time.time()

View File

@ -5,6 +5,7 @@ import socket_protocol
DID_FOLLOWS_SETPOINT = 'follow_setpoint' DID_FOLLOWS_SETPOINT = 'follow_setpoint'
DID_BATTERY_LEVEL = 'battery' DID_BATTERY_LEVEL = 'battery'
DID_HEARTBEAT = 'heartbeat' DID_HEARTBEAT = 'heartbeat'
DID_LINKQUALITY = 'linkquality'
class server(socket_protocol.pure_json_protocol): class server(socket_protocol.pure_json_protocol):
@ -16,6 +17,7 @@ class server(socket_protocol.pure_json_protocol):
if not self.__comm_inst__.IS_CLIENT: if not self.__comm_inst__.IS_CLIENT:
self.register_callback(socket_protocol.SID_READ_REQUEST, DID_FOLLOWS_SETPOINT, self.device_status) self.register_callback(socket_protocol.SID_READ_REQUEST, DID_FOLLOWS_SETPOINT, self.device_status)
self.register_callback(socket_protocol.SID_READ_REQUEST, DID_BATTERY_LEVEL, self.device_status) self.register_callback(socket_protocol.SID_READ_REQUEST, DID_BATTERY_LEVEL, self.device_status)
self.register_callback(socket_protocol.SID_READ_REQUEST, DID_LINKQUALITY, self.device_status)
self.register_callback(socket_protocol.SID_READ_REQUEST, DID_HEARTBEAT, self.device_status) self.register_callback(socket_protocol.SID_READ_REQUEST, DID_HEARTBEAT, self.device_status)
def device_status(self, msg): def device_status(self, msg):