Repository: raspishake/rsudp (language: python)

Issue:
feature request: extra text for Telegram (similar to extra text for twitter module)
please add the function to add extra text to the telegram messages, as you can with twitter. thanks.


Discussion / hints:
This feature has been implemented. You can now add the following to your settings file:

```
"telegram": {
    "enabled": true,
    "send_images": true,
    "token": "n/a",
    "chat_id": "n/a",
    "extra_text": "EXTRA TEXT TEST"},
```
which should produce a message like this:

> (Raspberry Shake station AM.Z0000) Event detected at 2020-01-30 08:27:39.49 UTC EXTRA TEXT TEST - live feed ➡️  https://stationview.raspberryshake.org/#?net=AM&sta=Z0000

The difference between this and the Twitter module is that Telegram is not bound by the 280 character limit. In theory the limitation on what you can type in this field is actually something like 3900 characters, which a function will check for 

Note: I have not checked as to whether Telegram will resolve newline characters posted in this field, or whether they will be ignored. They would have to be URL-safe, (i.e. `%0A`) as I'm sure the module will escape `\n`s in order to communicate with the api.

Fix patch:
diff --git a/docs/_sources/settings.rst.txt b/docs/_sources/settings.rst.txt
index 238105b..7d3d880 100644
--- a/docs/_sources/settings.rst.txt
+++ b/docs/_sources/settings.rst.txt
@@ -361,10 +361,23 @@ and will not as readily lock your account if there happen to be many posts in a
 (in comparison to Twitter).
 
 If :json:`"enabled"` is :json:`true`, and bot :json:`"token"` key is correctly entered,
-:class:`rsudp.c_telegram.Telegrammer` will use the Telegram bot API to create alerts when an :code:`ALARM` message arrives on the queue.
+:class:`rsudp.c_telegram.Telegrammer` will use the Telegram bot API to create alerts when an
+:code:`ALARM` message arrives on the queue.
 If :json:`"send_images"` is :json:`true`, then the module will also send a saved image of the event,
 if :json:`"eq_screenshots"` is set to :json:`true` in the :json:`"plot"` module.
 
+If any text is put in the :json:`"extra_text"` string, then the software will insert that text
+(no longer than 3900 characters) into the message after the UTC designation and prior to the
+stationview hyperlink.
+This works similarly to the :json:`"extra_text"` field in the Twitter module below.
+(See :ref:`examples`.)
+
+.. warning::
+
+    Starting the software with an :json:`"extra_text"` string in excess of 3900 characters
+    will yield a warning and the :json:`"extra_text"` string will be truncated
+    in order to avoid the message being rejected for exceeding the 4096 character limit.
+
 .. _setting-up-telegram:
 
 Setting up a Telegram Bot
@@ -393,12 +406,15 @@ Telegram alerts from rsudp.
     #. :code:`@BotFather` will then give you an access token for your new bot.
 
 #. Enter your bot's access token in the :json:`"token"` field of the settings file.
-#. Enter a user or group ID into the :json:`"chat_id"` field (or multiple separated by commas), which you can find by following the instructions in |so_answer|.
+#. Enter a user or group ID into the :json:`"chat_id"` field (or multiple separated by commas),
+    which you can find by following the instructions in |so_answer|.
 
-If you wish to broadcast telegrams to a group or a channel, first add the bot to the group using your user account,
-then follow the instructions in the previous link,
+If you wish to broadcast telegrams to a group or a channel, first add the bot to the group using your
+user account, then follow the instructions in the previous link,
 where you will see the group chat ID appear as a field in the last JSON entry.
-This chat ID may be negative, in which case you must enter the negative sign into :json:`"chat_id"` as well.
+This chat ID may be negative, in which case you must enter the negative sign into :json:`"chat_id"`
+as well.
+
 
 `Back to top ↑ <#top>`_
 
@@ -412,8 +428,15 @@ create tweets when an ALARM message arrives on the queue.
 If :json:`"tweet_images"` is :json:`true`, then the module will also tweet a saved image of the event,
 if :json:`"eq_screenshots"` is set to :json:`true` in the "plot" module. If any text is put in the
 :json:`"extra_text"` string, then the software will insert that text (no longer than 103 characters)
-into the tweets after a single space. For example, an unmodified tweet with :code:`"extra_text": ""`
-might look like this:
+into the tweets after a single space. See examples below.
+
+.. _eq-tweet-examples:
+
+Examples
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+As a comparison point, an unmodified tweet with :code:`"extra_text": ""` might look like
+the following:
 
 .. _eq-tweet:
 .. figure::  _static/eq_tweet.png
@@ -423,7 +446,7 @@ might look like this:
 
 
 Changing the :json:`"extra_text"` parameter to :code:`"extra_text": "from #Williamstown #MA"`
-would render something like the following:
+would render something like this:
 
 .. _eq-tweet-extra:
 .. figure::  _static/eq_tweet_extra.png
@@ -656,12 +679,13 @@ By default, the settings are as follows:
         "enabled": false,
         "send_images": true,
         "token": "n/a",
