{"id":415,"date":"2025-12-02T09:52:42","date_gmt":"2025-12-02T09:52:42","guid":{"rendered":"http:\/\/blog.ltzs.us\/?p=415"},"modified":"2025-12-02T09:52:42","modified_gmt":"2025-12-02T09:52:42","slug":"network-ping-checks","status":"publish","type":"post","link":"http:\/\/blog.ltzs.us\/?p=415","title":{"rendered":"Network ping checks"},"content":{"rendered":"\n<p>On the farm, I need to ping hosts to make sure all the antennas and routers are working correctly. I have historically been doing this with a Tasmota  device using the following ruleset:<\/p>\n\n\n\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-\">rule1\nON Time#Initialized DO backlog ruletimer2 10; var2 1 ENDON   \non rules#timer==2 do backlog add2 1; ruletimer2 8; event t1=%var2% endon   \non var2#state&gt;=12 do var2 1 endon   \non event#t1==1 do backlog ping4 192.168.3.144; var3 MoringaRouter endon   \non event#t1==2 do backlog ping4 192.168.3.9; var3 DortoirRouter endon   \non event#t1==3 do backlog ping4 192.168.3.22; var3 ClinicRouter endon   \non event#t1==4 do backlog ping4 192.168.3.14; var3 CouvoirRouter endon   \non event#t1==5 do backlog ping4 192.168.3.33; var3 MSRouter endon   \non event#t1==6 do backlog ping4 192.168.3.53; var3 GuardRouter endon   \non event#t1==7 do backlog ping4 192.168.3.29; var3 JohannesRouter endon   \non event#t1==8 do backlog ping4 192.168.3.64; var3 SchoolRouter endon   \non event#t1==9 do backlog ping4 192.168.3.137; var3 AtelierRouter endon   \non event#t1==10 do backlog ping4 192.168.3.52; var3 DogoRouter endon   \non event#t1==11 do backlog ping4 192.168.3.11; var3 BouchRouter endon\non ping#?#Success do WebQuery http:\/\/192.168.3.98:8086\/write?db=homeautomation&amp;rp=four_weeks POST ping,device=%var3% value=%value% ENDON<\/code><\/pre>\n\n\n\n<p>However, I can do the same thing a little faster with a debian system. <\/p>\n\n\n\n<p><mark style=\"background-color:#fcb900\" class=\"has-inline-color\"><code>sudo nano ~\/ping_monitor.sh<\/code><\/mark><\/p>\n\n\n\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-bash\">#!\/bin\/bash\n\n# Configuration\nHOSTS_FILE=&quot;list.txt&quot;\nINFLUXDB_URL=&quot;http:\/\/192.168.3.98:8086\/write?db=homeautomation&amp;rp=four_weeks&quot;\nPING_COUNT=4\nINTERVAL=10\n\n# Function to ping a host and return success count\nping_host() {\n    local ip=$1\n    local host=$2\n    \n    # Ping the host and count successful responses\n    local success_count=$(ping -c $PING_COUNT -W 1 &quot;$ip&quot; 2&gt;\/dev\/null | grep -c &quot;bytes from&quot;)\n    \n    echo &quot;$success_count&quot;\n}\n\n# Function to send data to InfluxDB\nsend_to_influxdb() {\n    local host=$1\n    local value=$2\n    \n    # InfluxDB line protocol format\n    local data=&quot;ping,device=$host value=$value&quot;\n    \n    # Send to InfluxDB\n    curl -s -XPOST &quot;$INFLUXDB_URL&quot; --data-binary &quot;$data&quot; &gt; \/dev\/null 2&gt;&amp;1\n    \n    if [ $? -eq 0 ]; then\n        echo &quot;$(date &#039;+%Y-%m-%d %H:%M:%S&#039;) - $host: $value\/4 pings successful - sent to InfluxDB&quot;\n    else\n        echo &quot;$(date &#039;+%Y-%m-%d %H:%M:%S&#039;) - $host: $value\/4 pings successful - FAILED to send to InfluxDB&quot;\n    fi\n}\n\n# Main monitoring loop\necho &quot;Starting ping monitor...&quot;\necho &quot;Hosts file: $HOSTS_FILE&quot;\necho &quot;InfluxDB: $INFLUXDB_URL&quot;\necho &quot;Interval: ${INTERVAL}s&quot;\necho &quot;---&quot;\n\nwhile true; do\n    # Read hosts file and process each line\n    while IFS=&#039;,&#039; read -r ip host; do\n        # Skip empty lines\n        [ -z &quot;$ip&quot; ] &amp;&amp; continue\n        \n        # Ping host in background to parallelize\n        (\n            success_count=$(ping_host &quot;$ip&quot; &quot;$host&quot;)\n            send_to_influxdb &quot;$host&quot; &quot;$success_count&quot;\n        ) &amp;\n        \n    done &lt; &quot;$HOSTS_FILE&quot;\n    \n    # Wait for all background pings to complete\n    wait\n    \n    # Sleep until next interval\n    sleep $INTERVAL\ndone<\/code><\/pre>\n\n\n\n<p><mark style=\"background-color:#fcb900\" class=\"has-inline-color\"><code>sudo chmod +x ping_monitor.sh<\/code><\/mark><\/p>\n\n\n\n<p><mark style=\"background-color:#fcb900\" class=\"has-inline-color\"><code>sudo nano \/etc\/systemd\/system\/ping-monitor.service<\/code><\/mark><\/p>\n\n\n\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-bash\">[Unit]\nDescription=Ping Monitor to InfluxDB\nAfter=network.target\n\n[Service]\nType=simple\nUser=YOUR_USERNAME\nWorkingDirectory=\/path\/to\/script\/directory\nExecStart=\/path\/to\/ping_monitor.sh\nRestart=always\n\n[Install]\nWantedBy=multi-user.target<\/code><\/pre>\n\n\n\n<p><mark style=\"background-color:#fcb900\" class=\"has-inline-color\"><code>sudo systemctl enable ping-monitor<\/code><\/mark><br><mark style=\"background-color:#fcb900\" class=\"has-inline-color\"><code>sudo systemctl start ping-monitor<\/code><\/mark><\/p>\n","protected":false},"excerpt":{"rendered":"<p>On the farm, I need to ping hosts to make sure all the antennas and routers are working correctly. I have historically been doing this with a Tasmota device using the following ruleset: However, I can do the same thing a little faster with a debian system. sudo nano ~\/ping_monitor.sh sudo chmod +x ping_monitor.sh sudo&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-415","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"http:\/\/blog.ltzs.us\/index.php?rest_route=\/wp\/v2\/posts\/415","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/blog.ltzs.us\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/blog.ltzs.us\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/blog.ltzs.us\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/blog.ltzs.us\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=415"}],"version-history":[{"count":1,"href":"http:\/\/blog.ltzs.us\/index.php?rest_route=\/wp\/v2\/posts\/415\/revisions"}],"predecessor-version":[{"id":416,"href":"http:\/\/blog.ltzs.us\/index.php?rest_route=\/wp\/v2\/posts\/415\/revisions\/416"}],"wp:attachment":[{"href":"http:\/\/blog.ltzs.us\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=415"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/blog.ltzs.us\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=415"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/blog.ltzs.us\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=415"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}