diff --git a/src/packages/fff/fff-babeld/files/usr/lib/nodewatcher.d/81-babeld.sh b/src/packages/fff/fff-babeld/files/usr/lib/nodewatcher.d/81-babeld.sh new file mode 100644 index 0000000..8c026c5 --- /dev/null +++ b/src/packages/fff/fff-babeld/files/usr/lib/nodewatcher.d/81-babeld.sh @@ -0,0 +1,35 @@ +#!/bin/sh + +. /usr/share/libubox/jshn.sh +json_load_file /tmp/nodewatcher.json + +json_select babel + +json_add_array "neighbours" + +if pgrep babeld >/dev/null; then + neighbours="$(echo dump | nc ::1 33123 | grep '^add neighbour' | + awk '{ + for (i=2; i < NF; i += 2) { + vars[$i] = $(i+1) + } + } + { + printf "%s;%s;%s;>", vars["address"], vars["if"], vars["cost"] + }')" + + IFS='>'; set $neighbours; IFS=$' \t\n' + for a; do + json_add_object + json_add_string "ip" "$(echo $a | awk '{split($0, b, ";"); printf b[1]}')" + json_add_string "outgoing_interface" "$(echo $a | awk '{split($0, b, ";"); printf b[2]}')" + json_add_string "link_cost" "$(echo $a | awk '{split($0, b, ";"); printf b[3]}')" + json_close_object #this_neighbour + done +fi + +json_close_object #neighbours + +json_dump > /tmp/nodewatcher.json + +#exit 0 \ No newline at end of file diff --git a/src/packages/fff/fff-mqtt-monitoring/files/usr/lib/micron.d/fff-json-mqtt-proxy b/src/packages/fff/fff-mqtt-monitoring/files/usr/lib/micron.d/fff-json-mqtt-proxy new file mode 100644 index 0000000..fd00edb --- /dev/null +++ b/src/packages/fff/fff-mqtt-monitoring/files/usr/lib/micron.d/fff-json-mqtt-proxy @@ -0,0 +1 @@ +*/5 * * * * sleep $(/usr/bin/random 70 85); /usr/sbin/json-mqtt-proxy \ No newline at end of file diff --git a/src/packages/fff/fff-mqtt-monitoring/files/usr/sbin/json-mqtt-proxy b/src/packages/fff/fff-mqtt-monitoring/files/usr/sbin/json-mqtt-proxy new file mode 100644 index 0000000..dc53c94 --- /dev/null +++ b/src/packages/fff/fff-mqtt-monitoring/files/usr/sbin/json-mqtt-proxy @@ -0,0 +1,6 @@ +#!/bin/sh +MACADDR=$(cat /sys/class/net/br-client/address | /bin/sed 's/://g') + +if [ -n "$(uci -q get fff.mqtt.server)" ] ; then + mosquitto_pub -h "$(uci get fff.mqtt.server)" -p 1883 -t /monitoring/v2/$MACADDR -m "$(cat /tmp/nodewatcher.json)" +fi diff --git a/src/packages/fff/fff-network/files/usr/lib/nodewatcher.d/21-interfaces.sh b/src/packages/fff/fff-network/files/usr/lib/nodewatcher.d/21-interfaces.sh new file mode 100644 index 0000000..a1e86e6 --- /dev/null +++ b/src/packages/fff/fff-network/files/usr/lib/nodewatcher.d/21-interfaces.sh @@ -0,0 +1,98 @@ +#!/bin/sh + +IFACEBLACKLIST=$(uci get nodewatcher.@network[0].iface_blacklist) +IPWHITELIST=$(uci get nodewatcher.@network[0].ip_whitelist) + +debug() { + (>&2 echo "nodewatcher: $1") +} + +inArray() { + local value + for value in $1; do + [ "$value" = "$2" ] && return 0 + done + return 1 +} + +debug "Collecting information from network interfaces" + +. /usr/share/libubox/jshn.sh +json_load_file /tmp/nodewatcher.json + +json_add_array "interfaces" + +# Loop through interfaces: for entry in $IFACES; do +for filename in $(grep 'up\|unknown' /sys/class/net/*/operstate); do + ifpath=${filename%/operstate*} + iface=${ifpath#/sys/class/net/} + + inArray "$IFACEBLACKLIST" "$iface" && continue + + json_add_object "" + + json_add_string "name" "$iface" + + #Get interface data for whitelisted interfaces + # shellcheck disable=SC2016 + mac_addr=$(ip addr show dev $iface | awk '/ether/ { printf $2 }') + json_add_string "mac_addr" "$mac_addr" + mtu=$(ip addr show dev $iface | awk '/mtu/ { printf $5 }') + json_add_string "mtu" "$mtu" + + if inArray "$IPWHITELIST" "$iface"; then + # shellcheck disable=SC2016 + json_add_array ipv4_addr + IN=$(ip addr show dev $iface | awk '/inet / { split($2, a, "/"); printf a[1]";" }') + IFS=';'; set $IN; IFS=$' \t\n' + for a; do json_add_string "" "$a"; done + json_close_object #ipv4_addr + + json_add_array ipv6_addr + IN=$(ip addr show dev $iface | awk '/inet6/ && /scope global/ { printf $2";" }') + IFS=';'; set $IN; IFS=$' \t\n' + for a; do json_add_string "" "$a"; done + json_close_object #ipv6_addr + + json_add_array ipv6_link_local_addr + IN=$(ip addr show dev $iface | awk '/inet6/ && /scope link/ { printf $2 }') + IFS=';'; set $IN; IFS=$' \t\n' + for a; do json_add_string "" "$a"; done + json_close_object #ipv6_link_local_addr + fi + + json_add_object "traffic" + traffic_rx=$(cat "$ifpath/statistics/rx_bytes") + json_add_string "rx" "$(cat "$ifpath/statistics/rx_bytes")" + traffic_tx=$(cat "$ifpath/statistics/tx_bytes") + json_add_string "tx" "$traffic_tx" + json_close_object #traffic + + wlan_mode=$(iwconfig $iface 2>/dev/null | awk -F':' '/Mode/{ split($2, m, " "); printf m[1] }') + if [[ $wlan_mode ]]; then + json_add_object "wlan" + wlan_cell=$(iwconfig $iface 2>/dev/null | awk -F':' '/Cell/{ split($0, c, " "); printf c[5] }') + wlan_essid=$(iwconfig $iface 2>/dev/null | awk -F':' '/ESSID/ { split($0, e, "\""); printf e[2] }') + wlan_frequency=$(iwconfig $iface 2>/dev/null | awk -F':' '/Freq/{ split($3, f, " "); printf f[1]f[2] }') + wlan_tx_power=$(iwconfig $iface 2>/dev/null | awk -F':' '/Tx-Power/{ split($0, p, "="); sub(/[[:space:]]*$/, "", p[2]); printf p[2] }') + wlan_ssid=$(iw dev $iface info 2>/dev/null | awk '/ssid/{ split($0, s, " "); printf s[2]}') + wlan_type=$(iw dev $iface info 2>/dev/null | awk '/type/ { split($0, t, " "); printf t[2]}') + wlan_channel=$(iw dev $iface info 2>/dev/null | awk '/channel/{ split($0, c, " "); printf c[2]}') + wlan_width=$(iw dev $iface info 2>/dev/null | awk '/width/{ split($0, w, ": "); sub(/ .*/, "", w[2]); printf w[2]}') + [[ $wlan_mode ]] && json_add_string "mode" "$wlan_mode" + [[ $wlan_cell ]] && json_add_string "cell" "$wlan_cell" + [[ $wlan_essid ]] && json_add_string "essid" "$wlan_essid" + [[ $wlan_frequency ]] && json_add_string "frequency" "$wlan_frequency" + [[ "$wlan_tx_power" ]] && json_add_string "tx_power" "$wlan_tx_power" + [[ $wlan_ssid ]] && json_add_string "ssid" "$wlan_ssid" + [[ $wlan_type ]] && json_add_string "type" "$wlan_type" + [[ $wlan_channel ]] && json_add_string "channel" "$wlan_channel" + [[ $wlan_width ]] && json_add_string "width" "$wlan_width" + json_close_object #wlan + fi + + json_close_object #iface object +done + +json_dump > /tmp/nodewatcher.json +#exit 0 \ No newline at end of file diff --git a/src/packages/fff/fff-network/files/usr/lib/nodewatcher.d/51-clients.sh b/src/packages/fff/fff-network/files/usr/lib/nodewatcher.d/51-clients.sh new file mode 100644 index 0000000..e5473b1 --- /dev/null +++ b/src/packages/fff/fff-network/files/usr/lib/nodewatcher.d/51-clients.sh @@ -0,0 +1,35 @@ +#!/bin/sh + +MESH_INTERFACE=$(uci get nodewatcher.@network[0].mesh_interface) + +debug() { + (>&2 echo "nodewatcher: $1") +} + +debug "Collecting information about connected clients" + +. /usr/share/libubox/jshn.sh +json_load_file /tmp/nodewatcher.json + +json_add_object "clients" + +json_add_array interfaces + +client_count=0 +CLIENT_INTERFACES=$(ls "/sys/class/net/$MESH_INTERFACE/brif" | grep -v '^bat') + +for clientif in ${CLIENT_INTERFACES}; do + json_add_object "" + cc=$(bridge fdb show br "$MESH_INTERFACE" brport "$clientif" | grep -v self | grep -v permanent -c) + client_count=$((client_count + cc)) + json_add_string "$clientif" "$cc" + json_close_object #iface object +done + +json_close_object #interfaces array +json_add_string "count" "$client_count" +json_close_object #clients + +json_dump > /tmp/nodewatcher.json + +#exit 0 \ No newline at end of file diff --git a/src/packages/fff/fff-nodewatcher/files/usr/lib/nodewatcher.d/11-systemdata.sh b/src/packages/fff/fff-nodewatcher/files/usr/lib/nodewatcher.d/11-systemdata.sh new file mode 100644 index 0000000..b66f46c --- /dev/null +++ b/src/packages/fff/fff-nodewatcher/files/usr/lib/nodewatcher.d/11-systemdata.sh @@ -0,0 +1,144 @@ +#!/bin/sh + +. /usr/share/libubox/jshn.sh +json_init + +SCRIPT_STATUS_FILE=$(uci get nodewatcher.@script[0].status_text_file) +SCRIPT_VERSION=$(cat /etc/nodewatcher_version) + +debug() { + (>&2 echo "nodewatcher: $1") +} + +debug "Collecting basic system status data" + +json_add_object "system" + +json_add_string "status" "online" +hostname="$(cat /proc/sys/kernel/hostname)" +mac=$(awk '{ mac=toupper($1); gsub(":", "", mac); print mac }' /sys/class/net/br-client/address 2>/dev/null) + +[ "$hostname" = "OpenWrt" ] && hostname="$mac" +[ "$hostname" = "FFF" ] && hostname="$mac" + +json_add_string "hostname" "$hostname" + +description="$(uci -q get fff.system.description)" +[ -n "$description" ] && json_add_string "description" "$description" + +latitude="$(uci -q get fff.system.latitude)" +longitude="$(uci -q get fff.system.longitude)" +if [ -n "$longitude" -a -n "$latitude" ]; then + json_add_object "geo" + json_add_string "lat" "$latitude" + json_add_string "lng" "$longitude" + json_close_object #geo +fi + +position_comment="$(uci -q get fff.system.position_comment)" +[ -n "$position_comment" ] && json_add_string "position_comment" "$position_comment" + +contact="$(uci -q get fff.system.contact)" +[ -n "$contact" ] && json_add_string "contact" "$contact" + +json_add_string "uptime" $(awk '{ printf $1 }' /proc/uptime) +json_add_string "idletime" $(awk '{ printf $2 }' /proc/uptime) + +# Add Memory +json_add_object "memory" +json_add_string "total" $(awk '/^MemTotal/ { printf $2 }' /proc/meminfo) +json_add_string "available" $(awk '/^MemAvail/ { printf $2 }' /proc/meminfo) +json_add_string "caching" $(awk '/^Cached/ { printf $2 }' /proc/meminfo) +json_add_string "buffering" $(awk '/^Buffers/ { printf $2 }' /proc/meminfo) +json_add_string "free" $(awk '/^MemFree/ { printf $2 }' /proc/meminfo) +json_close_object #memory + +# Add CPU +json_add_array cpu +IN=$(awk -F': ' ' /model/ { printf $2";" }' /proc/cpuinfo) +IFS=';'; set $IN; IFS=$' \t\n' +for a; do json_add_string "" "$a"; done +json_close_object #cpu + +# Add Chipset +IN=$(awk -F': ' ' /system type/ { printf $2";" }' /proc/cpuinfo) +IFS=';'; set $IN; IFS=$' \t\n' +for a; do json_add_string "chipset" "$a"; done + +IN=$(awk -F': ' ' /platform/ { printf $2";" }' /proc/cpuinfo) +IFS=';'; set $IN; IFS=$' \t\n' +for a; do json_add_string "chipset" "$a"; done + +model=$(cat /var/sysinfo/model) +[ -n "$model" ] && json_add_string "model" "$model" +local_time=$(date +%s) +[ -n "$local_time" ] && json_add_string "local_time" "$local_time" +loadavg=$(awk '{ printf $3 }' /proc/loadavg) +[ -n "$loadavg" ] && json_add_string "loadavg" "$loadavg" +processes=$(awk '{ printf $4 }' /proc/loadavg) +[ -n "$processes" ] && json_add_string "processes" "$processes" + +debug "Collecting version information" +json_close_object #system + +if [ -e /sys/module/batman_adv/version ]; then + batman_advanced_version=$(cat /sys/module/batman_adv/version) + json_add_object "batman_advanced" + json_add_string "version" "$batman_advanced_version" + json_close_object #batman_advanced +fi + +json_select system +json_add_string "kernel_version" "$(uname -r)" +json_add_string "nodewatcher_version" "$SCRIPT_VERSION" + +if [ -x /usr/bin/fastd ]; then + json_add_string "fastd_version" "$(/usr/bin/fastd -v | awk '{ print $2 }')" +fi + +json_close_object #system + +if [ -x /usr/sbin/babeld ]; then + json_add_object "babel" + json_add_string "version" "$(/usr/sbin/babeld -V 2>&1)" + json_close_object #babel +fi + +json_select system +json_add_object "dist" +. /etc/openwrt_release +json_add_string "name" "$DISTRIB_ID" +json_add_string "version" "$DISTRIB_RELEASE" +json_close_object #dist + +json_add_object "firmware" +. /etc/firmware_release +json_add_string "version" "$FIRMWARE_VERSION" +json_add_string "revision" "$BUILD_DATE" +json_add_object "openwrt" +json_add_string "core_revision" "$OPENWRT_CORE_REVISION" +json_add_string "feeds_packages_revision" "$OPENWRT_FEEDS_PACKAGES_REVISION" +json_close_object #openwrt +json_close_object #firmware + +debug "Collecting hood information and additional status data" + +json_add_object "hood" +hoodname="$(uci -q get "system.@system[0].hood")" +[ -n "$hoodname" ] && json_add_string "name" "$hoodname" +hoodid="$(uci -q get "system.@system[0].hoodid")" +[ -n "$hoodid" ] && json_add_string "id" "$hoodid" +json_close_object #hood + +if [ -s "$SCRIPT_STATUS_FILE" ]; then + status_text="$(cat "$SCRIPT_STATUS_FILE")" + json_add_string "status_text" "$status_text" +fi + +# Checks if fastd is running +vpn_active=0 +pidof fastd >/dev/null && vpn_active=1 +json_add_string "vpn_active" "$vpn_active" + +json_dump > /tmp/nodewatcher.json +#exit 0 \ No newline at end of file diff --git a/src/packages/fff/fff-s2nproxy/usr/lib/nodewatcher.d/91-s2nproxy.sh b/src/packages/fff/fff-s2nproxy/usr/lib/nodewatcher.d/91-s2nproxy.sh new file mode 100644 index 0000000..8a8bb66 --- /dev/null +++ b/src/packages/fff/fff-s2nproxy/usr/lib/nodewatcher.d/91-s2nproxy.sh @@ -0,0 +1,142 @@ +#!/bin/sh +. /lib/functions.sh + +. /usr/share/libubox/jshn.sh +json_load_file /tmp/nodewatcher.json + +json_add_array "s2nproxy" + +# Example for /etc/config/s2nproxy +# +# config s2nproxy 'DEVICE_NAME' +# option ip 'IP_ADDRESS' +# option device 'DEVICE_TYPE' +# option community 'COMMUNITY' + +# SNMP Walk +walk() { + community=$1 + ip=$2 + oid=$3 + echo $(snmpwalk -O vQ -P e -L n -v 1 -c $community $ip $oid) +} + +# Format the dirty mikrotik mac address result +format_mac() { + echo $(echo $1 | xargs | sed 's/^[[:blank:]]*//;s/[[:blank:]]*$//' | sed 's/\ /\:/g') +} + +s2np() { + if [ -z "$(uci -q get s2nproxy.$1.community)" ]; then + community="public" + else + community=$(uci get s2nproxy.$1.community) + fi + + ip=$(uci get s2nproxy.$1.ip) + + # Check if host is available + if ping -c 1 -W 1 $ip &> /dev/null ; then + json_add_object + json_add_string "ip" "$ip" + + # Switch throught device types + case "$(uci -q get s2nproxy.$1.device)" in + airmaxac) + # Ubiquity AirMAX Richtfunk + name=$(walk $community $ip "iso.3.6.1.2.1.1.5.0" | xargs) + mac=$(format_mac "$(walk $community $ip 1.3.6.1.2.1.2.2.1.6.8)") + hw=$(walk $community $ip "iso.3.6.1.4.1.41112.1.4.1.1.9.1" | xargs) + signal=$(walk $community $ip "iso.3.6.1.4.1.41112.1.4.5.1.5") + capacity=$(walk $community $ip "iso.3.6.1.4.1.41112.1.4.5.1.10" / 1024) + capacity=$(printf %.2f "$((10**9 * $capacity / 1048576))e-9") + remotemac=$(format_mac "$(walk $community $ip iso.3.6.1.4.1.41112.1.4.5.1.4.1)") + latency=$(ping -qc1 -4 $ip 2>&1 | awk -F'/' 'END{ print (/^round-trip/? $4:"0") }') + json_add_string "type" "airmaxac" + json_add_string "mac" "$mac" + json_add_string "name" "$name" + json_add_string "hw" "$hw" + json_add_string "signal" "$signal" + json_add_string "capacity" "$capacity" + json_add_string "remotemac" "$remotemac" + json_add_string "latency" "$latency" + ;; + + mikrotikap) + # Mikrotik AP + name=$(walk $community $ip 1.3.6.1.2.1.1.5 | xargs) + fw=$(walk $community $ip 1.3.6.1.4.1.14988.1.1.7.7 | xargs) + hw=$(walk $community $ip 1.3.6.1.4.1.14988.1.1.7.9 | xargs) + frequency=$(walk $community $ip 1.3.6.1.4.1.14988.1.1.1.3.1.7.1 | xargs) + frequency2=$(walk $community $ip 1.3.6.1.4.1.14988.1.1.1.3.1.7.2 | xargs) + mac=$(format_mac "$(walk $community $ip 1.3.6.1.2.1.2.2.1.6.1)") + clients=$(( $(walk $community $ip 1.3.6.1.4.1.14988.1.1.1.3.1.6.1) + $(walk $community $ip 1.3.6.1.4.1.14988.1.1.1.3.1.6.2) )) + latency=$(ping -qc1 -4 $ip 2>&1 | awk -F'/' 'END{ print (/^round-trip/? $4:"0") }') + json_add_string "type" "mikrotikap" + json_add_string "mac" "$mac" + json_add_string "name" "$name" + json_add_string "hw" "$hw" + json_add_string "fw" "$fw" + json_add_string "frequency" "$frequency" + json_add_string "frequency2" "$frequency2" + json_add_string "clients" "$clients" + json_add_string "latency" "$latency" + ;; + + mikrotikw60grf) + # Mikrotik 60GHz Richtfunk + name=$(walk $community $ip 1.3.6.1.2.1.1.5 | xargs) + fw=$(walk $community $ip 1.3.6.1.4.1.14988.1.1.7.7 | xargs) + hw=$(walk $community $ip 1.3.6.1.4.1.14988.1.1.7.9 | xargs) + signal=$(walk $community $ip 1.3.6.1.4.1.14988.1.1.1.8.1.8.1) + capacity=$(walk $community $ip 1.3.6.1.4.1.14988.1.1.1.8.1.13.1) + frequency=$(walk $community $ip 1.3.6.1.4.1.14988.1.1.1.8.1.6.1) + mac=$(format_mac "$(walk $community $ip 1.3.6.1.2.1.2.2.1.6.1)") + remotemac=$(format_mac "$(walk $community $ip 1.3.6.1.4.1.14988.1.1.1.8.1.5.1)") + latency=$(ping -qc1 -4 $ip 2>&1 | awk -F'/' 'END{ print (/^round-trip/? $4:"0") }') + json_add_string "type" "mikrotikw60grf" + json_add_string "mac" "$mac" + json_add_string "name" "$name" + json_add_string "hw" "$hw" + json_add_string "fw" "$fw" + json_add_string "signal" "$signal" + json_add_string "capacity" "$capacity" + json_add_string "frequency" "$frequency" + json_add_string "latency" "$latency" + json_add_string "remotemac" "$remotemac" + ;; + + mikrotikw60gst) + # Mikrotik 60GHz Sektor + name=$(walk $community $ip 1.3.6.1.2.1.1.5 | xargs) + fw=$(walk $community $ip 1.3.6.1.4.1.14988.1.1.7.7 | xargs) + hw=$(walk $community $ip 1.3.6.1.4.1.14988.1.1.7.9 | xargs) + frequency=$(walk $community $ip 1.3.6.1.4.1.14988.1.1.1.8.1.6.1) + mac=$(format_mac "$(walk $community $ip 1.3.6.1.2.1.2.2.1.6.1)") + latency=$(ping -qc1 -4 $ip 2>&1 | awk -F'/' 'END{ print (/^round-trip/? $4:"0") }') + json_add_string "type" "mikrotikw60gst" + json_add_string "mac" "$mac" + json_add_string "name" "$name" + json_add_string "hw" "$hw" + json_add_string "fw" "$fw" + json_add_string "latency" "$latency" + json_add_string "frequency" "$frequency" + ;; + + latenz) + latency=$(ping -qc1 -4 $ip 2>&1 | awk -F'/' 'END{ print (/^round-trip/? $4:"0") }') + json_add_string "type" "latenz" + json_add_string "latency" "$latency" + ;; + esac + + json_close_object + fi +} + +config_load s2nproxy +config_foreach s2np s2nproxy + +json_close_object #s2nproxy + +json_dump > /tmp/nodewatcher.json \ No newline at end of file diff --git a/src/packages/fff/fff-simple-tc/files/usr/lib/nodewatcher.d/71-simple-tc.sh b/src/packages/fff/fff-simple-tc/files/usr/lib/nodewatcher.d/71-simple-tc.sh new file mode 100644 index 0000000..dec7d90 --- /dev/null +++ b/src/packages/fff/fff-simple-tc/files/usr/lib/nodewatcher.d/71-simple-tc.sh @@ -0,0 +1,36 @@ +#!/bin/sh + +. /lib/functions.sh + +. /usr/share/libubox/jshn.sh +json_load_file /tmp/nodewatcher.json + +config_load simple-tc +tc_enabled="0" +tc_in="0" +tc_out="0" +parseTcInterface() { + local iface="$1" + + config_get ifname "$iface" ifname + [ "wan" = "$ifname" ] || return + + config_get tc_enabled "$iface" enabled "0" + config_get tc_in "$iface" limit_ingress "0" + config_get tc_out "$iface" limit_egress "0" +} +config_foreach parseTcInterface 'interface' + +json_add_object "traffic_control" +json_add_object "wan" + +json_add_string "enabled" "$tc_enabled" +json_add_string "in" "$tc_in" +json_add_string "out" "$tc_out" + +json_close_object #wan +json_close_object #traffic_control + +json_dump > /tmp/nodewatcher.json + +#exit 0 \ No newline at end of file diff --git a/src/packages/fff/fff-wireless/files/usr/lib/nodewatcher.d/61-airtime.sh b/src/packages/fff/fff-wireless/files/usr/lib/nodewatcher.d/61-airtime.sh new file mode 100644 index 0000000..7cd002c --- /dev/null +++ b/src/packages/fff/fff-wireless/files/usr/lib/nodewatcher.d/61-airtime.sh @@ -0,0 +1,31 @@ +#!/bin/sh + +. /usr/share/libubox/jshn.sh +json_load_file /tmp/nodewatcher.json + +json_add_object "airtime" + +w2dump="$(iw dev w2ap survey dump 2> /dev/null | sed '/Survey/,/\[in use\]/d')" +if [ -n "$w2dump" ] ; then + json_add_object "w2" + w2_ACT="$(ACTIVE=$(echo "$w2dump" | grep "active time:"); set ${ACTIVE:-0 0 0 0 0}; echo -e "${4}")" + w2_BUS="$(BUSY=$(echo "$w2dump" | grep "busy time:"); set ${BUSY:-0 0 0 0 0}; echo -e "${4}")" + json_add_string "active" "$w2_ACT" + json_add_string "busy" "$w2_BUS" + json_close_object #w2 +fi + +w5dump="$(iw dev w5ap survey dump 2> /dev/null | sed '/Survey/,/\[in use\]/d')" +if [ -n "$w5dump" ] ; then + json_add_object "w5" + w5_ACT="$(ACTIVE=$(echo "$w5dump" | grep "active time:"); set ${ACTIVE:-0 0 0 0 0}; echo -e "${4}")" + w5_BUS="$(BUSY=$(echo "$w5dump" | grep "busy time:"); set ${BUSY:-0 0 0 0 0}; echo -e "${4}")" + json_add_string "active" "$w5_ACT" + json_add_string "busy" "$w5_BUS" + json_close_object #w5 +fi +json_close_object #airtime + +json_dump > /tmp/nodewatcher.json + +#exit 0 \ No newline at end of file