-        "chat_id": "n/a"},
+        "chat_id": "n/a",
+        "extra_text": ""},
     "rsam": {
         "enabled": false,
         "quiet": true,
-        "fwaddr": false,
-        "fwport": false,
+        "fwaddr": "192.168.1.254",
+        "fwport": 8887,
         "fwformat": "LITE",
         "channel": "HZ",
         "interval": 10,
diff --git a/docs/about.html b/docs/about.html
index 3ce2dc4..766e3d1 100644
--- a/docs/about.html
+++ b/docs/about.html
@@ -37,7 +37,7 @@
     <link rel="index" title="Index" href="genindex.html" />
     <link rel="search" title="Search" href="search.html" />
     <link rel="next" title="2. Installing rsudp" href="installing.html" />
-    <link rel="prev" title="rsudp 1.0.2" href="index.html" /> 
+    <link rel="prev" title="rsudp 1.0.3" href="index.html" /> 
 </head>
 
 <body class="wy-body-for-nav">
@@ -64,7 +64,7 @@
             
             
               <div class="version">
-                1.0.2
+                1.0.3
               </div>
             
           
@@ -306,7 +306,7 @@ <h2><span class="section-number">1.3. </span>What can’t rsudp do?<a class="hea
         <a href="installing.html" class="btn btn-neutral float-right" title="2. Installing rsudp" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a>
       
       
-        <a href="index.html" class="btn btn-neutral float-left" title="rsudp 1.0.2" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a>
+        <a href="index.html" class="btn btn-neutral float-left" title="rsudp 1.0.3" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a>
       
     </div>
   
diff --git a/docs/c_alert.html b/docs/c_alert.html
index 561c2a0..e9aa7b5 100644
--- a/docs/c_alert.html
+++ b/docs/c_alert.html
@@ -64,7 +64,7 @@
             
             
               <div class="version">
-                1.0.2
+                1.0.3
               </div>
             
           
diff --git a/docs/c_alertsound.html b/docs/c_alertsound.html
index 4463545..292eeed 100644
--- a/docs/c_alertsound.html
+++ b/docs/c_alertsound.html
@@ -64,7 +64,7 @@
             
             
               <div class="version">
-                1.0.2
+                1.0.3
               </div>
             
           
diff --git a/docs/c_consumer.html b/docs/c_consumer.html
index 768743a..99b61d3 100644
--- a/docs/c_consumer.html
+++ b/docs/c_consumer.html
@@ -64,7 +64,7 @@
             
             
               <div class="version">
-                1.0.2
+                1.0.3
               </div>
             
           
diff --git a/docs/c_custom.html b/docs/c_custom.html
index ce6f34f..dcc18ff 100644
--- a/docs/c_custom.html
+++ b/docs/c_custom.html
@@ -64,7 +64,7 @@
             
             
               <div class="version">
-                1.0.2
+                1.0.3
               </div>
             
           
diff --git a/docs/c_forward.html b/docs/c_forward.html
index 5347c5f..787009d 100644
--- a/docs/c_forward.html
+++ b/docs/c_forward.html
@@ -64,7 +64,7 @@
             
             
               <div class="version">
-                1.0.2
+                1.0.3
               </div>
             
           
diff --git a/docs/c_plot.html b/docs/c_plot.html
index 67fa6f6..1a9dad3 100644
--- a/docs/c_plot.html
+++ b/docs/c_plot.html
@@ -64,7 +64,7 @@
             
             
               <div class="version">
-                1.0.2
+                1.0.3
               </div>
             
           
@@ -330,7 +330,7 @@ <h1><a class="reference internal" href="#module-rsudp.c_plot" title="rsudp.c_plo
 
 <dl class="py method">
 <dt id="rsudp.c_plot.Plot.savefig">
-<code class="sig-name descname">savefig</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">event_time</span><span class="o">=</span><span class="default_value">UTCDateTime(2021, 10, 18, 2, 21, 48, 420003)</span></em>, <em class="sig-param"><span class="n">event_time_str</span><span class="o">=</span><span class="default_value">'2021-10-18-022148'</span></em><span class="sig-paren">)</span><a class="headerlink" href="#rsudp.c_plot.Plot.savefig" title="Permalink to this definition">¶</a></dt>
+<code class="sig-name descname">savefig</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">event_time</span><span class="o">=</span><span class="default_value">UTCDateTime(2021, 10, 29, 21, 36, 38, 443305)</span></em>, <em class="sig-param"><span class="n">event_time_str</span><span class="o">=</span><span class="default_value">'2021-10-29-213638'</span></em><span class="sig-paren">)</span><a class="headerlink" href="#rsudp.c_plot.Plot.savefig" title="Permalink to this definition">¶</a></dt>
 <dd><p>Saves the figure and puts an IMGPATH message on the master queue.
 This message can be used to upload the image to various services.</p>
 <dl class="field-list simple">
diff --git a/docs/c_rsam.html b/docs/c_rsam.html
index 23e66b6..d2181ba 100644
--- a/docs/c_rsam.html
+++ b/docs/c_rsam.html
@@ -64,7 +64,7 @@
             
             
               <div class="version">
-                1.0.2
+                1.0.3
               </div>
             
           
diff --git a/docs/c_telegram.html b/docs/c_telegram.html
index a9fd91b..4f1a8c1 100644
--- a/docs/c_telegram.html
+++ b/docs/c_telegram.html
@@ -64,7 +64,7 @@
             
             
               <div class="version">
-                1.0.2
+                1.0.3
               </div>
             
           
@@ -211,7 +211,7 @@
 <span id="rsudp-c-telegram-telegram-alerts"></span><h1><a class="reference internal" href="#module-rsudp.c_telegram" title="rsudp.c_telegram"><code class="xref py py-data docutils literal notranslate"><span class="pre">rsudp.c_telegram</span></code></a> (Telegram alerts)<a class="headerlink" href="#module-rsudp.c_telegram" title="Permalink to this headline">¶</a></h1>
 <dl class="py class">
 <dt id="rsudp.c_telegram.Telegrammer">
-<em class="property">class </em><code class="sig-prename descclassname">rsudp.c_telegram.</code><code class="sig-name descname">Telegrammer</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">token</span></em>, <em class="sig-param"><span class="n">chat_id</span></em>, <em class="sig-param"><span class="n">testing</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="n">q</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="n">send_images</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="n">sender</span><span class="o">=</span><span class="default_value">'Telegram'</span></em><span class="sig-paren">)</span><a class="headerlink" href="#rsudp.c_telegram.Telegrammer" title="Permalink to this definition">¶</a></dt>
+<em class="property">class </em><code class="sig-prename descclassname">rsudp.c_telegram.</code><code class="sig-name descname">Telegrammer</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">token</span></em>, <em class="sig-param"><span class="n">chat_id</span></em>, <em class="sig-param"><span class="n">testing</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="n">q</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="n">send_images</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="n">extra_text</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="n">sender</span><span class="o">=</span><span class="default_value">'Telegram'</span></em><span class="sig-paren">)</span><a class="headerlink" href="#rsudp.c_telegram.Telegrammer" title="Permalink to this definition">¶</a></dt>
 <dd><blockquote>
 <div><div class="versionadded">
 <p><span class="versionmodified added">New in version 0.4.2.</span></p>
@@ -227,6 +227,7 @@
 <li><p><strong>token</strong> (<a class="reference external" href="https://docs.python.org/3/library/stdtypes.html#str" title="(in Python v3.10)"><em>str</em></a>) – bot token from Telegram bot creation</p></li>
 <li><p><strong>chat_id</strong> (<a class="reference external" href="https://docs.python.org/3/library/stdtypes.html#str" title="(in Python v3.10)"><em>str</em></a>) – Telegram chat ID number that this module will post to</p></li>
 <li><p><strong>send_images</strong> (<a class="reference external" href="https://docs.python.org/3/library/functions.html#bool" title="(in Python v3.10)"><em>bool</em></a>) – whether or not to send images. if False, only alerts will be sent.</p></li>
+<li><p><strong>extra_text</strong> (<a class="reference external" href="https://docs.python.org/3/library/functions.html#bool" title="(in Python v3.10)"><em>bool</em></a><em> or </em><a class="reference external" href="https://docs.python.org/3/library/stdtypes.html#str" title="(in Python v3.10)"><em>str</em></a>) – Approximately 3900 additional characters to post as part of the Telegram message (Telegram message limits are 4096 characters). Longer messages will be truncated.</p></li>
 <li><p><strong>q</strong> (<a class="reference external" href="https://docs.python.org/3/library/queue.html#queue.Queue" title="(in Python v3.10)"><em>queue.Queue</em></a>) – queue of data and messages sent by <a class="reference internal" href="c_consumer.html#rsudp.c_consumer.Consumer" title="rsudp.c_consumer.Consumer"><code class="xref py py-class docutils literal notranslate"><span class="pre">rsudp.c_consumer.Consumer</span></code></a></p></li>
 </ul>
 </dd>
diff --git a/docs/c_tweet.html b/docs/c_tweet.html
index 312462b..19e0c72 100644
--- a/docs/c_tweet.html
+++ b/docs/c_tweet.html
@@ -64,7 +64,7 @@
             
             
               <div class="version">
-                1.0.2
+                1.0.3
               </div>
             
           
@@ -244,7 +244,7 @@
 <li><p><strong>access_token</strong> (<a class="reference external" href="https://docs.python.org/3/library/stdtypes.html#str" title="(in Python v3.10)"><em>str</em></a>) – Twitter calls this the “consumer access token”</p></li>
 <li><p><strong>access_secret</strong> (<a class="reference external" href="https://docs.python.org/3/library/stdtypes.html#str" title="(in Python v3.10)"><em>str</em></a>) – Twitter calls this the “consumer access secret”</p></li>
 <li><p><strong>tweet_images</strong> (<a class="reference external" href="https://docs.python.org/3/library/functions.html#bool" title="(in Python v3.10)"><em>bool</em></a>) – whether or not to send images. if False, only alerts will be sent.</p></li>
-<li><p><strong>extra_text</strong> (<a class="reference external" href="https://docs.python.org/3/library/functions.html#bool" title="(in Python v3.10)"><em>bool</em></a><em> or </em><a class="reference external" href="https://docs.python.org/3/library/stdtypes.html#str" title="(in Python v3.10)"><em>str</em></a>) – 103 additional characters to post as part of the twitter message.</p></li>
+<li><p><strong>extra_text</strong> (<a class="reference external" href="https://docs.python.org/3/library/functions.html#bool" title="(in Python v3.10)"><em>bool</em></a><em> or </em><a class="reference external" href="https://docs.python.org/3/library/stdtypes.html#str" title="(in Python v3.10)"><em>str</em></a>) – 103 additional characters to post as part of the twitter message (longer messages will be truncated).</p></li>
 <li><p><strong>q</strong> (<a class="reference external" href="https://docs.python.org/3/library/queue.html#queue.Queue" title="(in Python v3.10)"><em>queue.Queue</em></a>) – queue of data and messages sent by <a class="reference internal" href="c_consumer.html#rsudp.c_consumer.Consumer" title="rsudp.c_consumer.Consumer"><code class="xref py py-class docutils literal notranslate"><span class="pre">rsudp.c_consumer.Consumer</span></code></a></p></li>
 </ul>
 </dd>
diff --git a/docs/c_write.html b/docs/c_write.html
index 515fb02..bb3e2fc 100644
--- a/docs/c_write.html
+++ b/docs/c_write.html
@@ -64,7 +64,7 @@
             
             
               <div class="version">
-                1.0.2
+                1.0.3
               </div>
             
           
diff --git a/docs/client.html b/docs/client.html
index 2c83057..baa0bba 100644
--- a/docs/client.html
+++ b/docs/client.html
@@ -64,7 +64,7 @@
             
             
               <div class="version">
-                1.0.2
+                1.0.3
               </div>
             
           
diff --git a/docs/contributing.html b/docs/contributing.html
index 68aa014..c3eed11 100644
--- a/docs/contributing.html
+++ b/docs/contributing.html
@@ -64,7 +64,7 @@
             
             
               <div class="version">
-                1.0.2
+                1.0.3
               </div>
             
           
@@ -239,7 +239,7 @@ <h2><span class="section-number">2.1. </span>Code contributions<a class="headerl
 <li><p>GPIO pin interaction module (lights, motor control, buzzers, etc.)</p></li>
 <li><p>IFTTT integration</p></li>
 <li><p>Integration into other social media apps beyond Telegram and Twitter</p></li>
-<li><p>plot <a href="https://docs.obspy.org/tutorial/code_snippets/trigger_tutorial.html#advanced-example" target="_blank">trigger on-off events</a> for times set in <code class="docutils literal notranslate"><span class="pre">ALARM</span></code> and <code class="docutils literal notranslate"><span class="pre">RESET</span></code> messages using <a class="reference external" href="https://matplotlib.org/api/_as_gen/matplotlib.pyplot.axvline.html#matplotlib.pyplot.axvline" title="(in Matplotlib v3.3.3)"><code class="xref py py-func docutils literal notranslate"><span class="pre">matplotlib.pyplot.axvline()</span></code></a>:</p>
+<li><p>plot <a href="https://docs.obspy.org/tutorial/code_snippets/trigger_tutorial.html#advanced-example" target="_blank">trigger on-off events</a> for times set in <code class="docutils literal notranslate"><span class="pre">ALARM</span></code> and <code class="docutils literal notranslate"><span class="pre">RESET</span></code> messages using <a class="reference external" href="https://matplotlib.org/api/_as_gen/matplotlib.pyplot.axvline.html#matplotlib.pyplot.axvline" title="(in Matplotlib v3.4.3)"><code class="xref py py-func docutils literal notranslate"><span class="pre">matplotlib.pyplot.axvline()</span></code></a>:</p>
 <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">on_events</span> <span class="o">=</span> <span class="p">[</span><span class="n">UTCDateTime1</span><span class="p">,</span> <span class="n">UTCDateTime3</span><span class="p">]</span>
 <span class="k">for</span> <span class="n">time</span> <span class="ow">in</span> <span class="n">on_events</span><span class="p">:</span>
     <span class="n">plt</span><span class="o">.</span><span class="n">axvline</span><span class="p">(</span><span class="n">x</span><span class="o">=</span><span class="n">time</span><span class="p">,</span> <span class="n">color</span><span class="o">=</span><span class="s1">&#39;r&#39;</span><span class="p">,</span> <span class="n">linestyle</span><span class="o">=</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="p">(</span><span class="mi">14</span><span class="p">,</span><span class="mi">14</span><span class="p">)),</span> <span class="n">linewidth</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">alpha</span><span class="o">=</span><span class="mf">0.7</span><span class="p">)</span>
diff --git a/docs/daemon.html b/docs/daemon.html
index 4004778..b45dce5 100644
--- a/docs/daemon.html
+++ b/docs/daemon.html
@@ -64,7 +64,7 @@
             
             
               <div class="version">
-                1.0.2
+                1.0.3
               </div>
             
           
diff --git a/docs/genindex.html b/docs/genindex.html
index e2a1d78..df38a72 100644
--- a/docs/genindex.html
+++ b/docs/genindex.html
@@ -63,7 +63,7 @@
             
             
               <div class="version">
-                1.0.2
+                1.0.3
               </div>
             
           
@@ -519,6 +519,8 @@ <h2 id="R">R</h2>
 <table style="width: 100%" class="indextable genindextable"><tr>
   <td style="width: 33%; vertical-align: top;"><ul>
       <li><a href="helpers.html#rsudp.helpers.read_settings">read_settings() (in module rsudp.helpers)</a>
+</li>
+      <li><a href="helpers.html#rsudp.helpers.resolve_extra_text">resolve_extra_text() (in module rsudp.helpers)</a>
 </li>
       <li><a href="c_rsam.html#rsudp.c_rsam.RSAM">RSAM (class in rsudp.c_rsam)</a>
 </li>
diff --git a/docs/helpers.html b/docs/helpers.html
index 6c847b1..f186fb5 100644
--- a/docs/helpers.html
+++ b/docs/helpers.html
@@ -64,7 +64,7 @@
             
             
               <div class="version">
-                1.0.2
+                1.0.3
               </div>
             
           
@@ -561,6 +561,34 @@ <h1><a class="reference internal" href="#module-rsudp.helpers" title="rsudp.help
 </dl>
 </dd></dl>
 
+<dl class="py function">
+<dt id="rsudp.helpers.resolve_extra_text">
+<code class="sig-prename descclassname">rsudp.helpers.</code><code class="sig-name descname">resolve_extra_text</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">extra_text</span></em>, <em class="sig-param"><span class="n">max_len</span></em>, <em class="sig-param"><span class="n">sender</span><span class="o">=</span><span class="default_value">'helpers'</span></em><span class="sig-paren">)</span><a class="headerlink" href="#rsudp.helpers.resolve_extra_text" title="Permalink to this definition">¶</a></dt>
+<dd><div class="versionadded">
+<p><span class="versionmodified added">New in version 1.0.3.</span></p>
+</div>
+<p>A central helper function for the <code class="xref py py-class docutils literal notranslate"><span class="pre">rsudp.c_telegram.Tweeter</span></code>
+and <a class="reference internal" href="c_telegram.html#rsudp.c_telegram.Telegrammer" title="rsudp.c_telegram.Telegrammer"><code class="xref py py-class docutils literal notranslate"><span class="pre">rsudp.c_telegram.Telegrammer</span></code></a> classes that checks whether
+the <code class="code pycode python docutils literal notranslate"><span class="literal string double"><span class="pre">“extra_text”</span></span></code> parameter (in the settings file) is of appropriate
+length. This is done to avoid errors when posting alerts.
+The function will truncate longer messages.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>extra_text</strong> (<a class="reference external" href="https://docs.python.org/3/library/stdtypes.html#str" title="(in Python v3.10)"><em>str</em></a>) – String of additional characters to post as part of the alert message (longer messages will be truncated).</p></li>
+<li><p><strong>max_len</strong> (<a class="reference external" href="https://docs.python.org/3/library/stdtypes.html#str" title="(in Python v3.10)"><em>str</em></a>) – Upper limit of characters accepted in message (280 for Twitter, 4096 for Telegram).</p></li>
+<li><p><strong>sender</strong> (<a class="reference external" href="https://docs.python.org/3/library/stdtypes.html#str" title="(in Python v3.10)"><em>str</em></a>) – String identifying the origin of the use of this function (<code class="code pycode python docutils literal notranslate"><span class="name builtin pseudo"><span class="pre">self</span></span><span class="operator"><span class="pre">.</span></span><span class="name"><span class="pre">sender</span></span></code> in the source function).</p></li>
+</ul>
+</dd>
+<dt class="field-even">Return type</dt>
+<dd class="field-even"><p><a class="reference external" href="https://docs.python.org/3/library/stdtypes.html#str" title="(in Python v3.10)">str</a></p>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p>the message string to be incorporated</p>
+</dd>
+</dl>
+</dd></dl>
+
 <dl class="py function">
 <dt id="rsudp.helpers.set_channels">
 <code class="sig-prename descclassname">rsudp.helpers.</code><code class="sig-name descname">set_channels</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">self</span></em>, <em class="sig-param"><span class="n">cha</span></em><span class="sig-paren">)</span><a class="headerlink" href="#rsudp.helpers.set_channels" title="Permalink to this definition">¶</a></dt>
diff --git a/docs/index.html b/docs/index.html
index 55ee8c2..a5d2dc6 100644
--- a/docs/index.html
+++ b/docs/index.html
@@ -8,7 +8,7 @@
   
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   
-  <title>rsudp 1.0.2 &mdash; rsudp  documentation</title>
+  <title>rsudp 1.0.3 &mdash; rsudp  documentation</title>
   
 
   
@@ -63,7 +63,7 @@
             
             
               <div class="version">
-                1.0.2
+                1.0.3
               </div>
             
           
@@ -187,7 +187,7 @@
     
       <li><a href="#">Docs</a> &raquo;</li>
         
-      <li><cite>rsudp</cite> 1.0.2</li>
+      <li><cite>rsudp</cite> 1.0.3</li>
     
     
       <li class="wy-breadcrumbs-aside">
@@ -207,7 +207,7 @@
            <div itemprop="articleBody">
             
   <div class="section" id="rsudp-version">
-<h1><cite>rsudp</cite> 1.0.2<a class="headerlink" href="#rsudp-version" title="Permalink to this headline">¶</a></h1>
+<h1><cite>rsudp</cite> 1.0.3<a class="headerlink" href="#rsudp-version" title="Permalink to this headline">¶</a></h1>
 <a class="reference external image-reference" href="https://github.com/raspishake/rsudp"><img alt="https://img.shields.io/github/stars/raspishake/rsudp?style=social" src="https://img.shields.io/github/stars/raspishake/rsudp?style=social" /></a>
 <div class="line-block">
 <div class="line"><a href="https://github.com/raspishake/rsudp" target="_blank">https://github.com/raspishake/rsudp</a></div>
diff --git a/docs/init.html b/docs/init.html
index 4ec094f..b04b5f2 100644
--- a/docs/init.html
+++ b/docs/init.html
@@ -64,7 +64,7 @@
             
             
               <div class="version">
-                1.0.2
+                1.0.3
               </div>
             
           
diff --git a/docs/installing.html b/docs/installing.html
index 0c69f82..e9d9330 100644
--- a/docs/installing.html
+++ b/docs/installing.html
@@ -64,7 +64,7 @@
             
             
               <div class="version">
-                1.0.2
+                1.0.3
               </div>
             
           
diff --git a/docs/objects.inv b/docs/objects.inv
index 80ae2d1..c166fde 100644
Binary files a/docs/objects.inv and b/docs/objects.inv differ
diff --git a/docs/p_producer.html b/docs/p_producer.html
index 623276a..be4cdaa 100644
--- a/docs/p_producer.html
+++ b/docs/p_producer.html
@@ -64,7 +64,7 @@
             
             
               <div class="version">
-                1.0.2
+                1.0.3
               </div>
             
           
diff --git a/docs/packetize.html b/docs/packetize.html
index 6116f6b..d90cf36 100644
--- a/docs/packetize.html
+++ b/docs/packetize.html
@@ -63,7 +63,7 @@
             
             
               <div class="version">
-                1.0.2
+                1.0.3
               </div>
             
           
diff --git a/docs/packetloss.html b/docs/packetloss.html
index cff05e4..39d071c 100644
--- a/docs/packetloss.html
+++ b/docs/packetloss.html
@@ -64,7 +64,7 @@
             
             
               <div class="version">
-                1.0.2
+                1.0.3
               </div>
             
           
@@ -228,12 +228,12 @@
 <dl class="field-list simple">
 <dt class="field-odd">Parameters</dt>
 <dd class="field-odd"><ul class="simple">
-<li><p><strong>CHAN</strong> (<a class="reference external" href="https://docs.python.org/3/library/functions.html#int" title="(in Python v3.9)"><em>int</em></a>) – The name of the channel to report packetloss statistics for</p></li>
-<li><p><strong>TR</strong> (<a class="reference external" href="https://docs.python.org/3/library/functions.html#int" title="(in Python v3.9)"><em>int</em></a>) – Transmission rate in milliseconds between consecutive packets from a specific channel</p></li>
+<li><p><strong>CHAN</strong> (<a class="reference external" href="https://docs.python.org/3/library/functions.html#int" title="(in Python v3.10)"><em>int</em></a>) – The name of the channel to report packetloss statistics for</p></li>
+<li><p><strong>TR</strong> (<a class="reference external" href="https://docs.python.org/3/library/functions.html#int" title="(in Python v3.10)"><em>int</em></a>) – Transmission rate in milliseconds between consecutive packets from a specific channel</p></li>
 </ul>
 </dd>
 <dt class="field-even">Return type</dt>
-<dd class="field-even"><p><a class="reference external" href="https://docs.python.org/3/library/functions.html#bool" title="(in Python v3.9)">bool</a></p>
+<dd class="field-even"><p><a class="reference external" href="https://docs.python.org/3/library/functions.html#bool" title="(in Python v3.10)">bool</a></p>
 </dd>
 <dt class="field-odd">Returns</dt>
 <dd class="field-odd"><p><code class="docutils literal notranslate"><span class="pre">False</span></code> if no time has elapsed since starting the program, otherwise <code class="docutils literal notranslate"><span class="pre">True</span></code></p>
@@ -248,8 +248,8 @@
 <dl class="field-list simple">
 <dt class="field-odd">Parameters</dt>
 <dd class="field-odd"><ul class="simple">
-<li><p><strong>printFREQ</strong> (<a class="reference external" href="https://docs.python.org/3/library/functions.html#int" title="(in Python v3.9)"><em>int</em></a>) – Value in seconds denoting the frequency with which this program will report packets lost</p></li>
-<li><p><strong>port</strong> (<a class="reference external" href="https://docs.python.org/3/library/functions.html#int" title="(in Python v3.9)"><em>int</em></a>) – Local port to listen on</p></li>
+<li><p><strong>printFREQ</strong> (<a class="reference external" href="https://docs.python.org/3/library/functions.html#int" title="(in Python v3.10)"><em>int</em></a>) – Value in seconds denoting the frequency with which this program will report packets lost</p></li>
+<li><p><strong>port</strong> (<a class="reference external" href="https://docs.python.org/3/library/functions.html#int" title="(in Python v3.10)"><em>int</em></a>) – Local port to listen on</p></li>
 </ul>
 </dd>
 </dl>
@@ -262,8 +262,8 @@
 <dl class="field-list simple">
 <dt class="field-odd">Parameters</dt>
 <dd class="field-odd"><ul class="simple">
-<li><p><strong>signum</strong> (<a class="reference external" href="https://docs.python.org/3/library/functions.html#int" title="(in Python v3.9)"><em>int</em></a>) – signal number</p></li>
-<li><p><strong>frame</strong> (<a class="reference external" href="https://docs.python.org/3/library/functions.html#int" title="(in Python v3.9)"><em>int</em></a>) – frame number</p></li>
+<li><p><strong>signum</strong> (<a class="reference external" href="https://docs.python.org/3/library/functions.html#int" title="(in Python v3.10)"><em>int</em></a>) – signal number</p></li>
+<li><p><strong>frame</strong> (<a class="reference external" href="https://docs.python.org/3/library/functions.html#int" title="(in Python v3.10)"><em>int</em></a>) – frame number</p></li>
 </ul>
 </dd>
 </dl>
diff --git a/docs/py-modindex.html b/docs/py-modindex.html
index 6ee2e64..140ac30 100644
--- a/docs/py-modindex.html
+++ b/docs/py-modindex.html
@@ -65,7 +65,7 @@
             
             
               <div class="version">
-                1.0.2
+                1.0.3
               </div>
             
           
diff --git a/docs/raspberryshake.html b/docs/raspberryshake.html
index 0fd8bfd..21b85f9 100644
--- a/docs/raspberryshake.html
+++ b/docs/raspberryshake.html
@@ -64,7 +64,7 @@
             
             
               <div class="version">
-                1.0.2
+                1.0.3
               </div>
             
           
@@ -571,7 +571,7 @@ <h1><a class="reference internal" href="#module-rsudp.raspberryshake" title="rsu
 
 <dl class="py function">
 <dt id="rsudp.raspberryshake.handler">
-<code class="sig-prename descclassname">rsudp.raspberryshake.</code><code class="sig-name descname">handler</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">signum</span></em>, <em class="sig-param"><span class="n">frame</span></em>, <em class="sig-param"><span class="n">ip</span><span class="o">=</span><span class="default_value">'10.8.2.2'</span></em><span class="sig-paren">)</span><a class="headerlink" href="#rsudp.raspberryshake.handler" title="Permalink to this definition">¶</a></dt>
+<code class="sig-prename descclassname">rsudp.raspberryshake.</code><code class="sig-name descname">handler</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">signum</span></em>, <em class="sig-param"><span class="n">frame</span></em>, <em class="sig-param"><span class="n">ip</span><span class="o">=</span><span class="default_value">'10.8.3.9'</span></em><span class="sig-paren">)</span><a class="headerlink" href="#rsudp.raspberryshake.handler" title="Permalink to this definition">¶</a></dt>
 <dd><p>The signal handler for the nodata alarm.</p>
 <dl class="field-list simple">
 <dt class="field-odd">Parameters</dt>
diff --git a/docs/running.html b/docs/running.html
index 2967545..c568314 100644
--- a/docs/running.html
+++ b/docs/running.html
@@ -64,7 +64,7 @@
             
             
               <div class="version">
-                1.0.2
+                1.0.3
               </div>
             
           
diff --git a/docs/search.html b/docs/search.html
index 76778bd..8a35334 100644
--- a/docs/search.html
+++ b/docs/search.html
@@ -63,7 +63,7 @@
             
             
               <div class="version">
-                1.0.2
+                1.0.3
               </div>
             
           
diff --git a/docs/searchindex.js b/docs/searchindex.js
index 556f0f3..2102142 100644
--- a/docs/searchindex.js
+++ b/docs/searchindex.js
@@ -1,1 +1,1 @@
-Search.setIndex({docnames:["about","c_alert","c_alertsound","c_consumer","c_custom","c_forward","c_plot","c_rsam","c_telegram","c_testing","c_tweet","c_write","client","contributing","daemon","helpers","index","init","installing","p_producer","packetize","packetloss","raspberryshake","running","settings","t_testdata","test","testing","theory","troubleshooting","youtube"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":2,"sphinx.domains.index":1,"sphinx.domains.javascript":2,"sphinx.domains.math":2,"sphinx.domains.python":2,"sphinx.domains.rst":2,"sphinx.domains.std":1,"sphinx.ext.intersphinx":1,"sphinx.ext.todo":2,sphinx:56},filenames:["about.rst","c_alert.rst","c_alertsound.rst","c_consumer.rst","c_custom.rst","c_forward.rst","c_plot.rst","c_rsam.rst","c_telegram.rst","c_testing.rst","c_tweet.rst","c_write.rst","client.rst","contributing.rst","daemon.rst","helpers.rst","index.rst","init.rst","installing.rst","p_producer.rst","packetize.rst","packetloss.rst","raspberryshake.rst","running.rst","settings.rst","t_testdata.rst","test.rst","testing.rst","theory.rst","troubleshooting.rst","youtube.rst"],objects:{"rsudp.__init__":{LevelFormatter:[17,1,1,""],add_debug_handler:[17,3,1,""],init_dirs:[17,3,1,""],printE:[17,3,1,""],printM:[17,3,1,""],printW:[17,3,1,""],start_logging:[17,3,1,""]},"rsudp.__init__.LevelFormatter":{format:[17,2,1,""]},"rsudp.c_alert":{Alert:[1,1,1,""]},"rsudp.c_alert.Alert":{run:[1,2,1,""]},"rsudp.c_alertsound":{AlertSound:[2,1,1,""]},"rsudp.c_alertsound.AlertSound":{run:[2,2,1,""]},"rsudp.c_consumer":{Consumer:[3,1,1,""]},"rsudp.c_consumer.Consumer":{run:[3,2,1,""]},"rsudp.c_custom":{Custom:[4,1,1,""]},"rsudp.c_custom.Custom":{run:[4,2,1,""]},"rsudp.c_forward":{Forward:[5,1,1,""]},"rsudp.c_forward.Forward":{run:[5,2,1,""]},"rsudp.c_plot":{Plot:[6,1,1,""]},"rsudp.c_plot.Plot":{deconvolve:[6,2,1,""],figloop:[6,2,1,""],getq:[6,2,1,""],handle_close:[6,2,1,""],handle_resize:[6,2,1,""],mainloop:[6,2,1,""],qu:[6,2,1,""],run:[6,2,1,""],savefig:[6,2,1,""],set_sps:[6,2,1,""],setup_plot:[6,2,1,""],update_plot:[6,2,1,""]},"rsudp.c_rsam":{RSAM:[7,1,1,""]},"rsudp.c_rsam.RSAM":{run:[7,2,1,""]},"rsudp.c_telegram":{Telegrammer:[8,1,1,""]},"rsudp.c_telegram.Telegrammer":{run:[8,2,1,""]},"rsudp.c_testing":{Testing:[9,1,1,""]},"rsudp.c_testing.Testing":{run:[9,2,1,""]},"rsudp.c_tweet":{Tweeter:[10,1,1,""]},"rsudp.c_tweet.Tweeter":{run:[10,2,1,""]},"rsudp.c_write":{Write:[11,1,1,""]},"rsudp.c_write.Write":{elapse:[11,2,1,""],getq:[11,2,1,""],run:[11,2,1,""],set_sps:[11,2,1,""],slicestream:[11,2,1,""],write:[11,2,1,""]},"rsudp.client":{handler:[12,3,1,""],main:[12,3,1,""],mk_p:[12,3,1,""],mk_q:[12,3,1,""],run:[12,3,1,""],start:[12,3,1,""],test:[12,3,1,""],test_mode:[12,3,1,""]},"rsudp.helpers":{conn_stats:[15,3,1,""],deconv_acc_inst:[15,3,1,""],deconv_rbm_inst:[15,3,1,""],deconv_vel_inst:[15,3,1,""],deconvolve:[15,3,1,""],default_settings:[15,3,1,""],dump_default:[15,3,1,""],fsec:[15,3,1,""],get_msg_path:[15,3,1,""],get_msg_time:[15,3,1,""],get_scap_dir:[15,3,1,""],msg_alarm:[15,3,1,""],msg_imgpath:[15,3,1,""],msg_reset:[15,3,1,""],msg_term:[15,3,1,""],read_settings:[15,3,1,""],set_channels:[15,3,1,""]},"rsudp.p_producer":{Producer:[19,1,1,""]},"rsudp.p_producer.Producer":{run:[19,2,1,""]},"rsudp.packetize":{main:[20,3,1,""],packetize:[20,3,1,""]},"rsudp.packetloss":{main:[21,3,1,""],printTTLS:[21,3,1,""],run:[21,3,1,""],signal_handler:[21,3,1,""]},"rsudp.raspberryshake":{ConsumerThread:[22,1,1,""],copy:[22,3,1,""],getCHN:[22,3,1,""],getCHNS:[22,3,1,""],getDATA:[22,3,1,""],getSR:[22,3,1,""],getSTREAM:[22,3,1,""],getTIME:[22,3,1,""],getTR:[22,3,1,""],getTTLCHN:[22,3,1,""],get_inventory:[22,3,1,""],get_ip:[22,3,1,""],handler:[22,3,1,""],initRSlib:[22,3,1,""],make_trace:[22,3,1,""],openSOCK:[22,3,1,""],set_params:[22,3,1,""],update_stream:[22,3,1,""]},"rsudp.t_testdata":{TestData:[25,1,1,""]},"rsudp.t_testdata.TestData":{run:[25,2,1,""],send:[25,2,1,""]},"rsudp.test":{cancel_tests:[26,3,1,""],datadir_permissions:[26,3,1,""],is_connected:[26,3,1,""],logdir_permissions:[26,3,1,""],make_test_settings:[26,3,1,""],permissions:[26,3,1,""],ss_permissions:[26,3,1,""]},rsudp:{__init__:[17,0,0,"-"],c_alert:[1,0,0,"-"],c_alertsound:[2,0,0,"-"],c_consumer:[3,0,0,"-"],c_custom:[4,0,0,"-"],c_forward:[5,0,0,"-"],c_plot:[6,0,0,"-"],c_rsam:[7,0,0,"-"],c_telegram:[8,0,0,"-"],c_testing:[9,0,0,"-"],c_tweet:[10,0,0,"-"],c_write:[11,0,0,"-"],client:[12,0,0,"-"],helpers:[15,0,0,"-"],p_producer:[19,0,0,"-"],packetize:[20,0,0,"-"],packetloss:[21,0,0,"-"],raspberryshake:[22,0,0,"-"],t_testdata:[25,0,0,"-"],test:[26,0,0,"-"]}},objnames:{"0":["py","module","Python module"],"1":["py","class","Python class"],"2":["py","method","Python method"],"3":["py","function","Python function"]},objtypes:{"0":"py:module","1":"py:class","2":"py:method","3":"py:function"},terms:{"00z":22,"01t00":15,"10s":14,"15s":17,"16b":[0,24],"1dv7":22,"211704z":28,"21t19":22,"21t20":22,"23t06":28,"246777z":22,"292000z":22,"435214z":28,"532000z":22,"598944z":28,"599z":15,"boolean":[5,24,28],"break":25,"byte":[15,22,28],"case":[18,24,28,29],"class":[1,2,3,4,5,6,7,8,9,10,11,13,15,17,19,22,24,25,28],"default":[1,6,7,12,14,15,16,18,22,23,26,27,28],"final":[14,28,29],"float":[1,7,22,24],"function":[1,4,6,9,11,12,13,20,22,23,24,26,28],"import":[0,6,15,20,22,24,26,28],"int":[6,21,22,25],"long":[1,24],"new":[4,5,6,7,8,9,10,11,12,13,14,15,18,22,24,25,26,27,28,29],"public":[10,29],"return":[6,11,12,15,17,21,22,26,28],"short":[1,2,24],"super":28,"throw":24,"true":[1,4,6,7,11,12,15,17,21,22,24,26,28],"try":26,"while":[0,24,28,29],Adding:[13,16,22],And:28,EHE:15,ENE:15,For:[9,12,15,18,22,24,25,27,28,29],One:29,Pis:24,That:[24,27],The:[0,1,3,5,6,10,11,12,13,15,16,17,19,20,21,22,23,24,26,27,28,29],Then:[25,26,28,29],There:[24,28,29],These:[9,15,17,24],Using:[16,28],Will:22,__init__:[16,28],abc:28,abil:[0,27],abl:[0,24,28,29],abort:29,about:[4,13,14,15,16,23,24,27,28,29],abov:[4,23,24,28,29],acc:[7,24],acceler:[15,24],acceleromet:[0,15,24],access:[10,24],access_secret:[10,24],access_token:[10,24],access_token_secret:10,accommod:24,accompani:0,accordingli:24,account:[10,24],accumul:22,accur:15,achiev:[0,24],across:[0,6,24,29],action:[0,12,27,28],activ:[0,10,14,17,18,20,21,23,24,29],actual:[13,24],adapt:[17,22],add:[0,10,17,24,26,28],add_debug_handl:17,added:[13,22,28],adding:27,addit:[0,10,13,17,28],addition:[0,24],addr:5,address:[5,7,15,22,24,25,29],adjust:[24,30],administr:18,advantag:24,adventur:13,after:[0,6,14,22,23,24,28,29],again:24,agenc:[10,24],agg:13,aggress:24,aim:0,alarm:[2,4,5,6,7,8,9,10,13,15,16,22,23,24,26,27,28],alarm_reset:[1,22],alarmsound:16,alert:[0,1,2,3,6,13,15,16,19,26,27,28],alertsound:[2,24,26,28],algorithm:[6,24],aliv:[9,19,22,25,28],all:[6,11,14,15,19,22,23,24,26,28,29],allow:[6,13,15,16,28,29],almost:29,along:28,alpha:13,alreadi:[13,14,17,24,28],also:[15,19,24,25,27,28,29],alt:24,although:[0,24,29],alwai:[13,14,24],amd:18,among:8,amount:24,amplitud:[7,16],anaconda3:18,anaconda:[18,23],analysi:[16,24],ani:[0,6,15,18,23,24,27,28,29],announc:17,anoth:[5,20,24,28,29],answer:[4,17,22,24],anyth:[12,27],anywai:24,api:[8,10,24,28],api_kei:24,api_secret:24,aplot:6,app:[10,13],appear:[24,29],append:[11,12,17,18,24],appli:[7,10,24],applic:0,appropri:[12,18,24],approxim:24,apt:24,arbitrari:27,architectur:[16,18,27],archiv:27,arg:[1,7],argument:[20,21,22],armv7:18,armv7l:18,around:29,arriv:[2,6,24,25],artifici:27,ascii:20,asctim:17,ask:[18,29],aspect:0,assign:22,associ:17,assum:[0,24,28,29],atop:24,attach:[13,29],attribut:[17,22],audibl:0,audioseg:2,authent:24,automat:[8,18,22],avail:[0,15,16,18,22,23,24,26,27,30],averag:[1,2,24,29],avoid:[6,24],awai:0,axvlin:13,back:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29],backend:[6,13,26],backtick:[13,29],bak:18,bandpass:[1,24],bar:29,base:[18,24,27,28],bash:[14,18,23],basic:[24,27],bat:[18,23],batch:[13,23],beauti:0,becaus:[15,22,24],becom:27,bedrock:24,been:[0,18,24,29],beep:24,befor:[17,22,24,28],beforehand:24,begin:[6,23,25],behalf:10,behavior:6,being:[22,24,29],below:[0,16,18,24,27,28,29],beneath:[6,24],berryconda3:18,better:24,between:[21,22,24,28,29],beyond:13,bin:14,binari:24,bind:22,bit:27,block:6,blue:29,boaz:16,bonu:24,bool:[1,2,4,5,6,7,8,10,11,12,15,17,21,22,26,28],boom:[15,16,22,24,27,30],boot:14,bot:[8,10],botfath:24,both:[0,5,6,13,14,15,18,22,24,28],box:22,brace:28,brew:24,brief:[0,24],briefli:28,bring:[0,24],broad:16,broadcast:[6,8,24,28],bug:[16,22,29],build:[22,24,28],built:[5,10],button:29,buzzer:13,c_alarm:[],c_alert:[13,15,16,24],c_alertoff:26,c_alerton:26,c_alertsound:[16,24,28],c_anotheron:28,c_consum:[1,2,4,5,6,7,8,9,10,11,12,16,19,25,28],c_custom:[13,16,24,26],c_data:[],c_forward:[16,24,26],c_img:[9,26],c_imgpath:[],c_minise:26,c_mymodul:28,c_mytest:28,c_plai:26,c_plot:[15,16,24,26,28],c_print:26,c_printraw:24,c_process:[],c_reset:[],c_rsam:[16,26],c_telegram:[10,16,24,26,28],c_telegramimg:26,c_term:[],c_test:16,c_tweet:[16,24,26,28],c_tweetimg:26,c_write:[16,24,26],calcul:[0,1,3,6,19,22,24],calibr:15,call:[6,10,15,17,20,22,24,28,29],can:[4,5,6,10,13,14,15,16,18,20,22,23,24,27,28],cancel:26,cancel_test:26,cannot:[6,22,24,29],canva:6,capabl:[0,24,27,28],caption:28,captur:15,car:0,care:24,carri:17,cast:[0,29],caus:[6,11,18,22,24],centerpiec:0,central:[6,15,16],certain:[4,6,24],cha:[1,5,6,7,11,15],chan:[7,21,24,26],chang:[14,18,19,23,24,27,29],channel:[0,1,5,6,7,11,15,18,21,22,24,26],charact:[0,4,10,24],chart:[27,28],chat:[8,24],chat_id:[8,24],check:[4,14,16,18,24,27,29],child:28,chime:24,chn:22,choos:[5,18,23],chosen:[24,27],citizen:[15,22],classroom:27,clear:6,clearli:[13,29],click:[18,23,29],client:[2,16,22,23,27],clone:14,close:[6,12,23,28],closer:24,code:[0,6,14,18,22,26,28,29],codebas:0,codefil:[4,7,24],collect:0,color:[13,17],com:[13,14,16],combin:28,come:[10,22,23,24,29,30],comma:[24,28],command:[12,13,14,17,18,20,21,22,24,27],comment:[6,13],common:[22,29],commun:[0,13,24,28,29],comparison:24,compat:6,complex:0,comput:[0,17,18,23,29],conda:[18,20,21,23,27],config:[14,18,23,24,29],configur:[12,23,24,29],conform:28,confus:15,conn_stat:15,connect:[14,15,26,29],consecut:[21,22],consist:18,consol:[1,7,15,16],constant:21,constraint:24,construct:[15,28],consult:24,consum:[1,2,4,5,6,7,8,10,11,12,13,15,16,19,20,22,24,25,26],consumer_kei:10,consumer_secret:10,consumerthread:[22,28],contact:[0,24],contain:[0,6,13,15,20,22,24,25],content:27,continu:[0,16,24,25,27,28],contribut:[0,16],control:[13,23,24,28],convert:[4,15,20,22,24,27],cool:28,cooper:29,coordin:11,copi:[13,18,22,29],core:[1,6,11,15,22,26,27,28],correct:[4,22,24,29],correctli:[14,18,24,28],cost:0,could:[15,18,24,27,28,29],count:[15,22,24],counter:6,coupl:[17,24],cover:[18,23],cpu:22,creat:[13,14,15,16,17,18,22,23,24,27,28],creation:[8,13,14],crust:0,cryptographi:18,csv:[7,24],ctrl:[21,23,24,29],current:[9,15,18,22,26,28],custom:[4,13,16,26,27],custom_set:27,customiz:16,d_matplotlib:26,d_pydub:26,daemon:[0,12,16],dai:11,daili:11,data:[0,1,2,3,4,7,8,9,10,15,16,21,22,23,25,26,28,30],data_dir:11,data_fil:25,datacast:[5,16,22,23,29],datadir_permiss:26,date:[11,17],datefmt:17,datetim:[15,17],dead:14,debain:14,debian:24,debug:[1,7,11,12,24,26,28],decim:22,decod:15,deconv:[1,6,7],deconv_acc_inst:15,deconv_rbm_inst:15,deconv_vel_inst:15,deconvolut:15,deconvolv:[6,15,24,26],def:28,default_set:15,defin:24,definit:18,deliv:5,deliveri:29,demand:0,demo:[16,23],demonstr:[16,27],denot:[21,28],depend:[0,10,15,17,18,26,28],depict:27,deprec:24,depth:16,deriv:22,describ:[13,28,29],descript:[14,24,26,28],design:[0,25,27,29],desktop:18,destin:[3,5,12,24,28],detail:[0,6,10,22,24],detect:[0,16,23,26,27],detector:24,determin:[1,17,25],develop:[0,10,13,16,18,22,24,28],devic:[0,22,29],diagnost:14,diagram:[9,25,27],dict:[12,15,17,26],dictionari:[12,15,17,26,28],differ:[17,23,24,27,28,29],difficult:[10,29],digit:24,dir:24,directli:[0,22,24,28],directori:[14,15,17,18,24,26,27,28],disabl:[6,24],disclaim:[0,4,24],discov:27,disk:[11,15,25,27,28],disp:[7,24],displac:24,displai:[0,1,6,11,15,17,24,29],distanc:29,distribut:[0,3,5,10,18,19,24,28],docstr:28,document:[14,27,28],doe:[0,14,15,24,25,27],doesn:[15,18,24],doing:[14,24,27],don:[26,27,29],done:[14,18,20,22,27,28],doorbel:24,doubl:[18,23],down:[10,11,22],download:[18,22,24,26],downward:24,dport:22,draw:6,drawn:6,drop:[24,29],duckduckgo:29,due:[0,29],dump:[15,23,27],dump_default:15,duplic:28,durat:[1,2,6,24,26],dure:[9,16,25,28],dynam:6,each:[3,6,19,22,24,28,29],earli:[0,6,8,10,24],earlier:28,earth:0,earthquak:[0,16,23,27],easi:[0,13,23,24,28],easier:[10,13,24],easiest:26,easili:[13,22],echo:18,edg:24,edit:[18,27],educ:0,eew:[0,24],effect:6,effici:[13,28],ehn:15,ehz:[15,22,24,28],either:[5,6,7,20,23,24,28,29],elaps:[6,11,21],els:[12,29],elsewher:[0,14,24],embed:15,empti:24,emsc:10,enabl:[0,6,7,14,24,26,28],encod:22,encourag:28,end:[4,18,24,25,28],endpoint:24,endtest:25,enhanc:13,enn:15,enough:[0,22],ensur:24,enter:[14,18,23,24,27],entir:[14,24],entri:24,environ:[18,20,21,23,27],enz:[15,24],eq_screenshot:[24,26],equal:24,errformat:17,error:[0,6,13,14,17,22,24,29],especi:[6,24],essenti:[27,28],etc:[13,18],ethernet:29,even:[13,24,27,29],event:[0,6,12,13,15,17,24],event_tim:[6,15],event_time_str:6,eventu:28,everi:[6,7,14,21,24,29],evt:6,exampl:[3,15,17,18,19,21,22,24,28,29],exceed:[1,24],except:[17,22,28],excess:24,exec:4,execreload:14,execstart:14,execstartpr:14,execstop:14,execut:[3,4,7,14,18,19,22,24,26,28],exist:[17,24,26,28,29],exit:[24,25,28],experi:[24,29],explain:24,explan:18,explicit:[0,24],explor:0,extens:0,extern:29,extra:[10,24],extra_text:[10,24],extract:22,extrem:[0,24],face:29,fact:0,fail:14,failur:28,fairli:29,fals:[0,1,2,3,4,5,6,7,8,9,10,11,12,15,17,19,20,21,22,24,25,26,28],far:[0,29],fast:[22,24],fdsn:[22,24,26],featur:[0,13,16,23,29],feed:27,feel:[13,16,28],fetch:9,few:24,ffmpeg:[18,24,28],field:[15,18,24],fifo:28,figloop:6,fignam:15,figur:[0,6,15,24,27,28,29],file:[4,5,6,10,11,14,15,17,18,20,23,24,25,26,27,29],filenam:6,filesystem:24,fill:24,filter:[1,24],find:[5,13,16,22,24,27],fine:22,firewal:16,first:[6,10,14,18,23,24,25,28,29],fix:[18,29],flag:[1,19,27,28],flavor:24,flow:[9,16,23,25],fmt:17,focu:23,folder:[18,24],follow:[4,14,15,16,18,21,24,26,27,28,29],footstep:24,forc:[23,24],forg:18,fork:24,form:[22,28],formal:28,format:[0,1,4,7,13,15,17,20,24,25,27,28,29],formatexcept:17,formatt:[16,28],formattim:17,formerli:23,forum:[13,28,29],forward:[7,11,16,23,26,29],found:24,four:[9,24],fraction:15,frame:[12,21,22],free:[8,24,28,29],freez:14,freq:15,frequenc:[21,22,24],from:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30],front:24,fsec:15,full:[6,15],fulli:[0,22,24],fullscreen:[6,24],fun:13,further:[0,24],futur:[18,24],fwaddr:[7,24],fwd_alarm:[5,24],fwd_data:[5,24],fwformat:[7,24],fwport:[7,24],gather:28,gempa:22,gener:[10,16,18,27,28,29],geophon:[0,6,15,24],get:[5,6,13,15,16,22,24,26,27,28,29],get_inventori:22,get_ip:22,get_msg_path:15,get_msg_tim:15,get_scap_dir:15,getchn:22,getdata:22,getmessag:17,getq:[6,11,28],getsr:22,getstream:22,gettim:22,gettr:22,getttlchn:22,git:[14,18,23],github:[13,14,16,18,29],give:[10,24,29],given:[15,28,29],glad:29,global:[12,22],globe:29,goe:[24,28,29],going:[0,29],gone:10,got:28,gpio:13,gracefulli:19,grade:[0,24],graphic:14,grasp:0,grav:7,great:29,green:14,grei:14,ground:[3,19],group:24,guarante:[0,24,29],gui:[0,6,24],guid:[16,24],guidanc:12,hack:22,had:24,handl:[6,12,23],handle_clos:6,handle_res:6,handler:[12,17,21,22],happen:[6,24,28,29],hard:29,harmless:18,has:[0,4,6,9,10,11,18,21,24,28,29],have:[0,4,6,13,14,15,18,22,24,27,28,29],hdf:[15,22,24],head:18,headless:0,hear:13,heart:6,help:[12,22,24,29],helper:[16,22],here:[0,1,4,13,17,24,26,28],hierarchi:[9,25,27,28],high:24,higher:24,highli:16,highpass:[1,24,26],hit:18,hobbi:[0,24],hold:24,home:[14,15,18,23,24,28],homebrew:24,host:[22,29],hostnam:26,hour:[0,10,21,29],how:[6,13,18,23,24,27,28],howev:[10,18,24,27,29],http:[13,14,16,28,29],hundredth:15,ian:16,iannesbitt:[14,15],idea:28,ifttt:13,ignor:[5,11,23,24,28],imag:[6,8,10,15,24,26,28],imgpath:[6,8,9,10,15,26,28],immedi:25,implement:28,impli:[0,24],implic:24,importerror:6,inabl:29,inact:14,includ:[0,10,14,22,23,24,27,28],incom:[1,23],increas:22,increment:6,indefinit:29,independ:28,index:[1,2,3,4,5,6,7,8,9,10,11,12,19,20,21,22,24,25,26],indic:[12,13,19,29],individu:[27,29],inet:26,inf:20,infinit:28,info:[17,29],infoformat:17,inform:[0,10,15,17,22,24,28,29],ingest:29,init:[15,29],init_dir:17,initd:22,initi:[15,16,21,22,26,28],initrslib:22,input:[20,24],insert:24,inset:28,insid:[24,29],instal:[0,14,16,20,21,23,27,30],instanc:[15,28],instanti:28,instantli:28,instead:[10,27],institut:22,instruct:[4,16,18,24,26,27],instrument:[0,15,16,22,24],integ:[15,18,22],integr:[13,27,28],intend:[0,22,24],interact:13,interfac:17,intern:[24,29],internet:[26,27,29],interrupt:14,interv:[7,24],intervent:0,intuit:0,inv:[15,22],inventori:[9,15,22,24,26],involv:13,ioerror:[22,29],is_connect:26,isn:13,isp:29,issu:[0,13,16,24,27,28],item:[24,28],its:[0,9,10,14,15,22,24,26,27,28],itself:27,job:29,json:[5,7,15,18,23,24,27,28,29],jump:24,just:[9,11,24,28,29],keep:[0,22,24],kei:[10,18,24,29],keystrok:21,kid:13,kill:14,kiosk:[0,6,24],know:[16,18,28,29],known:[23,24,29],kwarg:[1,7,22],label:[17,29],laid:28,laptop:18,larg:27,last:[11,24,25,27,28],later:[5,10,18],latest:[18,25],layout:16,lead:24,lean:0,learn:[0,13],least:[15,22,24],leav:[0,18],length:24,let:[6,24,28,29],level:17,level_fmt:17,levelformatt:17,liabil:[0,24],libav:[24,28],librari:[6,15,16,23],licens:[0,24],life:[0,24],light:13,like:[3,9,13,14,17,18,19,22,23,24,27,28,29],likewis:1,limit:[0,10,24],line:[4,12,13,14,17,20,21,22,23,24,25,27,28,29],linecach:6,linestyl:13,linewidth:13,linger:14,link:24,linux:[14,16],list:[1,3,5,6,11,12,15,19,22,24,28],listen:[1,7,21,22,24,29],lite:[7,24],littl:6,live:[1,7,16],load:[12,24],loc:15,local:[0,16,21,22,24,27],localhost:[22,25],locat:[15,18,22,23,24,29],lock:24,log:[13,14,17,22,24,26,29],logdir:26,logdir_permiss:26,logic:28,loginctl:14,lognam:17,logrecord:17,longer:[6,24],look:[0,10,14,16,18,19,22,24,27,28,29],loop:[6,22,25,28],lose:24,loss:[21,29],lost:21,lot:[6,28],low:[0,22],lowpass:[1,24,26],lta:16,lxml:18,mac:[18,24],machin:[14,22,24],maco:16,made:[0,11,28],mai:[0,3,6,10,14,18,19,23,24,28,29],main:[3,6,12,16,20,21,24,28],mainloop:6,mainpid:14,maintain:[0,28],make:[0,4,6,10,12,13,18,22,24,27,28,29],make_test_set:[26,27,28],make_trac:22,manag:24,mani:[0,6,10,24,28,29],manual:[16,18,24,29],master:[6,12,16,19,26,28],match:[15,24],matplotlib:[6,13,18,26,28],matter:24,max:1,mean:[0,4,18,24,27,28],meant:[0,24,27],measur:[7,15,24],media:[0,10,13,28],memori:[0,22],merg:22,messag:[1,2,3,4,5,6,7,8,9,10,11,13,15,16,17,19,20,24,25,26],method:[18,23,24],metric:15,mexican:[8,24],microsecond:15,middl:[16,28],might:[14,24,29],millisecond:[21,22],miniconda3:18,miniconda:18,minimum:0,minise:[11,16,20,26,27],minut:18,misconfigur:14,miss:24,mk_p:[12,28],mk_q:[12,28],mkdir:14,mode:[6,12,16,24,27],model:24,modif:22,modifi:[18,22,23,26,28],modul:[0,4,5,6,8,10,13,16,18,20,22,25,26],monei:0,monitor:[0,13,14,16,19,28,29],month:0,more:[4,5,6,10,13,15,22,23,24,27,28,29],most:[0,6,13,22,24,29],motion:[0,3,16,19,24],motor:13,move:[0,24,28,29],mp3:24,mp3file:24,mpl:26,mseed:[20,27],msg:[15,17],msg_alarm:15,msg_imgpath:15,msg_reset:15,msg_term:15,much:[0,24,28,29],multi:10,multipl:[0,5,24,28],must:[0,6,10,15,18,20,22,24,27,28,29],mymod:28,mymodul:28,n_internet:26,n_inventori:[9,26],n_port:26,nail:10,name:[6,11,15,17,18,21,22,23,24,26,27,28],nano:14,nation:24,nativ:24,natur:0,navig:29,nearbi:24,nearli:0,necessari:[14,15,22],necessarili:24,need:[0,13,14,15,16,18,22,23,24,26,27,28,29],neg:[0,24],nesbitt:16,network:[5,14,22,24,25,26],never:24,newbot:24,newlin:[4,24],next:[14,18,23,24,25,28],nodata:22,node:[24,29],noder:24,nois:24,non:[0,24],none:[4,12,15,17],nonetyp:15,normal:[9,27,28],notabl:24,note:[0,27,29],notif:[0,8,10,16],notifi:[1,16,29],now:[14,18,22,24,28],nth:6,num:5,number:[6,8,15,21,22,24,28],numpi:18,object:[1,2,3,5,6,15,18,19,22,28],obspi:[1,3,6,11,15,18,19,20,22,24,27,28],occasion:[0,24],occur:[24,28],odir:17,off:[12,13,22,26,28],off_ev:13,offic:30,offici:[0,24],often:[24,29],old:[18,22],on_ev:13,onc:[6,10,24,27,28],one:[0,4,5,13,15,22,23,24,27,28,29],ones:13,onli:[0,8,9,10,12,15,22,23,24,28],onlin:29,open:[0,13,18,22,23,24,25,28],opensock:22,oper:[9,11,17,18,23,27],operand:17,option:[5,7,10,16,22,24,28],order:[0,5,6,14,15,16,18,22,24,28],ordinari:27,ordinarili:27,org:[13,28,29],organ:[16,28],orig:22,oserror:22,other:[0,1,3,5,6,8,11,13,14,16,18,19,23,24,28],otherwis:[7,11,21,26],our:[13,16,18,23,28,29,30],out:[6,16,17,22,24,27,28,29],outcom:0,outf:20,outlin:28,output:[0,12,13,14,15,17,20,24,26,29],output_dir:[11,15,24],outsid:29,over:[1,11,18,22,27,29],overload:29,overrid:18,overview:[16,24],overwrit:23,overwritten:18,own:[0,13,16,22,24,26],p_data_dir:26,p_log_dir:26,p_log_fil:26,p_log_std:26,p_output_dir:26,p_produc:[1,3,15,16,22,24,28],p_screenshot_dir:26,packag:[20,24],packet:[5,6,7,9,11,15,16,22,24,25,26,27,29],packetloss:[16,29],pad:15,page:[1,2,3,4,5,6,7,8,9,10,11,12,13,16,19,20,21,22,24,25,26,27,29],panama:30,panamaigc:8,param:28,paramet:[1,2,3,4,5,6,7,8,9,10,11,12,15,16,17,19,20,21,22,24,25,26,28],parent:28,pars:[16,22,28],parser:28,part:[0,10,24,28],partial:15,partwai:18,pass:[2,3,4,5,6,9,12,13,15,16,19,20,21,22,24,25,26],past:[13,14,29],path:[15,18,23,24,26],patienc:29,paus:18,per:[6,11,15,22,23,24],perform:[0,24],perhap:[0,27],period:[0,21,24,29],perman:14,permiss:[10,26,27,29],person:16,piec:[0,24,27],pin:13,ping:24,pip:18,place:[22,24,28],plai:[13,16,18,26,27,28],plan:28,platform:[0,10,28],playback:24,pleas:[0,4,13,18,24,27,29],plenti:22,plot:[0,3,13,15,16,19,23,26,28],plt:13,plu:29,png:[15,24,28],point:[22,24,28],popul:[3,6,19,24],port:[5,7,15,19,21,22,23,24,25,26,27,28,29],portion:24,posit:[0,9,24,25],post:[8,10,24,28,29],potenti:13,power:[0,6,9,22,24],pre:16,precis:[15,22],prefer:[16,23],prepar:25,preparatori:17,press:[23,24,29],pressur:[0,15,16,24],pretti:28,previou:[18,24],print:[7,15,16,17,21,22,26],printdata:[16,26],printfreq:21,printm:[17,22,28],printraw:24,printttl:21,printw:17,prior:[4,22,24,26],privat:29,privileg:18,probabl:[18,28],problem:[13,18,24,27,29],proc:12,proce:[18,24],process:[0,3,6,9,10,12,16,21,23,24,26,27,28],processor:[6,18,24],produc:[1,3,12,13,15,16,20,22,24,27],profession:[0,24],profil:[18,24],program:[0,11,13,14,16,18,21,22,23,24,25,26,27],programmat:28,project:[0,16],prompt:[18,23],properli:6,properti:[0,24],protect:0,protocol:29,provid:[0,13,14,24,29],pull:[18,28],purpos:[11,24,28],put:[6,15,19,24],pydub:[2,26],pyplot:[13,28],python3:20,python:[0,4,15,16,18,20,24,28],qt5:6,quak:24,quarter:6,question:[4,11,13,24,28],queue:[1,2,3,4,5,6,7,8,9,10,11,12,13,15,19,24,25,26,28],quickli:[0,8,10],quiet:[7,26],quit:[2,4,6,7,16,19,25,28],r24fa:[15,26,28],r3bcf:22,r940d:22,rais:[1,6,22],ram:0,raspberri:[0,10,14,15,16,18,20,22,24,25,26,27,29,30],raspberryshak:[13,15,16,28,29],raspbian:[14,18,24],raspishak:[13,14,16],rate:[6,10,15,21,22,25,27],ratio:[1,24],raw:[5,15,24],rcb43:22,reach:25,read:[1,2,3,4,5,7,8,10,11,15,16,18,20,22,24,25,27,28],read_set:15,reader:25,readi:[15,18,23,24],readili:24,real:[0,7,14,16],realli:24,reason:[14,18,23,29],reboot:14,rebuild:23,receiv:[19,22,24,26,27,28],recept:9,record:[0,6,15,17,27],recur:29,recurs:[1,24],recursive_sta_lta:[1,24],red:[14,28],redraw:6,referenti:22,reflect:[15,29],refresh:[6,24],regard:[0,14],regist:24,reject:24,rel:10,relat:6,releas:[18,24],relev:[24,26,28,29],reli:[0,24,28],reliabl:[10,22],reload:14,remain:0,remind:28,remot:[16,27],remov:24,render:24,replac:18,report:[12,15,21,22,28,29],repositori:[0,18,23,24],repres:9,request:[22,28],requir:[0,4,22,24,27,28],reset:[1,5,9,13,15,22,24,26,28],reset_tim:15,resid:29,resiz:6,resolv:[22,24],resourc:[13,16],respect:[24,28],respons:[24,29],rest:[27,28],restart:[0,16,24,29],restartsec:14,restructuredtext:28,result:[12,24,26],rewritten:18,richard:16,right:[15,22,28,29],rigor:10,room:0,round:15,router:29,routin:[0,6,11,12,13,27],row:[28,29],rs4d:[15,24],rsam:[16,26],rsstn:22,rsudp:[13,24,28,30],rsudp_set:[18,23,24,29],rtype:28,rule:10,run:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,16,19,20,21,22,25,26,27,28,30],runtim:28,s0cde:22,safer:29,sai:[14,24,29],said:24,same:[22,24,25,27,29],sampl:[6,11,15,22,27],sasmex:[8,24],save:[0,6,15,17,24,28],save_pct:6,savefig:[6,28],scenario:24,scienc:[0,15,22],scipi:18,screen:[15,24],screencap:6,screenshot:[6,13,15,24,26,28],script:[13,14,18,22,23,24,27,29],scroll:29,search:[1,2,3,4,5,6,7,8,9,10,11,12,16,19,20,21,22,24,25,26,29],sec:15,second:[1,2,6,7,11,14,15,18,21,22,24,27,28,29],secret:[10,24],section:[0,5,18,24,28,29],secur:29,sediment:24,see:[0,1,2,4,5,6,7,8,9,10,12,13,14,16,17,19,20,22,23,24,25,27,28,29],seek:25,seem:0,segment:11,seiscomp3:22,seismic:[0,7,16,20,22,27],seismogram:[6,24],seismograph:[0,16],seismolog:0,self:[2,4,6,7,9,11,15,22,25,28],send:[1,6,7,8,10,13,15,17,22,23,24,25,26,27,28,29],send_imag:[8,24],sender:[8,17,22,28],sent:[1,2,3,4,5,6,7,8,9,10,11,22,24,25,28,29],separ:[6,24],sequenc:[24,28],serial:15,server:[24,26],servic:[6,8,10,14,24,26,29],set:[0,1,4,5,6,7,10,11,12,13,14,15,16,18,21,22,23,25,26,29,30],set_channel:15,set_param:22,set_sp:[6,11],settings_loc:15,setup:[12,16,22,29],setup_plot:6,seven:9,sever:[18,23,24,29],shake:[0,6,10,14,15,16,20,22,23,24,25,26,27,30],shorten:24,should:[0,1,12,14,18,19,22,24,28,29],show:[0,12,14,27,28],shown:28,shutdown:6,shz:[15,24],side:16,sig:12,sign:24,signal:[1,6,12,21,22,24,28],signal_handl:21,signum:[21,22],similar:[0,13,18,28],simpl:[0,10,11,15,24,25],simpli:[18,24],simultan:[0,24],sinc:[13,21,22,24,28,29],singl:[5,22,24],site:29,size:24,skip:18,sleep:14,slice:11,slicestream:11,slightli:[27,29],slow:29,slower:[6,24],small:[24,27,29],social:[0,10,13,28],socket:[22,25],softwar:[0,13,18,23,24,27,28],solut:22,solv:29,some:[6,13,14,15,18,22,23,24,26,28,29],somehow:14,someon:27,someth:[13,14,16,22,24,28,29],sometim:10,somewher:[24,29],sonar:24,soon:30,sort:28,sound:[0,1,13,16,18,23,26,27,28],soundloc:2,sourc:[0,23,24,28,29],space:[17,24],span:10,special:16,specif:[1,6,12,15,18,21,22,27,29],specifi:[5,7,15,17,22,24,25,26,27,28,29],spectrogram:[6,24],speed:[24,25],spent:0,sphinx:28,spin:28,sps:[15,22],sqlalchemi:18,ss_permiss:26,sta:[2,16],stabl:0,stackoverflow:[4,17,22,24],stamp:17,stand:28,standard:[0,4,24,28],start:[5,9,11,12,14,16,21,22,24,25,26,27,28],start_log:17,startup:6,stat:15,state:[0,12,13,22,23,24,26],station:[15,22,24,26],statist:21,statu:[14,19,28],stdout:[24,26],steim2:24,step:[17,18,24,28],still:[24,29],stn:22,stomp:24,stop:[12,19,23],store:[22,29],str:[1,4,5,6,7,8,10,11,15,17,20,22,25,26,28],straightforward:29,strang:15,stream:[1,3,6,9,11,15,16,19,21,22,23,24,28,30],street:0,strftime:[15,17],strict:29,stricter:10,string:[4,6,15,17,22,24,25,28],structur:[14,26],student:27,stuff:[6,28],style:[4,24],sub:[3,12,15,16,22,28],submit:[28,29],subsequ:24,substitut:[0,24],succe:24,success:26,successfulli:24,sudden:[0,16,24],sudo:[14,24],suffer:0,suffic:0,suffici:24,suggest:[13,16],suit:[8,24],summari:27,suppli:[12,24],support:[15,28,29],suppress:7,sure:[4,13,24,27,29],suspici:10,switcher:24,sys:28,system:[0,8,14,18,22,23,24],systemctl:[0,16],systemd:14,t_testdata:[16,27],tab:24,tag:13,tail:14,take:[6,12,18,24],taken:12,talk:29,target:[14,29],task:[0,3,19],task_don:28,team:[15,29],technic:29,telegram:[0,10,13,16,26],telegramm:[8,24,28],tell:[18,24,27,28,29],term:[1,2,4,6,7,9,15,19,24,25,26,28],termin:[18,23],test:[0,1,2,3,4,5,6,7,8,10,11,12,14,15,16,17,18,19,20,24],test_mod:12,testb:22,testdata:[9,25,27],testdir:26,text:[10,12,14,15,17,20,24,26,27,29],than:[5,6,10,14,18,23,24,27,29],thank:[28,29],thei:[13,17,19,22,23,26,27,28,29],them:[12,17,24,25,28,29],theoret:24,theori:[0,28],therefor:16,thi:[0,1,3,4,5,6,8,9,10,11,14,15,16,17,18,20,21,22,23,24,25,26,27,28,29],thing1:28,thing:[0,3,6,8,13,17,19,24,28,29],think:10,thoroughli:24,those:[3,5,20,22],thread:[5,9,12,16,19,22,24,25,27],threadsaf:[6,15],three:[24,28,29],thresh:1,threshold:[1,24,26],through:[0,6,10,18,23,27,28,29],thu:18,tick:11,time:[0,1,6,7,11,13,14,15,16,17,21,22,23,26,27,29],timeout:22,timestamp:[15,22,25],tkagg:6,tmp:[13,14,24,26,29],token:[8,10,24],too:[24,29],tool:0,top:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29],total:22,trace:[0,15,22],track:16,tradit:28,transduc:[0,15,16,24],transmiss:[15,21,22,25,26],tri:0,trigger:[0,1,3,6,13,16,19,26,27,28],tripl:[13,29],troubl:[18,27],troubleshoot:[16,27],truncat:24,turn:[12,20,28,29],tutori:[14,16,18,23],tweet:[10,16,26],tweet_imag:[10,24],tweeter:[10,24,28],twitter:[0,13,16,26],two:[15,24,28],txt:[20,27],type:[6,9,11,12,15,16,17,18,21,22,23,24,26,27],typic:[24,27,29],ubuntu:14,udp:[0,5,7,16,20,22,23,24,25,27,29],unam:18,uncheck:24,unconsolid:24,under:29,understand:[24,28],unfamiliar:28,uniqu:0,unit:[14,15,24,26],univers:28,unix:[4,13,14,16,18,22,24],unless:24,unlimit:22,unmaintain:0,unmodifi:24,unpredict:0,unstabl:29,until:[9,15,22,25,28,29],unzip:18,updat:[6,11,22,24],update_plot:6,update_stream:22,upload:6,upon:[16,28],usag:[20,22,27],use:[0,6,10,15,18,22,23,27,28],used:[0,3,6,8,10,13,15,17,19,22,24,27,28],useful:[0,17,27,28],user:[0,4,14,15,16,22,23,24,28,29],usernam:24,uses:[0,1,15,17,28,29],usestim:17,usg:10,using:[4,10,13,14,17,18,20,21,22,24,26,27,29],usual:[0,27,29],utc:11,utcdatetim:[1,6,15,22],utcdatetime1:13,utcdatetime2:13,utcdatetime3:13,utcdatetime4:13,util:[17,20,24],valid:[15,24],valu:[12,18,21,22,24,26,28,29],vari:10,variabl:[11,12,15,18,22,26],variou:[3,6,16,18,19,27],vel:[7,24],veloc:[15,24],verbos:15,veri:[22,24],version:[4,5,7,8,9,10,12,15,18,24,25,26,28],vertic:[6,15,24],via:[0,8,28,29],vibrat:0,video:[16,18,23],virtual:18,visual:16,voltag:24,wai:[0,6,13,16,24,26,27,28,29],wait:[22,24],walkthrough:16,want:[4,13,14,15,24],wantedbi:14,warm:24,warn:[0,4,8,17,24],warnformat:17,warranti:[0,24],wast:26,watch:[27,28],web:24,websit:24,week:0,weird:6,welcom:[13,16],well:[13,14,24,29],were:[24,27],what:[4,14,16,24,27,28,29],whatev:[24,28],when:[0,1,2,6,10,11,13,16,18,21,22,24,25,28,30],whenev:24,where:[6,18,20,23,24,28,29],wherea:14,whether:[0,1,5,6,8,10,11,12,14,17,18,19,24,26,27],which:[0,8,14,15,17,19,20,21,22,24,27,28,29],white:15,why:[16,29],wifi:29,williamstown:24,win:[18,23],win_overrid:[4,24],win_ovr:4,window:[4,6,7,13,16],wish:[18,24,26,28],within:[14,20],without:[0,6,13,24,27,29],work:[13,14,15,18,22,24,28,29],worker:28,would:[15,18,24,26,27,28,29],write:[16,17,20,26],writer:16,written:[16,24],wrong:29,x86:18,x86_64:18,x_alarm:[9,26],x_data:26,x_imgpath:[9,26],x_masterqueu:26,x_packet:26,x_process:[9,26],x_reset:[9,26],x_send:26,x_term:[9,26],xyz:28,yellow:15,yet:0,yield:[17,24],you:[0,4,10,13,14,15,16,18,22,23,24,26,27,28,29],your:[4,10,13,14,16,21,22,23,24,26,29],your_modul:[26,28],your_shake_bot_id:24,your_test:26,yourself:[18,29],youtub:16,z0000:[22,24,26],zero:[15,22,29]},titles:["<span class=\"section-number\">1. </span>About rsudp","<code class=\"xref py py-data docutils literal notranslate\"><span class=\"pre\">rsudp.c_alert</span></code> (STA/LTA alarm)","<code class=\"xref py py-data docutils literal notranslate\"><span class=\"pre\">rsudp.c_alertsound</span></code> (play sound)","<code class=\"xref py py-data docutils literal notranslate\"><span class=\"pre\">rsudp.c_consumer</span></code> (master consumer)","<code class=\"xref py py-data docutils literal notranslate\"><span class=\"pre\">rsudp.c_custom</span></code> (run code)","<code class=\"xref py py-data docutils literal notranslate\"><span class=\"pre\">rsudp.c_forward</span></code> (forward data)","<code class=\"xref py py-data docutils literal notranslate\"><span class=\"pre\">rsudp.c_plot</span></code> (plot data)","<code class=\"xref py py-data docutils literal notranslate\"><span class=\"pre\">rsudp.c_rsam</span></code> (RSAM analysis)","<code class=\"xref py py-data docutils literal notranslate\"><span class=\"pre\">rsudp.c_telegram</span></code> (Telegram alerts)","<code class=\"xref py py-data docutils literal notranslate\"><span class=\"pre\">rsudp.c_testing</span></code> (test consumer)","<code class=\"xref py py-data docutils literal notranslate\"><span class=\"pre\">rsudp.c_tweet</span></code> (Twitter alerts)","<code class=\"xref py py-data docutils literal notranslate\"><span class=\"pre\">rsudp.c_write</span></code> (write data)","<code class=\"xref py py-data docutils literal notranslate\"><span class=\"pre\">rsudp.client</span></code> (central module)","<span class=\"section-number\">2. </span>Contributing to this project","<span class=\"section-number\">5. </span>rsudp as a <code class=\"docutils literal notranslate\"><span class=\"pre\">systemctl</span></code> daemon","<code class=\"xref py py-data docutils literal notranslate\"><span class=\"pre\">rsudp.helpers</span></code> (helper functions)","<cite>rsudp</cite> 1.0.2","<code class=\"xref py py-data docutils literal notranslate\"><span class=\"pre\">rsudp.__init__</span></code> (initialization functions)","<span class=\"section-number\">2. </span>Installing rsudp","<code class=\"xref py py-data docutils literal notranslate\"><span class=\"pre\">rsudp.p_producer</span></code> (data producer)","<code class=\"xref py py-data docutils literal notranslate\"><span class=\"pre\">rsudp.packetize</span></code> (data formatter)","<code class=\"xref py py-data docutils literal notranslate\"><span class=\"pre\">rsudp.packetloss</span></code> (track packets)","<code class=\"xref py py-data docutils literal notranslate\"><span class=\"pre\">rsudp.raspberryshake</span></code> (main library)","<span class=\"section-number\">4. </span>Running rsudp","<span class=\"section-number\">3. </span>Modules and Settings","<code class=\"xref py py-data docutils literal notranslate\"><span class=\"pre\">rsudp.t_testdata</span></code> (test pre-producer)","<code class=\"xref py py-data docutils literal notranslate\"><span class=\"pre\">rsudp.test</span></code> (test helpers)","<span class=\"section-number\">7. </span>Testing and demoing rsudp","<span class=\"section-number\">1. </span>Program architecture and flow","<span class=\"section-number\">6. </span>Troubleshooting rsudp","YouTube walkthroughs"],titleterms:{"default":24,"function":[15,16,17,27],Adding:28,The:18,Using:[24,27],__init__:17,about:0,add:18,advanc:18,alarm:1,alarmsound:24,alert:[8,10,24],amplitud:24,analysi:7,app:24,architectur:28,bashrc:18,bot:24,broad:0,bug:13,c_alert:1,c_alertsound:2,c_consum:3,c_custom:4,c_forward:5,c_plot:6,c_rsam:7,c_telegram:8,c_test:9,c_tweet:10,c_write:11,can:[0,29],central:12,classroom:24,client:[12,28],code:[4,13,16,24],command:29,conda:29,consol:24,consum:[3,9,28],contribut:13,custom:24,daemon:14,data:[5,6,11,19,20,24,27,29],datacast:24,demo:[27,30],demonstr:[23,24],depend:24,detect:[24,30],document:16,dure:27,earthquak:[24,30],easi:18,exec:24,featur:28,file:28,firewal:29,flow:[27,28,29],formatt:20,forward:[5,24],gener:24,helper:[15,26],home:29,inconsist:29,index:16,initi:17,instal:[18,24],instruct:14,issu:29,layout:28,librari:22,line:18,linux:[18,24],live:[24,30],local:29,lta:[1,24],maco:[18,24],main:22,manual:23,master:3,messag:28,middl:29,minise:24,mode:23,modul:[12,24,27,28],network:29,notif:24,other:29,overview:0,own:[27,28],p_produc:19,packet:[20,21],packetloss:21,pass:28,plai:[2,24],plot:[6,24],pre:25,print:24,printdata:24,produc:[19,25,28],program:28,project:13,pydub:24,quiet:24,quit:23,raspberryshak:22,real:24,receiv:29,recommend:24,remot:29,restart:14,rsam:[7,24],rsudp:[0,1,2,3,4,5,6,7,8,9,10,11,12,14,15,16,17,18,19,20,21,22,23,25,26,27,29],run:[4,18,23,24,29],sampl:28,school:29,seismic:24,set:[24,27,28],setup:14,shake:29,side:29,sound:[2,24],sourc:18,special:0,sta:[1,24],start:23,stop:29,suggest:28,systemctl:14,t_testdata:25,telegram:[8,24],test:[9,23,25,26,27,28],thi:13,thread:28,time:24,track:21,trigger:24,troubleshoot:[14,29],tweet:24,twitter:[10,24],type:28,univers:29,unix:23,updat:18,upon:24,use:24,user:18,vault:24,wai:18,walkthrough:30,what:0,why:0,window:[18,23,24],write:[11,24],writer:24,your:[18,27,28],youtub:30}})
\ No newline at end of file
+Search.setIndex({docnames:["about","c_alert","c_alertsound","c_consumer","c_custom","c_forward","c_plot","c_rsam","c_telegram","c_testing","c_tweet","c_write","client","contributing","daemon","helpers","index","init","installing","p_producer","packetize","packetloss","raspberryshake","running","settings","t_testdata","test","testing","theory","troubleshooting","youtube"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":2,"sphinx.domains.index":1,"sphinx.domains.javascript":2,"sphinx.domains.math":2,"sphinx.domains.python":2,"sphinx.domains.rst":2,"sphinx.domains.std":1,"sphinx.ext.intersphinx":1,"sphinx.ext.todo":2,sphinx:56},filenames:["about.rst","c_alert.rst","c_alertsound.rst","c_consumer.rst","c_custom.rst","c_forward.rst","c_plot.rst","c_rsam.rst","c_telegram.rst","c_testing.rst","c_tweet.rst","c_write.rst","client.rst","contributing.rst","daemon.rst","helpers.rst","index.rst","init.rst","installing.rst","p_producer.rst","packetize.rst","packetloss.rst","raspberryshake.rst","running.rst","settings.rst","t_testdata.rst","test.rst","testing.rst","theory.rst","troubleshooting.rst","youtube.rst"],objects:{"rsudp.__init__":{LevelFormatter:[17,1,1,""],add_debug_handler:[17,3,1,""],init_dirs:[17,3,1,""],printE:[17,3,1,""],printM:[17,3,1,""],printW:[17,3,1,""],start_logging:[17,3,1,""]},"rsudp.__init__.LevelFormatter":{format:[17,2,1,""]},"rsudp.c_alert":{Alert:[1,1,1,""]},"rsudp.c_alert.Alert":{run:[1,2,1,""]},"rsudp.c_alertsound":{AlertSound:[2,1,1,""]},"rsudp.c_alertsound.AlertSound":{run:[2,2,1,""]},"rsudp.c_consumer":{Consumer:[3,1,1,""]},"rsudp.c_consumer.Consumer":{run:[3,2,1,""]},"rsudp.c_custom":{Custom:[4,1,1,""]},"rsudp.c_custom.Custom":{run:[4,2,1,""]},"rsudp.c_forward":{Forward:[5,1,1,""]},"rsudp.c_forward.Forward":{run:[5,2,1,""]},"rsudp.c_plot":{Plot:[6,1,1,""]},"rsudp.c_plot.Plot":{deconvolve:[6,2,1,""],figloop:[6,2,1,""],getq:[6,2,1,""],handle_close:[6,2,1,""],handle_resize:[6,2,1,""],mainloop:[6,2,1,""],qu:[6,2,1,""],run:[6,2,1,""],savefig:[6,2,1,""],set_sps:[6,2,1,""],setup_plot:[6,2,1,""],update_plot:[6,2,1,""]},"rsudp.c_rsam":{RSAM:[7,1,1,""]},"rsudp.c_rsam.RSAM":{run:[7,2,1,""]},"rsudp.c_telegram":{Telegrammer:[8,1,1,""]},"rsudp.c_telegram.Telegrammer":{run:[8,2,1,""]},"rsudp.c_testing":{Testing:[9,1,1,""]},"rsudp.c_testing.Testing":{run:[9,2,1,""]},"rsudp.c_tweet":{Tweeter:[10,1,1,""]},"rsudp.c_tweet.Tweeter":{run:[10,2,1,""]},"rsudp.c_write":{Write:[11,1,1,""]},"rsudp.c_write.Write":{elapse:[11,2,1,""],getq:[11,2,1,""],run:[11,2,1,""],set_sps:[11,2,1,""],slicestream:[11,2,1,""],write:[11,2,1,""]},"rsudp.client":{handler:[12,3,1,""],main:[12,3,1,""],mk_p:[12,3,1,""],mk_q:[12,3,1,""],run:[12,3,1,""],start:[12,3,1,""],test:[12,3,1,""],test_mode:[12,3,1,""]},"rsudp.helpers":{conn_stats:[15,3,1,""],deconv_acc_inst:[15,3,1,""],deconv_rbm_inst:[15,3,1,""],deconv_vel_inst:[15,3,1,""],deconvolve:[15,3,1,""],default_settings:[15,3,1,""],dump_default:[15,3,1,""],fsec:[15,3,1,""],get_msg_path:[15,3,1,""],get_msg_time:[15,3,1,""],get_scap_dir:[15,3,1,""],msg_alarm:[15,3,1,""],msg_imgpath:[15,3,1,""],msg_reset:[15,3,1,""],msg_term:[15,3,1,""],read_settings:[15,3,1,""],resolve_extra_text:[15,3,1,""],set_channels:[15,3,1,""]},"rsudp.p_producer":{Producer:[19,1,1,""]},"rsudp.p_producer.Producer":{run:[19,2,1,""]},"rsudp.packetize":{main:[20,3,1,""],packetize:[20,3,1,""]},"rsudp.packetloss":{main:[21,3,1,""],printTTLS:[21,3,1,""],run:[21,3,1,""],signal_handler:[21,3,1,""]},"rsudp.raspberryshake":{ConsumerThread:[22,1,1,""],copy:[22,3,1,""],getCHN:[22,3,1,""],getCHNS:[22,3,1,""],getDATA:[22,3,1,""],getSR:[22,3,1,""],getSTREAM:[22,3,1,""],getTIME:[22,3,1,""],getTR:[22,3,1,""],getTTLCHN:[22,3,1,""],get_inventory:[22,3,1,""],get_ip:[22,3,1,""],handler:[22,3,1,""],initRSlib:[22,3,1,""],make_trace:[22,3,1,""],openSOCK:[22,3,1,""],set_params:[22,3,1,""],update_stream:[22,3,1,""]},"rsudp.t_testdata":{TestData:[25,1,1,""]},"rsudp.t_testdata.TestData":{run:[25,2,1,""],send:[25,2,1,""]},"rsudp.test":{cancel_tests:[26,3,1,""],datadir_permissions:[26,3,1,""],is_connected:[26,3,1,""],logdir_permissions:[26,3,1,""],make_test_settings:[26,3,1,""],permissions:[26,3,1,""],ss_permissions:[26,3,1,""]},rsudp:{__init__:[17,0,0,"-"],c_alert:[1,0,0,"-"],c_alertsound:[2,0,0,"-"],c_consumer:[3,0,0,"-"],c_custom:[4,0,0,"-"],c_forward:[5,0,0,"-"],c_plot:[6,0,0,"-"],c_rsam:[7,0,0,"-"],c_telegram:[8,0,0,"-"],c_testing:[9,0,0,"-"],c_tweet:[10,0,0,"-"],c_write:[11,0,0,"-"],client:[12,0,0,"-"],helpers:[15,0,0,"-"],p_producer:[19,0,0,"-"],packetize:[20,0,0,"-"],packetloss:[21,0,0,"-"],raspberryshake:[22,0,0,"-"],t_testdata:[25,0,0,"-"],test:[26,0,0,"-"]}},objnames:{"0":["py","module","Python module"],"1":["py","class","Python class"],"2":["py","method","Python method"],"3":["py","function","Python function"]},objtypes:{"0":"py:module","1":"py:class","2":"py:method","3":"py:function"},terms:{"00z":22,"01t00":15,"10s":14,"15s":17,"16b":[0,24],"1dv7":22,"211704z":28,"21t19":22,"21t20":22,"23t06":28,"246777z":22,"292000z":22,"435214z":28,"532000z":22,"598944z":28,"599z":15,"boolean":[5,24,28],"break":25,"byte":[15,22,28],"case":[18,24,28,29],"class":[1,2,3,4,5,6,7,8,9,10,11,13,15,17,19,22,24,25,28],"default":[1,6,7,12,14,15,16,18,22,23,26,27,28],"final":[14,28,29],"float":[1,7,22,24],"function":[1,4,6,9,11,12,13,20,22,23,24,26,28],"import":[0,6,15,20,22,24,26,28],"int":[6,21,22,25],"long":[1,24],"new":[4,5,6,7,8,9,10,11,12,13,14,15,18,22,24,25,26,27,28,29],"public":[10,29],"return":[6,11,12,15,17,21,22,26,28],"short":[1,2,24],"super":28,"throw":24,"true":[1,4,6,7,11,12,15,17,21,22,24,26,28],"try":26,"while":[0,24,28,29],Adding:[13,16,22],And:28,EHE:15,ENE:15,For:[9,12,15,18,22,24,25,27,28,29],One:29,Pis:24,That:[24,27],The:[0,1,3,5,6,10,11,12,13,15,16,17,19,20,21,22,23,24,26,27,28,29],Then:[25,26,28,29],There:[24,28,29],These:[9,15,17,24],Using:[16,28],Will:22,__init__:[16,28],_eq:[],abc:28,abil:[0,27],abl:[0,24,28,29],abort:29,about:[4,13,14,15,16,23,24,27,28,29],abov:[4,23,24,28,29],acc:[7,24],acceler:[15,24],acceleromet:[0,15,24],accept:15,access:[10,24],access_secret:[10,24],access_token:[10,24],access_token_secret:10,accommod:24,accompani:0,accordingli:24,account:[10,24],accumul:22,accur:15,achiev:[0,24],across:[0,6,24,29],action:[0,12,27,28],activ:[0,10,14,17,18,20,21,23,24,29],actual:[13,24],adapt:[17,22],add:[0,10,17,24,26,28],add_debug_handl:17,added:[13,22,28],adding:27,addit:[0,8,10,13,15,17,28],addition:[0,24],addr:5,address:[5,7,15,22,24,25,29],adjust:[24,30],administr:18,advantag:24,adventur:13,after:[0,6,14,22,23,24,28,29],again:24,agenc:[10,24],agg:13,aggress:24,aim:0,alarm:[2,4,5,6,7,8,9,10,13,15,16,22,23,24,26,27,28],alarm_reset:[1,22],alarmsound:16,alert:[0,1,2,3,6,13,15,16,19,26,27,28],alertsound:[2,24,26,28],algorithm:[6,24],aliv:[9,19,22,25,28],all:[6,11,14,15,19,22,23,24,26,28,29],allow:[6,13,15,16,28,29],almost:29,along:28,alpha:13,alreadi:[13,14,17,24,28],also:[15,19,24,25,27,28,29],alt:24,although:[0,24,29],alwai:[13,14,24],amd:18,among:8,amount:24,amplitud:[7,16],anaconda3:18,anaconda:[18,23],analysi:[16,24],ani:[0,6,15,18,23,24,27,28,29],announc:17,anoth:[5,20,24,28,29],answer:[4,17,22,24],anyth:[12,27],anywai:24,api:[8,10,24,28],api_kei:24,api_secret:24,aplot:6,app:[10,13],appear:[24,29],append:[11,12,17,18,24],appli:[7,10,24],applic:0,appropri:[12,15,18,24],approxim:[8,24],apt:24,arbitrari:27,architectur:[16,18,27],archiv:27,arg:[1,7],argument:[20,21,22],armv7:18,armv7l:18,around:29,arriv:[2,6,24,25],artifici:27,ascii:20,asctim:17,ask:[18,29],aspect:0,assign:22,associ:17,assum:[0,24,28,29],atop:24,attach:[13,29],attribut:[17,22],audibl:0,audioseg:2,authent:24,automat:[8,18,22],avail:[0,15,16,18,22,23,24,26,27,30],averag:[1,2,24,29],avoid:[6,15,24],awai:0,axvlin:13,back:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29],backend:[6,13,26],backtick:[13,29],bak:18,bandpass:[1,24],bar:29,base:[18,24,27,28],bash:[14,18,23],basic:[24,27],bat:[18,23],batch:[13,23],beauti:0,becaus:[15,22,24],becom:27,bedrock:24,been:[0,18,24,29],beep:24,befor:[17,22,24,28],beforehand:24,begin:[6,23,25],behalf:10,behavior:6,being:[22,24,29],below:[0,16,18,24,27,28,29],beneath:[6,24],berryconda3:18,better:24,between:[21,22,24,28,29],beyond:13,bin:14,binari:24,bind:22,bit:27,block:6,blue:29,boaz:16,bonu:24,bool:[1,2,4,5,6,7,8,10,11,12,15,17,21,22,26,28],boom:[15,16,22,24,27,30],boot:14,bot:[8,10],botfath:24,both:[0,5,6,13,14,15,18,22,24,28],box:22,brace:28,brew:24,brief:[0,24],briefli:28,bring:[0,24],broad:16,broadcast:[6,8,24,28],bug:[16,22,29],build:[22,24,28],built:[5,10],button:29,buzzer:13,c_alarm:[],c_alert:[13,15,16,24],c_alertoff:26,c_alerton:26,c_alertsound:[16,24,28],c_anotheron:28,c_consum:[1,2,4,5,6,7,8,9,10,11,12,16,19,25,28],c_custom:[13,16,24,26],c_data:[],c_forward:[16,24,26],c_img:[9,26],c_imgpath:[],c_minise:26,c_mymodul:28,c_mytest:28,c_plai:26,c_plot:[15,16,24,26,28],c_print:26,c_printraw:24,c_process:[],c_reset:[],c_rsam:[16,26],c_telegram:[10,15,16,24,26,28],c_telegramimg:26,c_term:[],c_test:16,c_tweet:[16,24,26,28],c_tweetimg:26,c_write:[16,24,26],calcul:[0,1,3,6,19,22,24],calibr:15,call:[6,10,15,17,20,22,24,28,29],can:[4,5,6,10,13,14,15,16,18,20,22,23,24,27,28],cancel:26,cancel_test:26,cannot:[6,22,24,29],canva:6,capabl:[0,24,27,28],caption:28,captur:15,car:0,care:24,carri:17,cast:[0,29],caus:[6,11,18,22,24],centerpiec:0,central:[6,15,16],certain:[4,6,24],cha:[1,5,6,7,11,15],chan:[7,21,24,26],chang:[14,18,19,23,24,27,29],channel:[0,1,5,6,7,11,15,18,21,22,24,26],charact:[0,4,8,10,15,24],chart:[27,28],chat:[8,24],chat_id:[8,24],check:[4,14,15,16,18,24,27,29],child:28,chime:24,chn:22,choos:[5,18,23],chosen:[24,27],citizen:[15,22],classroom:27,clear:6,clearli:[13,29],click:[18,23,29],client:[2,16,22,23,27],clone:14,close:[6,12,23,28],closer:24,code:[0,6,14,18,22,26,28,29],codebas:0,codefil:[4,7,24],collect:0,color:[13,17],com:[13,14,16],combin:28,come:[10,22,23,24,29,30],comma:[24,28],command:[12,13,14,17,18,20,21,22,24,27],comment:[6,13],common:[22,29],commun:[0,13,24,28,29],comparison:24,compat:6,complex:0,comput:[0,17,18,23,29],conda:[18,20,21,23,27],config:[14,18,23,24,29],configur:[12,23,24,29],conform:28,confus:15,conn_stat:15,connect:[14,15,26,29],consecut:[21,22],consist:18,consol:[1,7,15,16],constant:21,constraint:24,construct:[15,28],consult:24,consum:[1,2,4,5,6,7,8,10,11,12,13,15,16,19,20,22,24,25,26],consumer_kei:10,consumer_secret:10,consumerthread:[22,28],contact:[0,24],contain:[0,6,13,15,20,22,24,25],content:27,continu:[0,16,24,25,27,28],contribut:[0,16],control:[13,23,24,28],convert:[4,15,20,22,24,27],cool:28,cooper:29,coordin:11,copi:[13,18,22,29],core:[1,6,11,15,22,26,27,28],correct:[4,22,24,29],correctli:[14,18,24,28],cost:0,could:[15,18,24,27,28,29],count:[15,22,24],counter:6,coupl:[17,24],cover:[18,23],cpu:22,creat:[13,14,15,16,17,18,22,23,24,27,28],creation:[8,13,14],crust:0,cryptographi:18,csv:[7,24],ctrl:[21,23,24,29],current:[9,15,18,22,26,28],custom:[4,13,16,26,27],custom_set:27,customiz:16,d_matplotlib:26,d_pydub:26,daemon:[0,12,16],dai:11,daili:11,data:[0,1,2,3,4,7,8,9,10,15,16,21,22,23,25,26,28,30],data_dir:11,data_fil:25,datacast:[5,16,22,23,29],datadir_permiss:26,date:[11,17],datefmt:17,datetim:[15,17],dead:14,debain:14,debian:24,debug:[1,7,11,12,24,26,28],decim:22,decod:15,deconv:[1,6,7],deconv_acc_inst:15,deconv_rbm_inst:15,deconv_vel_inst:15,deconvolut:15,deconvolv:[6,15,24,26],def:28,default_set:15,defin:24,definit:18,deliv:5,deliveri:29,demand:0,demo:[16,23],demonstr:[16,27],denot:[21,28],depend:[0,10,15,17,18,26,28],depict:27,deprec:24,depth:16,deriv:22,describ:[13,28,29],descript:[14,24,26,28],design:[0,24,25,27,29],desktop:18,destin:[3,5,12,24,28],detail:[0,6,10,22,24],detect:[0,16,23,26,27],detector:24,determin:[1,17,25],develop:[0,10,13,16,18,22,24,28],devic:[0,22,29],diagnost:14,diagram:[9,25,27],dict:[12,15,17,26],dictionari:[12,15,17,26,28],differ:[17,23,24,27,28,29],difficult:[10,29],digit:24,dir:24,directli:[0,22,24,28],directori:[14,15,17,18,24,26,27,28],disabl:[6,24],disclaim:[0,4,24],discov:27,disk:[11,15,25,27,28],disp:[7,24],displac:24,displai:[0,1,6,11,15,17,24,29],distanc:29,distribut:[0,3,5,10,18,19,24,28],docstr:28,document:[14,27,28],doe:[0,14,15,24,25,27],doesn:[15,18,24],doing:[14,24,27],don:[26,27,29],done:[14,15,18,20,22,27,28],doorbel:24,doubl:[18,23],down:[10,11,22],download:[18,22,24,26],downward:24,dport:22,draw:6,drawn:6,drop:[24,29],duckduckgo:29,due:[0,29],dump:[15,23,27],dump_default:15,duplic:28,durat:[1,2,6,24,26],dure:[9,16,25,28],dynam:6,each:[3,6,19,22,24,28,29],earli:[0,6,8,10,24],earlier:28,earth:0,earthquak:[0,16,23,27],easi:[0,13,23,24,28],easier:[10,13,24],easiest:26,easili:[13,22],echo:18,edg:24,edit:[18,27],educ:0,eew:[0,24],effect:6,effici:[13,28],ehn:15,ehz:[15,22,24,28],either:[5,6,7,20,23,24,28,29],elaps:[6,11,21],els:[12,29],elsewher:[0,14,24],embed:15,empti:24,emsc:10,enabl:[0,6,7,14,24,26,28],encod:22,encourag:28,end:[4,18,24,25,28],endpoint:24,endtest:25,enhanc:13,enn:15,enough:[0,22],ensur:24,enter:[14,18,23,24,27],entir:[14,24],entri:24,environ:[18,20,21,23,27],enz:[15,24],eq_screenshot:[24,26],equal:24,errformat:17,error:[0,6,13,14,15,17,22,24,29],especi:[6,24],essenti:[27,28],etc:[13,18],ethernet:29,even:[13,24,27,29],event:[0,6,12,13,15,17,24],event_tim:[6,15],event_time_str:6,eventu:28,everi:[6,7,14,21,24,29],evt:6,exampl:[3,15,17,18,19,21,22,28,29],exceed:[1,24],except:[17,22,28],excess:24,exec:4,execreload:14,execstart:14,execstartpr:14,execstop:14,execut:[3,4,7,14,18,19,22,24,26,28],exist:[17,24,26,28,29],exit:[24,25,28],experi:[24,29],explain:24,explan:18,explicit:[0,24],explor:0,extens:0,extern:29,extra:[10,24],extra_text:[8,10,15,24],extract:22,extrem:[0,24],face:29,fact:0,fail:14,failur:28,fairli:29,fals:[0,1,2,3,4,5,6,7,8,9,10,11,12,15,17,19,20,21,22,24,25,26,28],far:[0,29],fast:[22,24],fdsn:[22,24,26],featur:[0,13,16,23,29],feed:27,feel:[13,16,28],fetch:9,few:24,ffmpeg:[18,24,28],field:[15,18,24],fifo:28,figloop:6,fignam:15,figur:[0,6,15,24,27,28,29],file:[4,5,6,10,11,14,15,17,18,20,23,24,25,26,27,29],filenam:6,filesystem:24,fill:24,filter:[1,24],find:[5,13,16,22,24,27],fine:22,firewal:16,first:[6,10,14,18,23,24,25,28,29],fix:[18,29],flag:[1,19,27,28],flavor:24,flow:[9,16,23,25],fmt:17,focu:23,folder:[18,24],follow:[4,14,15,16,18,21,24,26,27,28,29],footstep:24,forc:[23,24],forg:18,fork:24,form:[22,28],formal:28,format:[0,1,4,7,13,15,17,20,24,25,27,28,29],formatexcept:17,formatt:[16,28],formattim:17,formerli:23,forum:[13,28,29],forward:[7,11,16,23,26,29],found:24,four:[9,24],fraction:15,frame:[12,21,22],free:[8,24,28,29],freez:14,freq:15,frequenc:[21,22,24],from:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30],front:24,fsec:15,full:[6,15],fulli:[0,22,24],fullscreen:[6,24],fun:13,further:[0,24],futur:[18,24],fwaddr:[7,24],fwd_alarm:[5,24],fwd_data:[5,24],fwformat:[7,24],fwport:[7,24],gather:28,gempa:22,gener:[10,16,18,27,28,29],geophon:[0,6,15,24],get:[5,6,13,15,16,22,24,26,27,28,29],get_inventori:22,get_ip:22,get_msg_path:15,get_msg_tim:15,get_scap_dir:15,getchn:22,getdata:22,getmessag:17,getq:[6,11,28],getsr:22,getstream:22,gettim:22,gettr:22,getttlchn:22,git:[14,18,23],github:[13,14,16,18,29],give:[10,24,29],given:[15,28,29],glad:29,global:[12,22],globe:29,goe:[24,28,29],going:[0,29],gone:10,got:28,gpio:13,gracefulli:19,grade:[0,24],graphic:14,grasp:0,grav:7,great:29,green:14,grei:14,ground:[3,19],group:24,guarante:[0,24,29],gui:[0,6,24],guid:[16,24],guidanc:12,hack:22,had:24,handl:[6,12,23],handle_clos:6,handle_res:6,handler:[12,17,21,22],happen:[6,24,28,29],hard:29,harmless:18,has:[0,4,6,9,10,11,18,21,24,28,29],have:[0,4,6,13,14,15,18,22,24,27,28,29],hdf:[15,22,24],head:18,headless:0,hear:13,heart:6,help:[12,22,24,29],helper:[16,22],here:[0,1,4,13,17,24,26,28],hierarchi:[9,25,27,28],high:24,higher:24,highli:16,highpass:[1,24,26],hit:18,hobbi:[0,24],hold:24,home:[14,15,18,23,24,28],homebrew:24,host:[22,29],hostnam:26,hour:[0,10,21,29],how:[6,13,18,23,24,27,28],howev:[10,18,24,27,29],http:[13,14,16,28,29],hundredth:15,hyperlink:24,ian:16,iannesbitt:[14,15],idea:28,identifi:15,ifttt:13,ignor:[5,11,23,24,28],imag:[6,8,10,15,24,26,28],imgpath:[6,8,9,10,15,26,28],immedi:25,implement:28,impli:[0,24],implic:24,importerror:6,inabl:29,inact:14,includ:[0,10,14,22,23,24,27,28],incom:[1,23],incorpor:15,increas:22,increment:6,indefinit:29,independ:28,index:[1,2,3,4,5,6,7,8,9,10,11,12,19,20,21,22,24,25,26],indic:[12,13,19,29],individu:[27,29],inet:26,inf:20,infinit:28,info:[17,29],infoformat:17,inform:[0,10,15,17,22,24,28,29],ingest:29,init:[15,29],init_dir:17,initd:22,initi:[15,16,21,22,26,28],initrslib:22,input:[20,24],insert:24,inset:28,insid:[24,29],instal:[0,14,16,20,21,23,27,30],instanc:[15,28],instanti:28,instantli:28,instead:[10,27],institut:22,instruct:[4,16,18,24,26,27],instrument:[0,15,16,22,24],integ:[15,18,22],integr:[13,27,28],intend:[0,22,24],interact:13,interfac:17,intern:[24,29],internet:[26,27,29],interrupt:14,interv:[7,24,26],intervent:0,intuit:0,inv:[15,22],inventori:[9,15,22,24,26],involv:13,ioerror:[22,29],is_connect:26,isn:13,isp:29,issu:[0,13,16,24,27,28],item:[24,28],its:[0,9,10,14,15,22,24,26,27,28],itself:27,job:29,json:[5,7,15,18,23,24,27,28,29],jump:24,just:[9,11,24,28,29],keep:[0,22,24],kei:[10,18,24,29],keystrok:21,kid:13,kill:14,kiosk:[0,6,24],know:[16,18,28,29],known:[23,24,29],kwarg:[1,7,22],label:[17,29],laid:28,laptop:18,larg:27,last:[11,24,25,27,28],later:[5,10,18],latest:[18,25],layout:16,lead:24,lean:0,learn:[0,13],least:[15,22,24],leav:[0,18],length:[15,24],let:[6,24,28,29],level:17,level_fmt:17,levelformatt:17,liabil:[0,24],libav:[24,28],librari:[6,15,16,23],licens:[0,24],life:[0,24],light:13,like:[3,9,13,14,17,18,19,22,23,24,27,28,29],likewis:1,limit:[0,8,10,15,24],line:[4,12,13,14,17,20,21,22,23,24,25,27,28,29],linecach:6,linestyl:13,linewidth:13,linger:14,link:24,linux:[14,16],list:[1,3,5,6,11,12,15,19,22,24,28],listen:[1,7,21,22,24,29],lite:[7,24],littl:6,live:[1,7,16],load:[12,24],loc:15,local:[0,16,21,22,24,27],localhost:[22,25],locat:[15,18,22,23,24,29],lock:24,log:[13,14,17,22,24,26,29],logdir:26,logdir_permiss:26,logic:28,loginctl:14,lognam:17,logrecord:17,longer:[6,8,10,15,24],look:[0,10,14,16,18,19,22,24,27,28,29],loop:[6,22,25,28],lose:24,loss:[21,29],lost:21,lot:[6,28],low:[0,22],lowpass:[1,24,26],lta:16,lxml:18,mac:[18,24],machin:[14,22,24],maco:16,made:[0,11,28],mai:[0,3,6,10,14,18,19,23,24,28,29],main:[3,6,12,16,20,21,24,28],mainloop:6,mainpid:14,maintain:[0,28],make:[0,4,6,10,12,13,18,22,24,27,28,29],make_test_set:[26,27,28],make_trac:22,manag:24,mani:[0,6,10,24,28,29],manual:[16,18,24,29],master:[6,12,16,19,26,28],match:[15,24],matplotlib:[6,13,18,26,28],matter:24,max:1,max_len:15,mean:[0,4,18,24,27,28],meant:[0,24,27],measur:[7,15,24],media:[0,10,13,28],memori:[0,22],merg:22,messag:[1,2,3,4,5,6,7,8,9,10,11,13,15,16,17,19,20,24,25,26],method:[18,23,24],metric:15,mexican:[8,24],microsecond:15,middl:[16,28],might:[14,24,29],millisecond:[21,22],miniconda3:18,miniconda:18,minimum:0,minise:[11,16,20,26,27],minut:18,misconfigur:14,miss:24,mk_p:[12,28],mk_q:[12,28],mkdir:14,mode:[6,12,16,24,27],model:24,modif:22,modifi:[18,22,23,26,28],modul:[0,4,5,6,8,10,13,16,18,20,22,25,26],monei:0,monitor:[0,13,14,16,19,28,29],month:0,more:[4,5,6,10,13,15,22,23,24,27,28,29],most:[0,6,13,22,24,29],motion:[0,3,16,19,24],motor:13,move:[0,24,28,29],mp3:24,mp3file:24,mpl:26,mseed:[20,27],msg:[15,17],msg_alarm:15,msg_imgpath:15,msg_reset:15,msg_term:15,much:[0,24,28,29],multi:10,multipl:[0,5,24,28],must:[0,6,10,15,18,20,22,24,27,28,29],mymod:28,mymodul:28,n_internet:26,n_inventori:[9,26],n_port:26,nail:10,name:[6,11,15,17,18,21,22,23,24,26,27,28],nano:14,nation:24,nativ:24,natur:0,navig:29,nearbi:24,nearli:0,necessari:[14,15,22],necessarili:24,need:[0,13,14,15,16,18,22,23,24,26,27,28,29],neg:[0,24],nesbitt:16,network:[5,14,22,24,25,26],never:24,newbot:24,newlin:[4,24],next:[14,18,23,24,25,28],nodata:22,node:[24,29],noder:24,nois:24,non:[0,24],none:[4,12,15,17],nonetyp:15,normal:[9,27,28],notabl:24,note:[0,27,29],notif:[0,8,10,16],notifi:[1,16,29],now:[14,18,22,24,28],nth:6,num:5,number:[6,8,15,21,22,24,28],numpi:18,object:[1,2,3,5,6,15,18,19,22,28],obspi:[1,3,6,11,15,18,19,20,22,24,27,28],occasion:[0,24],occur:[24,28],odir:17,off:[12,13,22,26,28],off_ev:13,offic:30,offici:[0,24],often:[24,29],old:[18,22],on_ev:13,onc:[6,10,24,27,28],one:[0,4,5,13,15,22,23,24,27,28,29],ones:13,onli:[0,8,9,10,12,15,22,23,24,28],onlin:29,open:[0,13,18,22,23,24,25,28],opensock:22,oper:[9,11,17,18,23,27],operand:17,option:[5,7,10,16,22,24,28],order:[0,5,6,14,15,16,18,22,24,28],ordinari:27,ordinarili:27,org:[13,28,29],organ:[16,28],orig:22,origin:15,oserror:22,other:[0,1,3,5,6,8,11,13,14,16,18,19,23,24,28],otherwis:[7,11,21,26],our:[13,16,18,23,28,29,30],out:[6,16,17,22,24,27,28,29],outcom:0,outf:20,outlin:28,output:[0,12,13,14,15,17,20,24,26,29],output_dir:[11,15,24],outsid:29,over:[1,11,18,22,27,29],overload:29,overrid:18,overview:[16,24],overwrit:23,overwritten:18,own:[0,13,16,22,24,26],p_data_dir:26,p_log_dir:26,p_log_fil:26,p_log_std:26,p_output_dir:26,p_produc:[1,3,15,16,22,24,28],p_screenshot_dir:26,packag:[20,24],packet:[5,6,7,9,11,15,16,22,24,25,26,27,29],packetloss:[16,29],pad:15,page:[1,2,3,4,5,6,7,8,9,10,11,12,13,16,19,20,21,22,24,25,26,27,29],panama:30,panamaigc:8,param:28,paramet:[1,2,3,4,5,6,7,8,9,10,11,12,15,16,17,19,20,21,22,24,25,26,28],parent:28,pars:[16,22,28],parser:28,part:[0,8,10,15,24,28],partial:15,partwai:18,pass:[2,3,4,5,6,9,12,13,15,16,19,20,21,22,24,25,26],past:[13,14,29],path:[15,18,23,24,26],patienc:29,paus:18,per:[6,11,15,22,23,24],perform:[0,24],perhap:[0,27],period:[0,21,24,29],perman:14,permiss:[10,26,27,29],person:16,piec:[0,24,27],pin:13,ping:24,pip:18,place:[22,24,28],plai:[13,16,18,26,27,28],plan:28,platform:[0,10,28],playback:24,pleas:[0,4,13,18,24,27,29],plenti:22,plot:[0,3,13,15,16,19,23,26,28],plt:13,plu:29,png:[15,24,28],point:[22,24,28],popul:[3,6,19,24],port:[5,7,15,19,21,22,23,24,25,26,27,28,29],portion:24,posit:[0,9,24,25],post:[8,10,15,24,28,29],potenti:13,power:[0,6,9,22,24],pre:16,precis:[15,22],prefer:[16,23],prepar:25,preparatori:17,press:[23,24,29],pressur:[0,15,16,24],pretti:28,previou:[18,24],print:[7,15,16,17,21,22,26],printdata:[16,26],printfreq:21,printm:[17,22,28],printraw:24,printttl:21,printw:17,prior:[4,22,24,26],privat:29,privileg:18,probabl:[18,28],problem:[13,18,24,27,29],proc:12,proce:[18,24],process:[0,3,6,9,10,12,16,21,23,24,26,27,28],processor:[6,18,24],produc:[1,3,12,13,15,16,20,22,24,27],profession:[0,24],profil:[18,24],program:[0,11,13,14,16,18,21,22,23,24,25,26,27],programmat:28,project:[0,16],prompt:[18,23],properli:6,properti:[0,24],protect:0,protocol:29,provid:[0,13,14,24,29],pull:[18,28],purpos:[11,24,28],put:[6,15,19,24],pydub:[2,26],pyplot:[13,28],python3:20,python:[0,4,15,16,18,20,24,28],qt5:6,quak:24,quarter:6,question:[4,11,13,24,28],queue:[1,2,3,4,5,6,7,8,9,10,11,12,13,15,19,24,25,26,28],quickli:[0,8,10],quiet:[7,26],quit:[2,4,6,7,16,19,25,28],r24fa:[15,26,28],r3bcf:22,r940d:22,rais:[1,6,22],ram:0,raspberri:[0,10,14,15,16,18,20,22,24,25,26,27,29,30],raspberryshak:[13,15,16,28,29],raspbian:[14,18,24],raspishak:[13,14,16],rate:[6,10,15,21,22,25,27],ratio:[1,24],raw:[5,15,24],rcb43:22,reach:25,read:[1,2,3,4,5,7,8,10,11,15,16,18,20,22,24,25,27,28],read_set:15,reader:25,readi:[15,18,23,24],readili:24,real:[0,7,14,16],realli:24,reason:[14,18,23,29],reboot:14,rebuild:23,receiv:[19,22,24,26,27,28],recept:9,record:[0,6,15,17,27],recur:29,recurs:[1,24],recursive_sta_lta:[1,24],red:[14,28],redraw:6,referenti:22,reflect:[15,29],refresh:[6,24],regard:[0,14],regist:24,reject:24,rel:10,relat:6,releas:[18,24],relev:[24,26,28,29],reli:[0,24,28],reliabl:[10,22],reload:14,remain:0,remind:28,remot:[16,27],remov:24,render:24,replac:18,report:[12,15,21,22,28,29],repositori:[0,18,23,24],repres:9,request:[22,28],requir:[0,4,22,24,27,28],reset:[1,5,9,13,15,22,24,26,28],reset_tim:15,resid:29,resiz:6,resolv:[22,24],resolve_extra_text:15,resourc:[13,16],respect:[24,28],respons:[24,29],rest:[27,28],restart:[0,16,24,29],restartsec:14,restructuredtext:28,result:[12,24,26],rewritten:18,richard:16,right:[15,22,28,29],rigor:10,room:0,round:15,router:29,routin:[0,6,11,12,13,27],row:[28,29],rs4d:[15,24],rsam:[16,26],rsstn:22,rsudp:[13,24,28,30],rsudp_set:[18,23,24,29],rtype:28,rule:10,run:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,16,19,20,21,22,25,26,27,28,30],runtim:28,s0cde:22,safer:29,sai:[14,24,29],said:24,same:[22,24,25,27,29],sampl:[6,11,15,22,27],sasmex:[8,24],save:[0,6,15,17,24,28],save_pct:6,savefig:[6,28],scenario:24,scienc:[0,15,22],scipi:18,screen:[15,24],screencap:6,screenshot:[6,13,15,24,26,28],script:[13,14,18,22,23,24,27,29],scroll:29,search:[1,2,3,4,5,6,7,8,9,10,11,12,16,19,20,21,22,24,25,26,29],sec:15,second:[1,2,6,7,11,14,15,18,21,22,24,27,28,29],secret:[10,24],section:[0,5,18,24,28,29],secur:29,sediment:24,see:[0,1,2,4,5,6,7,8,9,10,12,13,14,16,17,19,20,22,23,24,25,27,28,29],seek:25,seem:0,segment:11,seiscomp3:22,seismic:[0,7,16,20,22,27],seismogram:[6,24],seismograph:[0,16],seismolog:0,self:[2,4,6,7,9,11,15,22,25,28],send:[1,6,7,8,10,13,15,17,22,23,24,25,26,27,28,29],send_imag:[8,24],sender:[8,15,17,22,28],sent:[1,2,3,4,5,6,7,8,9,10,11,22,24,25,28,29],separ:[6,24],sequenc:[24,28],serial:15,server:[24,26],servic:[6,8,10,14,24,26,29],set:[0,1,4,5,6,7,10,11,12,13,14,15,16,18,21,22,23,25,26,29,30],set_channel:15,set_param:22,set_sp:[6,11],settings_loc:15,setup:[12,16,22,29],setup_plot:6,seven:9,sever:[18,23,24,29],shake:[0,6,10,14,15,16,20,22,23,24,25,26,27,30],shorten:24,should:[0,1,12,14,18,19,22,24,28,29],show:[0,12,14,27,28],shown:28,shutdown:6,shz:[15,24],side:16,sig:12,sign:24,signal:[1,6,12,21,22,24,28],signal_handl:21,signum:[21,22],similar:[0,13,18,28],similarli:24,simpl:[0,10,11,15,24,25],simpli:[18,24],simultan:[0,24],sinc:[13,21,22,24,28,29],singl:[5,22,24],site:29,size:24,skip:18,sleep:14,slice:11,slicestream:11,slightli:[27,29],slow:29,slower:[6,24],small:[24,27,29],social:[0,10,13,28],socket:[22,25],softwar:[0,13,18,23,24,27,28],solut:22,solv:29,some:[6,13,14,15,18,22,23,24,26,28,29],somehow:14,someon:27,someth:[13,14,16,22,24,28,29],sometim:10,somewher:[24,29],sonar:24,soon:30,sort:28,sound:[0,1,13,16,18,23,26,27,28],soundloc:2,sourc:[0,15,23,24,28,29],space:[17,24],span:10,special:16,specif:[1,6,12,15,18,21,22,27,29],specifi:[5,7,15,17,22,24,25,26,27,28,29],spectrogram:[6,24],speed:[24,25],spent:0,sphinx:28,spin:28,sps:[15,22],sqlalchemi:18,ss_permiss:26,sta:[2,16],stabl:0,stackoverflow:[4,17,22,24],stamp:17,stand:28,standard:[0,4,24,28],start:[5,9,11,12,14,16,21,22,24,25,26,27,28],start_log:17,startup:6,stat:15,state:[0,12,13,22,23,24,26],station:[15,22,24,26],stationview:24,statist:21,statu:[14,19,28],stdout:[24,26],steim2:24,step:[17,18,24,28],still:[24,29],stn:22,stomp:24,stop:[12,19,23],store:[22,29],str:[1,4,5,6,7,8,10,11,15,17,20,22,25,26,28],straightforward:29,strang:15,stream:[1,3,6,9,11,15,16,19,21,22,23,24,28,30],street:0,strftime:[15,17],strict:29,stricter:10,string:[4,6,15,17,22,24,25,28],structur:[14,26],student:27,stuff:[6,28],style:[4,24],sub:[3,12,15,16,22,28],submit:[28,29],subsequ:24,substitut:[0,24],succe:24,success:26,successfulli:24,sudden:[0,16,24],sudo:[14,24],suffer:0,suffic:0,suffici:24,suggest:[13,16],suit:[8,24],summari:27,suppli:[12,24],support:[15,28,29],suppress:7,sure:[4,13,24,27,29],suspici:10,switcher:24,sys:28,system:[0,8,14,18,22,23,24],systemctl:[0,16],systemd:14,t_testdata:[16,27],tab:24,tag:13,tail:14,take:[6,12,18,24],taken:12,talk:29,target:[14,29],task:[0,3,19],task_don:28,team:[15,29],technic:29,telegram:[0,10,13,15,16,26],telegramm:[8,15,24,28],tell:[18,24,27,28,29],term:[1,2,4,6,7,9,15,19,24,25,26,28],termin:[18,23],test:[0,1,2,3,4,5,6,7,8,10,11,12,14,15,16,17,18,19,20,24],test_mod:12,testb:22,testdata:[9,25,27],testdir:26,text:[10,12,14,15,17,20,24,26,27,29],than:[5,6,10,14,18,23,24,27,29],thank:[28,29],thei:[13,17,19,22,23,26,27,28,29],them:[12,17,24,25,28,29],theoret:24,theori:[0,28],therefor:16,thi:[0,1,3,4,5,6,8,9,10,11,14,15,16,17,18,20,21,22,23,24,25,26,27,28,29],thing1:28,thing:[0,3,6,8,13,17,19,24,28,29],think:10,thoroughli:24,those:[3,5,20,22],thread:[5,9,12,16,19,22,24,25,27],threadsaf:[6,15],three:[24,28,29],thresh:1,threshold:[1,24,26],through:[0,6,10,18,23,27,28,29],thu:18,tick:11,time:[0,1,6,7,11,13,14,15,16,17,21,22,23,26,27,29],timeout:22,timestamp:[15,22,25],tkagg:6,tmp:[13,14,24,26,29],token:[8,10,24],too:[24,29],tool:0,top:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29],total:22,trace:[0,15,22],track:16,tradit:28,transduc:[0,15,16,24],transmiss:[15,21,22,25,26],tri:0,trigger:[0,1,3,6,13,16,19,26,27,28],tripl:[13,29],troubl:[18,27],troubleshoot:[16,27],truncat:[8,10,15,24],turn:[12,20,28,29],tutori:[14,16,18,23],tweet:[10,16,26],tweet_imag:[10,24],tweeter:[10,15,24,28],twitter:[0,13,15,16,26],two:[15,24,28],txt:[20,27],type:[6,9,11,12,15,16,17,18,21,22,23,24,26,27],typic:[24,27,29],ubuntu:14,udp:[0,5,7,16,20,22,23,24,25,27,29],unam:18,uncheck:24,unconsolid:24,under:29,understand:[24,28],unfamiliar:28,uniqu:0,unit:[14,15,24,26],univers:28,unix:[4,13,14,16,18,22,24],unless:24,unlimit:22,unmaintain:0,unmodifi:24,unpredict:0,unstabl:29,until:[9,15,22,25,28,29],unzip:18,updat:[6,11,22,24],update_plot:6,update_stream:22,upload:6,upon:[16,28],upper:15,usag:[20,22,27],use:[0,6,10,15,18,22,23,27,28],used:[0,3,6,8,10,13,15,17,19,22,24,27,28],useful:[0,17,27,28],user:[0,4,14,15,16,22,23,24,28,29],usernam:24,uses:[0,1,15,17,28,29],usestim:17,usg:10,using:[4,10,13,14,17,18,20,21,22,24,26,27,29],usual:[0,27,29],utc:[11,24],utcdatetim:[1,6,15,22],utcdatetime1:13,utcdatetime2:13,utcdatetime3:13,utcdatetime4:13,util:[17,20,24],valid:[15,24],valu:[12,18,21,22,24,26,28,29],vari:10,variabl:[11,12,15,18,22,26],variou:[3,6,16,18,19,27],vel:[7,24],veloc:[15,24],verbos:15,veri:[22,24],version:[4,5,7,8,9,10,12,15,18,24,25,26,28],vertic:[6,15,24],via:[0,8,28,29],vibrat:0,video:[16,18,23],virtual:18,visual:16,voltag:24,wai:[0,6,13,16,24,26,27,28,29],wait:[22,24],walkthrough:16,want:[4,13,14,15,24],wantedbi:14,warm:24,warn:[0,4,8,17,24],warnformat:17,warranti:[0,24],wast:26,watch:[27,28],web:24,websit:24,week:0,weird:6,welcom:[13,16],well:[13,14,24,29],were:[24,27],what:[4,14,16,24,27,28,29],whatev:[24,28],when:[0,1,2,6,10,11,13,15,16,18,21,22,24,25,28,30],whenev:24,where:[6,18,20,23,24,28,29],wherea:14,whether:[0,1,5,6,8,10,11,12,14,15,17,18,19,24,26,27],which:[0,8,14,15,17,19,20,21,22,24,27,28,29],white:15,why:[16,29],wifi:29,williamstown:24,win:[18,23],win_overrid:[4,24],win_ovr:4,window:[4,6,7,13,16],wish:[18,24,26,28],within:[14,20],without:[0,6,13,24,27,29],work:[13,14,15,18,22,24,28,29],worker:28,would:[15,18,24,26,27,28,29],write:[16,17,20,26],writer:16,written:[16,24],wrong:29,x86:18,x86_64:18,x_alarm:[9,26],x_data:26,x_imgpath:[9,26],x_masterqueu:26,x_packet:26,x_process:[9,26],x_reset:[9,26],x_send:26,x_term:[9,26],xyz:28,yellow:15,yet:0,yield:[17,24],you:[0,4,10,13,14,15,16,18,22,23,24,26,27,28,29],your:[4,10,13,14,16,21,22,23,24,26,29],your_modul:[26,28],your_shake_bot_id:24,your_test:26,yourself:[18,29],youtub:16,z0000:[22,24,26],zero:[15,22,29]},titles:["<span class=\"section-number\">1. </span>About rsudp","<code class=\"xref py py-data docutils literal notranslate\"><span class=\"pre\">rsudp.c_alert</span></code> (STA/LTA alarm)","<code class=\"xref py py-data docutils literal notranslate\"><span class=\"pre\">rsudp.c_alertsound</span></code> (play sound)","<code class=\"xref py py-data docutils literal notranslate\"><span class=\"pre\">rsudp.c_consumer</span></code> (master consumer)","<code class=\"xref py py-data docutils literal notranslate\"><span class=\"pre\">rsudp.c_custom</span></code> (run code)","<code class=\"xref py py-data docutils literal notranslate\"><span class=\"pre\">rsudp.c_forward</span></code> (forward data)","<code class=\"xref py py-data docutils literal notranslate\"><span class=\"pre\">rsudp.c_plot</span></code> (plot data)","<code class=\"xref py py-data docutils literal notranslate\"><span class=\"pre\">rsudp.c_rsam</span></code> (RSAM analysis)","<code class=\"xref py py-data docutils literal notranslate\"><span class=\"pre\">rsudp.c_telegram</span></code> (Telegram alerts)","<code class=\"xref py py-data docutils literal notranslate\"><span class=\"pre\">rsudp.c_testing</span></code> (test consumer)","<code class=\"xref py py-data docutils literal notranslate\"><span class=\"pre\">rsudp.c_tweet</span></code> (Twitter alerts)","<code class=\"xref py py-data docutils literal notranslate\"><span class=\"pre\">rsudp.c_write</span></code> (write data)","<code class=\"xref py py-data docutils literal notranslate\"><span class=\"pre\">rsudp.client</span></code> (central module)","<span class=\"section-number\">2. </span>Contributing to this project","<span class=\"section-number\">5. </span>rsudp as a <code class=\"docutils literal notranslate\"><span class=\"pre\">systemctl</span></code> daemon","<code class=\"xref py py-data docutils literal notranslate\"><span class=\"pre\">rsudp.helpers</span></code> (helper functions)","<cite>rsudp</cite> 1.0.3","<code class=\"xref py py-data docutils literal notranslate\"><span class=\"pre\">rsudp.__init__</span></code> (initialization functions)","<span class=\"section-number\">2. </span>Installing rsudp","<code class=\"xref py py-data docutils literal notranslate\"><span class=\"pre\">rsudp.p_producer</span></code> (data producer)","<code class=\"xref py py-data docutils literal notranslate\"><span class=\"pre\">rsudp.packetize</span></code> (data formatter)","<code class=\"xref py py-data docutils literal notranslate\"><span class=\"pre\">rsudp.packetloss</span></code> (track packets)","<code class=\"xref py py-data docutils literal notranslate\"><span class=\"pre\">rsudp.raspberryshake</span></code> (main library)","<span class=\"section-number\">4. </span>Running rsudp","<span class=\"section-number\">3. </span>Modules and Settings","<code class=\"xref py py-data docutils literal notranslate\"><span class=\"pre\">rsudp.t_testdata</span></code> (test pre-producer)","<code class=\"xref py py-data docutils literal notranslate\"><span class=\"pre\">rsudp.test</span></code> (test helpers)","<span class=\"section-number\">7. </span>Testing and demoing rsudp","<span class=\"section-number\">1. </span>Program architecture and flow","<span class=\"section-number\">6. </span>Troubleshooting rsudp","YouTube walkthroughs"],titleterms:{"default":24,"function":[15,16,17,27],Adding:28,The:18,Using:[24,27],__init__:17,about:0,add:18,advanc:18,alarm:1,alarmsound:24,alert:[8,10,24],amplitud:24,analysi:7,app:24,architectur:28,bashrc:18,bot:24,broad:0,bug:13,c_alert:1,c_alertsound:2,c_consum:3,c_custom:4,c_forward:5,c_plot:6,c_rsam:7,c_telegram:8,c_test:9,c_tweet:10,c_write:11,can:[0,29],central:12,classroom:24,client:[12,28],code:[4,13,16,24],command:29,conda:29,consol:24,consum:[3,9,28],contribut:13,custom:24,daemon:14,data:[5,6,11,19,20,24,27,29],datacast:24,demo:[27,30],demonstr:[23,24],depend:24,detect:[24,30],document:16,dure:27,earthquak:[24,30],easi:18,exampl:24,exec:24,featur:28,file:28,firewal:29,flow:[27,28,29],formatt:20,forward:[5,24],gener:24,helper:[15,26],home:29,inconsist:29,index:16,initi:17,instal:[18,24],instruct:14,issu:29,layout:28,librari:22,line:18,linux:[18,24],live:[24,30],local:29,lta:[1,24],maco:[18,24],main:22,manual:23,master:3,messag:28,middl:29,minise:24,mode:23,modul:[12,24,27,28],network:29,notif:24,other:29,overview:0,own:[27,28],p_produc:19,packet:[20,21],packetloss:21,pass:28,plai:[2,24],plot:[6,24],pre:25,print:24,printdata:24,produc:[19,25,28],program:28,project:13,pydub:24,quiet:24,quit:23,raspberryshak:22,real:24,receiv:29,recommend:24,remot:29,restart:14,rsam:[7,24],rsudp:[0,1,2,3,4,5,6,7,8,9,10,11,12,14,15,16,17,18,19,20,21,22,23,25,26,27,29],run:[4,18,23,24,29],sampl:28,school:29,seismic:24,set:[24,27,28],setup:14,shake:29,side:29,sound:[2,24],sourc:18,special:0,sta:[1,24],start:23,stop:29,suggest:28,systemctl:14,t_testdata:25,telegram:[8,24],test:[9,23,25,26,27,28],thi:13,thread:28,time:24,track:21,trigger:24,troubleshoot:[14,29],tweet:24,twitter:[10,24],type:28,univers:29,unix:23,updat:18,upon:24,use:24,user:18,vault:24,wai:18,walkthrough:30,what:0,why:0,window:[18,23,24],write:[11,24],writer:24,your:[18,27,28],youtub:30}})
\ No newline at end of file
diff --git a/docs/settings.html b/docs/settings.html
index a645457..df94212 100644
--- a/docs/settings.html
+++ b/docs/settings.html
@@ -64,7 +64,7 @@
             
             
               <div class="version">
-                1.0.2
+                1.0.3
               </div>
             
           
@@ -120,7 +120,8 @@
 </ul>
 </li>
 <li class="toctree-l2"><a class="reference internal" href="#tweets-twitter-notification-module">3.7. <code class="code docutils literal notranslate"><span class="pre">tweets</span></code> (Twitter notification module)</a><ul>
-<li class="toctree-l3"><a class="reference internal" href="#setting-up-twitter-apps">3.7.1. Setting up Twitter Apps</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#examples">3.7.1. Examples</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#setting-up-twitter-apps">3.7.2. Setting up Twitter Apps</a></li>
 </ul>
 </li>
 <li class="toctree-l2"><a class="reference internal" href="#write-miniseed-writer">3.8. <code class="code docutils literal notranslate"><span class="pre">write</span></code> (miniSEED writer)</a></li>
@@ -421,8 +422,8 @@ <h3><span class="section-number">3.3.2. </span>Using <code class="code docutils
 <blockquote>
 <div><div class="deprecated">
 <p><span class="versionmodified deprecated">Deprecated since version 0.4.3: </span>You can change the <code class="code json docutils literal notranslate"><span class="literal string double"><span class="pre">“exec”</span></span></code> field and supply a path to
-executable Python code to run with the <a class="reference external" href="https://docs.python.org/3/library/functions.html#exec" title="(in Python v3.9)"><code class="xref py py-func docutils literal notranslate"><span class="pre">exec()</span></code></a> function.
-<a class="reference external" href="https://docs.python.org/3/library/functions.html#exec" title="(in Python v3.9)"><code class="xref py py-func docutils literal notranslate"><span class="pre">exec()</span></code></a> functionality will move to its own module in version 0.4.3
+executable Python code to run with the <a class="reference external" href="https://docs.python.org/3/library/functions.html#exec" title="(in Python v3.10)"><code class="xref py py-func docutils literal notranslate"><span class="pre">exec()</span></code></a> function.
+<a class="reference external" href="https://docs.python.org/3/library/functions.html#exec" title="(in Python v3.10)"><code class="xref py py-func docutils literal notranslate"><span class="pre">exec()</span></code></a> functionality will move to its own module in version 0.4.3
 (see <a class="reference internal" href="#customcode"><span class="std std-ref">custom (run custom code)</span></a> and the <a class="reference internal" href="c_custom.html#rsudp.c_custom.Custom" title="rsudp.c_custom.Custom"><code class="xref py py-class docutils literal notranslate"><span class="pre">rsudp.c_custom.Custom</span></code></a> class),
 and this part of the alert module will be fully removed in a future release.</p>
 </div>
@@ -504,9 +505,21 @@ <h2><span class="section-number">3.6. </span><code class="code docutils literal
 and will not as readily lock your account if there happen to be many posts in a short time period
 (in comparison to Twitter).</p>
 <p>If <code class="code json docutils literal notranslate"><span class="literal string double"><span class="pre">“enabled”</span></span></code> is <code class="code json docutils literal notranslate"><span class="keyword constant"><span class="pre">true</span></span></code>, and bot <code class="code json docutils literal notranslate"><span class="literal string double"><span class="pre">“token”</span></span></code> key is correctly entered,
-<a class="reference internal" href="c_telegram.html#rsudp.c_telegram.Telegrammer" title="rsudp.c_telegram.Telegrammer"><code class="xref py py-class docutils literal notranslate"><span class="pre">rsudp.c_telegram.Telegrammer</span></code></a> will use the Telegram bot API to create alerts when an <code class="code docutils literal notranslate"><span class="pre">ALARM</span></code> message arrives on the queue.
+<a class="reference internal" href="c_telegram.html#rsudp.c_telegram.Telegrammer" title="rsudp.c_telegram.Telegrammer"><code class="xref py py-class docutils literal notranslate"><span class="pre">rsudp.c_telegram.Telegrammer</span></code></a> will use the Telegram bot API to create alerts when an
+<code class="code docutils literal notranslate"><span class="pre">ALARM</span></code> message arrives on the queue.
 If <code class="code json docutils literal notranslate"><span class="literal string double"><span class="pre">“send_images”</span></span></code> is <code class="code json docutils literal notranslate"><span class="keyword constant"><span class="pre">true</span></span></code>, then the module will also send a saved image of the event,
 if <code class="code json docutils literal notranslate"><span class="literal string double"><span class="pre">“eq_screenshots”</span></span></code> is set to <code class="code json docutils literal notranslate"><span class="keyword constant"><span class="pre">true</span></span></code> in the <code class="code json docutils literal notranslate"><span class="literal string double"><span class="pre">“plot”</span></span></code> module.</p>
+<p>If any text is put in the <code class="code json docutils literal notranslate"><span class="literal string double"><span class="pre">“extra_text”</span></span></code> string, then the software will insert that text
+(no longer than 3900 characters) into the message after the UTC designation and prior to the
+stationview hyperlink.
+This works similarly to the <code class="code json docutils literal notranslate"><span class="literal string double"><span class="pre">“extra_text”</span></span></code> field in the Twitter module below.
+(See <a class="reference internal" href="#examples"><span class="std std-ref">Examples</span></a>.)</p>
+<div class="admonition warning">
+<p class="admonition-title">Warning</p>
+<p>Starting the software with an <code class="code json docutils literal notranslate"><span class="literal string double"><span class="pre">“extra_text”</span></span></code> string in excess of 3900 characters
+will yield a warning and the <code class="code json docutils literal notranslate"><span class="literal string double"><span class="pre">“extra_text”</span></span></code> string will be truncated
+in order to avoid the message being rejected for exceeding the 4096 character limit.</p>
+</div>
 <div class="section" id="setting-up-a-telegram-bot">
 <span id="setting-up-telegram"></span><h3><span class="section-number">3.6.1. </span>Setting up a Telegram Bot<a class="headerlink" href="#setting-up-a-telegram-bot" title="Permalink to this headline">¶</a></h3>
 <p>Here is a brief overview of the steps to set up a Telegram bot in order to make and distribute
@@ -526,12 +539,17 @@ <h2><span class="section-number">3.6. </span><code class="code docutils literal
 </div></blockquote>
 </li>
 <li><p>Enter your bot’s access token in the <code class="code json docutils literal notranslate"><span class="literal string double"><span class="pre">“token”</span></span></code> field of the settings file.</p></li>
-<li><p>Enter a user or group ID into the <code class="code json docutils literal notranslate"><span class="literal string double"><span class="pre">“chat_id”</span></span></code> field (or multiple separated by commas), which you can find by following the instructions in <a href="https://stackoverflow.com/a/32572159" target="_blank">this stackoverflow answer</a>.</p></li>
+<li><dl class="simple">
+<dt>Enter a user or group ID into the <code class="code json docutils literal notranslate"><span class="literal string double"><span class="pre">“chat_id”</span></span></code> field (or multiple separated by commas),</dt><dd><p>which you can find by following the instructions in <a href="https://stackoverflow.com/a/32572159" target="_blank">this stackoverflow answer</a>.</p>
+</dd>
+</dl>
+</li>
 </ol>
-<p>If you wish to broadcast telegrams to a group or a channel, first add the bot to the group using your user account,
-then follow the instructions in the previous link,
+<p>If you wish to broadcast telegrams to a group or a channel, first add the bot to the group using your
+user account, then follow the instructions in the previous link,
 where you will see the group chat ID appear as a field in the last JSON entry.
-This chat ID may be negative, in which case you must enter the negative sign into <code class="code json docutils literal notranslate"><span class="literal string double"><span class="pre">“chat_id”</span></span></code> as well.</p>
+This chat ID may be negative, in which case you must enter the negative sign into <code class="code json docutils literal notranslate"><span class="literal string double"><span class="pre">“chat_id”</span></span></code>
+as well.</p>
 <p><a class="reference external" href="#top">Back to top ↑</a></p>
 </div>
 </div>
@@ -543,14 +561,17 @@ <h2><span class="section-number">3.7. </span><code class="code docutils literal
 If <code class="code json docutils literal notranslate"><span class="literal string double"><span class="pre">“tweet_images”</span></span></code> is <code class="code json docutils literal notranslate"><span class="keyword constant"><span class="pre">true</span></span></code>, then the module will also tweet a saved image of the event,
 if <code class="code json docutils literal notranslate"><span class="literal string double"><span class="pre">“eq_screenshots”</span></span></code> is set to <code class="code json docutils literal notranslate"><span class="keyword constant"><span class="pre">true</span></span></code> in the “plot” module. If any text is put in the
 <code class="code json docutils literal notranslate"><span class="literal string double"><span class="pre">“extra_text”</span></span></code> string, then the software will insert that text (no longer than 103 characters)
-into the tweets after a single space. For example, an unmodified tweet with <code class="code docutils literal notranslate"><span class="pre">&quot;extra_text&quot;:</span> <span class="pre">&quot;&quot;</span></code>
-might look like this:</p>
+into the tweets after a single space. See examples below.</p>
+<div class="section" id="examples">
+<span id="eq-tweet-examples"></span><h3><span class="section-number">3.7.1. </span>Examples<a class="headerlink" href="#examples" title="Permalink to this headline">¶</a></h3>
+<p>As a comparison point, an unmodified tweet with <code class="code docutils literal notranslate"><span class="pre">&quot;extra_text&quot;:</span> <span class="pre">&quot;&quot;</span></code> might look like
+the following:</p>
 <div class="figure align-center" id="id10">
 <span id="eq-tweet"></span><img alt="_images/eq_tweet.png" src="_images/eq_tweet.png" />
 <p class="caption"><span class="caption-text">An example tweet sent with the “extra_text” parameter empty (this is the default).</span><a class="headerlink" href="#id10" title="Permalink to this image">¶</a></p>
 </div>
 <p>Changing the <code class="code json docutils literal notranslate"><span class="literal string double"><span class="pre">“extra_text”</span></span></code> parameter to <code class="code docutils literal notranslate"><span class="pre">&quot;extra_text&quot;:</span> <span class="pre">&quot;from</span> <span class="pre">#Williamstown</span> <span class="pre">#MA&quot;</span></code>
-would render something like the following:</p>
+would render something like this:</p>
 <div class="figure align-center" id="id11">
 <span id="eq-tweet-extra"></span><img alt="_images/eq_tweet_extra.png" src="_images/eq_tweet_extra.png" />
 <p class="caption"><span class="caption-text">An example tweet sent with the “extra_text” parameter filled.</span><a class="headerlink" href="#id11" title="Permalink to this image">¶</a></p>
@@ -561,8 +582,9 @@ <h2><span class="section-number">3.7. </span><code class="code docutils literal
 will yield a warning and the <code class="code json docutils literal notranslate"><span class="literal string double"><span class="pre">“extra_text”</span></span></code> string will be truncated
 in order to avoid the tweet being rejected for exceeding the 280 character limit.</p>
 </div>
+</div>
 <div class="section" id="setting-up-twitter-apps">
-<span id="setting-up-twitter"></span><h3><span class="section-number">3.7.1. </span>Setting up Twitter Apps<a class="headerlink" href="#setting-up-twitter-apps" title="Permalink to this headline">¶</a></h3>
+<span id="setting-up-twitter"></span><h3><span class="section-number">3.7.2. </span>Setting up Twitter Apps<a class="headerlink" href="#setting-up-twitter-apps" title="Permalink to this headline">¶</a></h3>
 <p>Here is a brief overview of the steps to set up a Twitter app (also known as an API bot)
 in order to make and distribute tweets from rsudp.</p>
 <ol class="arabic simple">
@@ -629,9 +651,9 @@ <h2><span class="section-number">3.8. </span><code class="code docutils literal
 </div>
 <p><code class="code json docutils literal notranslate"><span class="literal string double"><span class="pre">“custom”</span></span></code> controls the execution of a custom python code file specified by the <code class="code json docutils literal notranslate"><span class="literal string double"><span class="pre">“codefile”</span></span></code> field.
 If <code class="code json docutils literal notranslate"><span class="literal string double"><span class="pre">“enabled”</span></span></code> is <code class="code json docutils literal notranslate"><span class="keyword constant"><span class="pre">true</span></span></code> and a python file is found at the path specified,
-this thread will run the specified file using python’s <a class="reference external" href="https://docs.python.org/3/library/functions.html#exec" title="(in Python v3.9)"><code class="xref py py-func docutils literal notranslate"><span class="pre">exec()</span></code></a> function.</p>
-<p>Be very careful when using this module, as the <a class="reference external" href="https://docs.python.org/3/library/functions.html#exec" title="(in Python v3.9)"><code class="xref py py-func docutils literal notranslate"><span class="pre">exec()</span></code></a> function is known to have problems.
-Notably, <a class="reference external" href="https://docs.python.org/3/library/functions.html#exec" title="(in Python v3.9)"><code class="xref py py-func docutils literal notranslate"><span class="pre">exec()</span></code></a> does not check the passed file for errors prior to running.
+this thread will run the specified file using python’s <a class="reference external" href="https://docs.python.org/3/library/functions.html#exec" title="(in Python v3.10)"><code class="xref py py-func docutils literal notranslate"><span class="pre">exec()</span></code></a> function.</p>
+<p>Be very careful when using this module, as the <a class="reference external" href="https://docs.python.org/3/library/functions.html#exec" title="(in Python v3.10)"><code class="xref py py-func docutils literal notranslate"><span class="pre">exec()</span></code></a> function is known to have problems.
+Notably, <a class="reference external" href="https://docs.python.org/3/library/functions.html#exec" title="(in Python v3.10)"><code class="xref py py-func docutils literal notranslate"><span class="pre">exec()</span></code></a> does not check the passed file for errors prior to running.
 Also, the passed file cannot have Windows line endings (see warning below).
 Additionally, if the code takes too long to execute,
 you could end up losing data packets from the queue, so keep it simple.
@@ -649,7 +671,7 @@ <h2><span class="section-number">3.8. </span><code class="code docutils literal
 That way, the code will be checked for errors prior to running.</p>
 <div class="admonition warning">
 <p class="admonition-title">Warning</p>
-<p>If you are running Windows and have code you want to pass to the <a class="reference external" href="https://docs.python.org/3/library/functions.html#exec" title="(in Python v3.9)"><code class="xref py py-func docutils literal notranslate"><span class="pre">exec()</span></code></a> function,
+<p>If you are running Windows and have code you want to pass to the <a class="reference external" href="https://docs.python.org/3/library/functions.html#exec" title="(in Python v3.10)"><code class="xref py py-func docutils literal notranslate"><span class="pre">exec()</span></code></a> function,
 Python requires that your newline characters are in the UNIX style (<code class="code docutils literal notranslate"><span class="pre">\n</span></code>), not the standard Windows style (<code class="code docutils literal notranslate"><span class="pre">\r\n</span></code>).
 To convert, follow the instructions in one of the answers to <a href="https://stackoverflow.com/questions/17579553/windows-command-to-convert-unix-line-endings" target="_blank">this stackoverflow question</a>.
 If you’re not sure what this means, please read about newline/line ending characters <a href="https://en.wikipedia.org/wiki/Newline" target="_blank">here</a>.
@@ -727,12 +749,13 @@ <h2><span class="section-number">3.11. </span><code class="code docutils literal
     <span class="nt">&quot;enabled&quot;</span><span class="p">:</span> <span class="kc">false</span><span class="p">,</span>
     <span class="nt">&quot;send_images&quot;</span><span class="p">:</span> <span class="kc">true</span><span class="p">,</span>
     <span class="nt">&quot;token&quot;</span><span class="p">:</span> <span class="s2">&quot;n/a&quot;</span><span class="p">,</span>
-    <span class="nt">&quot;chat_id&quot;</span><span class="p">:</span> <span class="s2">&quot;n/a&quot;</span><span class="p">},</span>
+    <span class="nt">&quot;chat_id&quot;</span><span class="p">:</span> <span class="s2">&quot;n/a&quot;</span><span class="p">,</span>
+    <span class="nt">&quot;extra_text&quot;</span><span class="p">:</span> <span class="s2">&quot;&quot;</span><span class="p">},</span>
 <span class="nt">&quot;rsam&quot;</span><span class="p">:</span> <span class="p">{</span>
     <span class="nt">&quot;enabled&quot;</span><span class="p">:</span> <span class="kc">false</span><span class="p">,</span>
     <span class="nt">&quot;quiet&quot;</span><span class="p">:</span> <span class="kc">true</span><span class="p">,</span>
-    <span class="nt">&quot;fwaddr&quot;</span><span class="p">:</span> <span class="kc">false</span><span class="p">,</span>
-    <span class="nt">&quot;fwport&quot;</span><span class="p">:</span> <span class="kc">false</span><span class="p">,</span>
+    <span class="nt">&quot;fwaddr&quot;</span><span class="p">:</span> <span class="s2">&quot;192.168.1.254&quot;</span><span class="p">,</span>
+    <span class="nt">&quot;fwport&quot;</span><span class="p">:</span> <span class="mi">8887</span><span class="p">,</span>
     <span class="nt">&quot;fwformat&quot;</span><span class="p">:</span> <span class="s2">&quot;LITE&quot;</span><span class="p">,</span>
     <span class="nt">&quot;channel&quot;</span><span class="p">:</span> <span class="s2">&quot;HZ&quot;</span><span class="p">,</span>
     <span class="nt">&quot;interval&quot;</span><span class="p">:</span> <span class="mi">10</span><span class="p">,</span>
diff --git a/docs/theory.html b/docs/theory.html
index 565dc63..f2be0d0 100644
--- a/docs/theory.html
+++ b/docs/theory.html
@@ -64,7 +64,7 @@
             
             
               <div class="version">
-                1.0.2
+                1.0.3
               </div>
             
           
@@ -229,7 +229,7 @@
 <p>The program’s organization relies on two hierarchies: thread hierarchy and
 data hierarchy. This allows the program to distribute data and messages
 between different modules efficiently while maintaining programmatic
-integrity required by rsudp’s dependencies (<a class="reference external" href="https://matplotlib.org/api/_as_gen/matplotlib.pyplot.html#module-matplotlib.pyplot" title="(in Matplotlib v3.3.3)"><code class="xref py py-mod docutils literal notranslate"><span class="pre">matplotlib.pyplot</span></code></a>
+integrity required by rsudp’s dependencies (<a class="reference external" href="https://matplotlib.org/api/_as_gen/matplotlib.pyplot.html#module-matplotlib.pyplot" title="(in Matplotlib v3.4.3)"><code class="xref py py-mod docutils literal notranslate"><span class="pre">matplotlib.pyplot</span></code></a>
 objects, for example, can only be owned by the master thread).</p>
 <div class="figure align-center" id="id2">
 <span id="flow-diagram"></span><img alt="_images/rsudp-flow.png" src="_images/rsudp-flow.png" />
@@ -244,12 +244,12 @@
 </div>
 <div class="section" id="thread-layout">
 <h2><span class="section-number">1.1. </span>Thread layout<a class="headerlink" href="#thread-layout" title="Permalink to this headline">¶</a></h2>
-<p>The program relies on the <a class="reference external" href="https://docs.python.org/3/library/threading.html#module-threading" title="(in Python v3.9)"><code class="xref py py-mod docutils literal notranslate"><span class="pre">threading</span></code></a> and <a class="reference external" href="https://docs.python.org/3/library/queue.html#module-queue" title="(in Python v3.9)"><code class="xref py py-mod docutils literal notranslate"><span class="pre">queue</span></code></a> modules
+<p>The program relies on the <a class="reference external" href="https://docs.python.org/3/library/threading.html#module-threading" title="(in Python v3.10)"><code class="xref py py-mod docutils literal notranslate"><span class="pre">threading</span></code></a> and <a class="reference external" href="https://docs.python.org/3/library/queue.html#module-queue" title="(in Python v3.10)"><code class="xref py py-mod docutils literal notranslate"><span class="pre">queue</span></code></a> modules
 to spin up multiple threads which all receive and work with data
 independently of one another.</p>
 <p>First, the <a class="reference internal" href="client.html#module-rsudp.client" title="rsudp.client"><code class="xref py py-mod docutils literal notranslate"><span class="pre">rsudp.client</span></code></a> (the “main” or “parent” thread) gathers
 and parses settings. The client then instantiates the relevant
-<a class="reference external" href="https://docs.python.org/3/library/threading.html#threading.Thread" title="(in Python v3.9)"><code class="xref py py-class docutils literal notranslate"><span class="pre">threading.Thread</span></code></a> objects and passes settings and queues to
+<a class="reference external" href="https://docs.python.org/3/library/threading.html#threading.Thread" title="(in Python v3.10)"><code class="xref py py-class docutils literal notranslate"><span class="pre">threading.Thread</span></code></a> objects and passes settings and queues to
 them. Next, it starts each of these consumer threads as “child” threads,
 then finally the producer, also as a child thread.</p>
 <p>If the <a class="reference internal" href="c_plot.html#rsudp.c_plot.Plot" title="rsudp.c_plot.Plot"><code class="xref py py-class docutils literal notranslate"><span class="pre">rsudp.c_plot.Plot</span></code></a> thread is enabled, the program will
@@ -360,7 +360,7 @@ <h3><span class="section-number">1.3.1. </span>Sample consumer<a class="headerli
 until it receives a <code class="docutils literal notranslate"><span class="pre">TERM</span></code> queue message.</p>
 <p>This consumer is created from a
 <a class="reference internal" href="raspberryshake.html#rsudp.raspberryshake.ConsumerThread" title="rsudp.raspberryshake.ConsumerThread"><code class="xref py py-class docutils literal notranslate"><span class="pre">rsudp.raspberryshake.ConsumerThread</span></code></a> object,
-which in turn modifies the <a class="reference external" href="https://docs.python.org/3/library/threading.html#threading.Thread" title="(in Python v3.9)"><code class="xref py py-class docutils literal notranslate"><span class="pre">threading.Thread</span></code></a> class.</p>
+which in turn modifies the <a class="reference external" href="https://docs.python.org/3/library/threading.html#threading.Thread" title="(in Python v3.10)"><code class="xref py py-class docutils literal notranslate"><span class="pre">threading.Thread</span></code></a> class.</p>
 <div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">sys</span>
 <span class="kn">from</span> <span class="nn">rsudp.raspberryshake</span> <span class="kn">import</span> <span class="n">ConsumerThread</span>
 <span class="kn">from</span> <span class="nn">rsudp</span> <span class="kn">import</span> <span class="n">printM</span>
diff --git a/docs/troubleshooting.html b/docs/troubleshooting.html
index 4f17280..b899206 100644
--- a/docs/troubleshooting.html
+++ b/docs/troubleshooting.html
@@ -64,7 +64,7 @@
             
             
               <div class="version">
-                1.0.2
+                1.0.3
               </div>
             
           
diff --git a/docs/youtube.html b/docs/youtube.html
index 51f657e..ed61d3d 100644
--- a/docs/youtube.html
+++ b/docs/youtube.html
@@ -64,7 +64,7 @@
             
             
               <div class="version">
-                1.0.2
+                1.0.3
               </div>
             
           
diff --git a/docsrc/_static/4d-event.png b/docsrc/_static/4d-event.png
index 86b18ec..7e72d47 100644
Binary files a/docsrc/_static/4d-event.png and b/docsrc/_static/4d-event.png differ
diff --git a/docsrc/_static/event.png b/docsrc/_static/event.png
index 7249cfb..48fc436 100644
Binary files a/docsrc/_static/event.png and b/docsrc/_static/event.png differ
diff --git a/docsrc/_static/logo.png b/docsrc/_static/logo.png
index 0548967..9ed42e2 100644
Binary files a/docsrc/_static/logo.png and b/docsrc/_static/logo.png differ
diff --git a/docsrc/settings.rst b/docsrc/settings.rst
index 238105b..7d3d880 100644
--- a/docsrc/settings.rst
+++ b/docsrc/settings.rst
@@ -361,10 +361,23 @@ and will not as readily lock your account if there happen to be many posts in a
 (in comparison to Twitter).
 
 If :json:`"enabled"` is :json:`true`, and bot :json:`"token"` key is correctly entered,
-:class:`rsudp.c_telegram.Telegrammer` will use the Telegram bot API to create alerts when an :code:`ALARM` message arrives on the queue.
+:class:`rsudp.c_telegram.Telegrammer` will use the Telegram bot API to create alerts when an
+:code:`ALARM` message arrives on the queue.
 If :json:`"send_images"` is :json:`true`, then the module will also send a saved image of the event,
 if :json:`"eq_screenshots"` is set to :json:`true` in the :json:`"plot"` module.
 
+If any text is put in the :json:`"extra_text"` string, then the software will insert that text
+(no longer than 3900 characters) into the message after the UTC designation and prior to the
+stationview hyperlink.
+This works similarly to the :json:`"extra_text"` field in the Twitter module below.
+(See :ref:`examples`.)
+
+.. warning::
+
+    Starting the software with an :json:`"extra_text"` string in excess of 3900 characters
+    will yield a warning and the :json:`"extra_text"` string will be truncated
+    in order to avoid the message being rejected for exceeding the 4096 character limit.
+
 .. _setting-up-telegram:
 
 Setting up a Telegram Bot
@@ -393,12 +406,15 @@ Telegram alerts from rsudp.
     #. :code:`@BotFather` will then give you an access token for your new bot.
 
 #. Enter your bot's access token in the :json:`"token"` field of the settings file.
-#. Enter a user or group ID into the :json:`"chat_id"` field (or multiple separated by commas), which you can find by following the instructions in |so_answer|.
+#. Enter a user or group ID into the :json:`"chat_id"` field (or multiple separated by commas),
+    which you can find by following the instructions in |so_answer|.
 
-If you wish to broadcast telegrams to a group or a channel, first add the bot to the group using your user account,
-then follow the instructions in the previous link,
+If you wish to broadcast telegrams to a group or a channel, first add the bot to the group using your
+user account, then follow the instructions in the previous link,
 where you will see the group chat ID appear as a field in the last JSON entry.
-This chat ID may be negative, in which case you must enter the negative sign into :json:`"chat_id"` as well.
+This chat ID may be negative, in which case you must enter the negative sign into :json:`"chat_id"`
+as well.
+
 
 `Back to top ↑ <#top>`_
 
@@ -412,8 +428,15 @@ create tweets when an ALARM message arrives on the queue.
 If :json:`"tweet_images"` is :json:`true`, then the module will also tweet a saved image of the event,
 if :json:`"eq_screenshots"` is set to :json:`true` in the "plot" module. If any text is put in the
 :json:`"extra_text"` string, then the software will insert that text (no longer than 103 characters)
-into the tweets after a single space. For example, an unmodified tweet with :code:`"extra_text": ""`
-might look like this:
+into the tweets after a single space. See examples below.
+
+.. _eq-tweet-examples:
+
+Examples
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+As a comparison point, an unmodified tweet with :code:`"extra_text": ""` might look like
+the following:
 
 .. _eq-tweet:
 .. figure::  _static/eq_tweet.png
@@ -423,7 +446,7 @@ might look like this:
 
 
 Changing the :json:`"extra_text"` parameter to :code:`"extra_text": "from #Williamstown #MA"`
-would render something like the following:
+would render something like this:
 
 .. _eq-tweet-extra:
 .. figure::  _static/eq_tweet_extra.png
@@ -656,12 +679,13 @@ By default, the settings are as follows:
         "enabled": false,
         "send_images": true,
         "token": "n/a",
-        "chat_id": "n/a"},
+        "chat_id": "n/a",
+        "extra_text": ""},
     "rsam": {
         "enabled": false,
         "quiet": true,
-        "fwaddr": false,
-        "fwport": false,
+        "fwaddr": "192.168.1.254",
+        "fwport": 8887,
         "fwformat": "LITE",
         "channel": "HZ",
         "interval": 10,
diff --git a/rsudp/c_telegram.py b/rsudp/c_telegram.py
index 348889c..913c027 100644
--- a/rsudp/c_telegram.py
+++ b/rsudp/c_telegram.py
@@ -25,6 +25,8 @@ class Telegrammer(rs.ConsumerThread):
 	:param str token: bot token from Telegram bot creation
 	:param str chat_id: Telegram chat ID number that this module will post to
 	:param bool send_images: whether or not to send images. if False, only alerts will be sent.
+	:type extra_text: bool or str
+	:param extra_text: Approximately 3900 additional characters to post as part of the Telegram message (Telegram message limits are 4096 characters). Longer messages will be truncated.
 	:param queue.Queue q: queue of data and messages sent by :class:`rsudp.c_consumer.Consumer`
 
 	'''
@@ -46,7 +48,7 @@ def __init__(self, token, chat_id, testing=False,
 		self.fmt = '%Y-%m-%d %H:%M:%S.%f'
 		self.region = ' - region: %s' % rs.region.title() if rs.region else ''
 
-		self.extra_text = helpers._resolve_extra_text(extra_text, max_len=4096, sender=self.sender)
+		self.extra_text = helpers.resolve_extra_text(extra_text, max_len=4096, sender=self.sender)
 
 		self.auth()
 
diff --git a/rsudp/c_tweet.py b/rsudp/c_tweet.py
index 6ce9d37..def6bb3 100644
--- a/rsudp/c_tweet.py
+++ b/rsudp/c_tweet.py
@@ -57,7 +57,7 @@ class Tweeter(rs.ConsumerThread):
 	:param str access_secret: Twitter calls this the "consumer access secret"
 	:param bool tweet_images: whether or not to send images. if False, only alerts will be sent.
 	:type extra_text: bool or str
-	:param extra_text: 103 additional characters to post as part of the twitter message.
+	:param extra_text: 103 additional characters to post as part of the twitter message (longer messages will be truncated).
 	:param queue.Queue q: queue of data and messages sent by :class:`rsudp.c_consumer.Consumer`
 
 
@@ -82,7 +82,7 @@ def __init__(self, consumer_key, consumer_secret, access_token, access_token_sec
 		self.access_token_secret = access_token_secret
 		self.last_message = False
 
-		self.extra_text = helpers._resolve_extra_text(extra_text, max_len=280, sender=self.sender)
+		self.extra_text = helpers.resolve_extra_text(extra_text, max_len=280, sender=self.sender)
 
 		self.auth()
 
diff --git a/rsudp/client.py b/rsudp/client.py
index 76bc632..b30f419 100644
--- a/rsudp/client.py
+++ b/rsudp/client.py
@@ -577,7 +577,7 @@ def test():
 
 		# client test
 		ctest = 'client test'
-		if T.TEST['c_miniseed']:
+		if (T.TEST['c_miniseed'] and WRITER):
 			printM('Merging and testing MiniSEED file(s)...', sender=ctest)
 			try:
 				ms = rs.Stream()
diff --git a/rsudp/helpers.py b/rsudp/helpers.py
index 84604ff..8e80cd9 100644
--- a/rsudp/helpers.py
+++ b/rsudp/helpers.py
@@ -513,9 +513,25 @@ def deconvolve(self):
 			trace.stats.units = ' counts'		# this is not being deconvolved
 
 
-def _resolve_extra_text(extra_text, max_len, sender='helpers'):
+def resolve_extra_text(extra_text, max_len, sender='helpers'):
 	'''
-	
+	.. role:: pycode(code)
+		:language: python
+
+	.. versionadded:: 1.0.3
+
+	A central helper function for the :class:`rsudp.c_telegram.Tweeter`
+	and :class:`rsudp.c_telegram.Telegrammer` classes that checks whether
+	the :pycode:`"extra_text"` parameter (in the settings file) is of appropriate
+	length. This is done to avoid errors when posting alerts.
+	The function will truncate longer messages.
+
+	:param str extra_text: String of additional characters to post as part of the alert message (longer messages will be truncated).
+	:param str max_len: Upper limit of characters accepted in message (280 for Twitter, 4096 for Telegram).
+	:param str sender: String identifying the origin of the use of this function (:pycode:`self.sender` in the source function).
+	:rtype: str
+	:return: the message string to be incorporated
+
 	'''
 	allowable_len = max_len - 177	# length of string allowable given maximum message text & region
 	if ((extra_text == '') or (extra_text == None) or (extra_text == False)):


Test patch:
diff --git a/docs/c_testing.html b/docs/c_testing.html
index fb18019..8615181 100644
--- a/docs/c_testing.html
+++ b/docs/c_testing.html
@@ -64,7 +64,7 @@
             
             
               <div class="version">
-                1.0.2
+                1.0.3
               </div>
             
           
diff --git a/docs/t_testdata.html b/docs/t_testdata.html
index 9f25fe1..9fbe7d1 100644
--- a/docs/t_testdata.html
+++ b/docs/t_testdata.html
@@ -64,7 +64,7 @@
             
             
               <div class="version">
-                1.0.2
+                1.0.3
               </div>
             
           
diff --git a/docs/test.html b/docs/test.html
index 658070f..4afb647 100644
--- a/docs/test.html
+++ b/docs/test.html
@@ -64,7 +64,7 @@
             
             
               <div class="version">
-                1.0.2
+                1.0.3
               </div>
             
           
@@ -417,6 +417,9 @@ <h1><a class="reference internal" href="#module-rsudp.test" title="rsudp.test"><
 <tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">settings['rsam']['debug']</span></code></p></td>
 <td><p><code class="docutils literal notranslate"><span class="pre">True</span></code></p></td>
 </tr>
+<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">settings['rsam']['interval']</span></code></p></td>
+<td><p><code class="docutils literal notranslate"><span class="pre">10</span></code></p></td>
+</tr>
 </tbody>
 </table>
 <div class="admonition note">
diff --git a/docs/testing.html b/docs/testing.html
index 10439c5..24007a6 100644
--- a/docs/testing.html
+++ b/docs/testing.html
@@ -64,7 +64,7 @@
             
             
               <div class="version">
-                1.0.2
+                1.0.3
               </div>