diff --git a/files/etc/dropbear/authorized_keys b/files/etc/dropbear/authorized_keys index cf83b5e..67c6d4c 100644 --- a/files/etc/dropbear/authorized_keys +++ b/files/etc/dropbear/authorized_keys @@ -1 +1,2 @@ ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILcethx5tVJWXTj4GjG7h75Fr3IKrwdkpBRc8sN6uRrA andrey.perliev@gmail.com +ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBjS7Ii3+TQcZcUkzw4kHMqZ0omyBHPl6uD9y4c4ZWBM norn@parahub-ng diff --git a/files/etc/uci-defaults/99-parahub-mesh b/files/etc/uci-defaults/99-parahub-mesh index 13ad0ca..f0ed257 100755 --- a/files/etc/uci-defaults/99-parahub-mesh +++ b/files/etc/uci-defaults/99-parahub-mesh @@ -482,7 +482,17 @@ YGG_ADDR=$(yggdrasil -address -useconffile /etc/yggdrasil.conf 2>/dev/null || ec echo "YGGDRASIL_ADDRESS=${YGG_ADDR}" >> /etc/parahub/keys # ============================================================================ -# 12. FINAL +# 12. HEARTBEAT (phone-home to Parahub cloud) +# ============================================================================ + +chmod +x /usr/bin/parahub-heartbeat + +# Cron: every 5 minutes +echo "*/5 * * * * /usr/bin/parahub-heartbeat" >> /etc/crontabs/root +/etc/init.d/cron enable + +# ============================================================================ +# 13. FINAL # ============================================================================ # Log completion diff --git a/files/usr/bin/parahub-heartbeat b/files/usr/bin/parahub-heartbeat new file mode 100755 index 0000000..f06dfd8 --- /dev/null +++ b/files/usr/bin/parahub-heartbeat @@ -0,0 +1,31 @@ +#!/bin/sh +# Phone-home heartbeat to Parahub cloud via Yggdrasil +PARAHUB_API="http://[200:abb9:5810:37d3:8a4c:98a6:b82b:969a]/api/v1/iot/mesh/heartbeat" +HEARTBEAT_KEY="IqPosrcpTQKSbLHxOG3iLTl_K2MsDxvd" + +# Check Yggdrasil connectivity first +ping6 -c 1 -W 3 200:abb9:5810:37d3:8a4c:98a6:b82b:969a >/dev/null 2>&1 || exit 0 + +# Read identity from /etc/parahub/keys +. /etc/parahub/keys 2>/dev/null +MAC="${NODE_MAC:-$(cat /sys/class/net/br-lan/address 2>/dev/null)}" +HOSTNAME="$(uci -q get system.@system[0].hostname)" +YGG_ADDR="${YGGDRASIL_ADDRESS:-unknown}" +SSID="${PRIVATE_SSID:-unknown}" +UPTIME="$(cut -d. -f1 /proc/uptime)" + +# Detect hardware from board_name +HW=$(cat /tmp/sysinfo/board_name 2>/dev/null) +case "$HW" in + glinet,gl-axt1800) HW="axt1800" ;; + glinet,gl-mt3000) HW="mt3000" ;; + glinet,gl-mt6000) HW="mt6000" ;; + asus,rt-ax53u) HW="ax53u" ;; + *) HW="${HW:-unknown}" ;; +esac + +curl -s -m 10 -X POST \ + -H "Content-Type: application/json" \ + -H "Authorization: Bearer ${HEARTBEAT_KEY}" \ + -d "{\"mac\":\"${MAC}\",\"hostname\":\"${HOSTNAME}\",\"yggdrasil_address\":\"${YGG_ADDR}\",\"firmware_version\":\"25.12.0-rc4\",\"hardware_profile\":\"${HW}\",\"uptime\":${UPTIME},\"private_ssid\":\"${SSID}\"}" \ + "${PARAHUB_API}" >/dev/null 2>&1