Rsudp not saving screenshots

Hello,

I’ve got rsudp installed on a Pi 4. Everything looks to be working correctly, I’m getting a waveform and spectrogram and when I set it to write I get files save in the output_dir. However, when an alert it triggered, I’m not getting a screenshot saved.

My rsudp_settings.json:

{
  "settings": {
    "port": 8888,
    "station": "S8B94",
    "output_dir": "/home/pi/rsudp_data/",
    "debug": true
  },
  "printdata": {
    "enabled": false
  },
  "write": {
    "enabled": false,
    "channels": [
      "all"
    ]
  },
  "plot": {
    "enabled": true,
    "duration": 90,
    "refresh_interval": 0,
    "spectrogram": true,
    "fullscreen": true,
    "kiosk": true,
    "eq_screenshots": true,
    "channels": [
      "all"
    ],
    "filter_waveform": false,
    "filter_spectrogram": false,
    "filter_highpass": 0.7,
    "filter_lowpass": 2.0,
    "filter_corners": 4,
    "spectrogram_freq_range": false,
    "upper_limit": 15.0,
    "lower_limit": 0.0,
    "logarithmic_y_axis": false,
    "deconvolve": true,
    "units": "CHAN"
  },
  "forward": {
    "enabled": false,
    "address": [
      "192.168.1.254"
    ],
    "port": [
      8888
    ],
    "channels": [
      "all"
    ],
    "fwd_data": true,
    "fwd_alarms": false
  },
  "alert": {
    "enabled": true,
    "channel": "HZ",
    "sta": 6,
    "lta": 30,
    "duration": 0.0,
    "threshold": 1,
    "reset": 0.2,
    "highpass": 0.8,
    "lowpass": 9,
    "deconvolve": false,
    "units": "VEL",
    "on_plot": false,
    "on_plot_end_line_color": "#D72638",
    "on_plot_start_line_color": "#4C8BF5"
  },
  "alertsound": {
    "enabled": true,
    "mp3file": "doorbell"
  },
  "custom": {
    "enabled": false,
    "codefile": "n/a",
    "win_override": false
  },
  "tweets": {
    "enabled": false,
    "tweet_images": true,
    "api_key": "n/a",
   "api_secret": "n/a",
    "access_token": "n/a",
    "access_secret": "n/a",
    "extra_text": ""
  },
  "telegram": {
    "enabled": false,
    "send_images": true,
    "token": "",
    "chat_id": "",
    "extra_text": ""
  },
  "rsam": {
    "enabled": false,
    "quiet": true,
    "fwaddr": "192.168.1.254",
    "fwport": 8887,
    "fwformat": "LITE",
    "channel": "HZ",
    "interval": 10,
    "deconvolve": false,
    "units": "VEL"
  }
}

Output from at startup:

Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
Processing /home/pi/rsudp
  Preparing metadata (setup.py): started
  Preparing metadata (setup.py): finished with status 'done'
Requirement already satisfied: obspy in /home/pi/miniforge3/envs/rsudp/lib/python3.12/site-packages (from rsudp==2.1.0) (1.4.1)
Requirement already satisfied: numpy<3,>=2.0.0 in /home/pi/miniforge3/envs/rsudp/lib/python3.12/site-packages (from rsudp==2.1.0) (2.0.1)
Requirement already satisfied: matplotlib<4,>3.2 in /home/pi/miniforge3/envs/rsudp/lib/python3.12/site-packages (from rsudp==2.1.0) (3.10.1)
Requirement already satisfied: pydub in /home/pi/miniforge3/envs/rsudp/lib/python3.12/site-packages (from rsudp==2.1.0) (0.25.1)
Requirement already satisfied: twython in /home/pi/miniforge3/envs/rsudp/lib/python3.12/site-packages (from rsudp==2.1.0) (3.9.1)
Requirement already satisfied: python-telegram-bot in /home/pi/miniforge3/envs/rsudp/lib/python3.12/site-packages (from rsudp==2.1.0) (22.0)
Requirement already satisfied: contourpy>=1.0.1 in /home/pi/miniforge3/envs/rsudp/lib/python3.12/site-packages (from matplotlib<4,>3.2->rsudp==2.1.0) (1.3.2)
Requirement already satisfied: cycler>=0.10 in /home/pi/miniforge3/envs/rsudp/lib/python3.12/site-packages (from matplotlib<4,>3.2->rsudp==2.1.0) (0.12.1)
Requirement already satisfied: fonttools>=4.22.0 in /home/pi/miniforge3/envs/rsudp/lib/python3.12/site-packages (from matplotlib<4,>3.2->rsudp==2.1.0) (4.57.0)
Requirement already satisfied: kiwisolver>=1.3.1 in /home/pi/miniforge3/envs/rsudp/lib/python3.12/site-packages (from matplotlib<4,>3.2->rsudp==2.1.0) (1.4.8)
Requirement already satisfied: packaging>=20.0 in /home/pi/miniforge3/envs/rsudp/lib/python3.12/site-packages (from matplotlib<4,>3.2->rsudp==2.1.0) (25.0)
Requirement already satisfied: pillow>=8 in /home/pi/miniforge3/envs/rsudp/lib/python3.12/site-packages (from matplotlib<4,>3.2->rsudp==2.1.0) (11.2.1)
Requirement already satisfied: pyparsing>=2.3.1 in /home/pi/miniforge3/envs/rsudp/lib/python3.12/site-packages (from matplotlib<4,>3.2->rsudp==2.1.0) (3.2.3)
Requirement already satisfied: python-dateutil>=2.7 in /home/pi/miniforge3/envs/rsudp/lib/python3.12/site-packages (from matplotlib<4,>3.2->rsudp==2.1.0) (2.9.0.post0)
Requirement already satisfied: scipy>=1.7 in /home/pi/miniforge3/envs/rsudp/lib/python3.12/site-packages (from obspy->rsudp==2.1.0) (1.15.2)
Requirement already satisfied: lxml in /home/pi/miniforge3/envs/rsudp/lib/python3.12/site-packages (from obspy->rsudp==2.1.0) (5.3.0)
Requirement already satisfied: setuptools in /home/pi/miniforge3/envs/rsudp/lib/python3.12/site-packages (from obspy->rsudp==2.1.0) (75.8.0)
Requirement already satisfied: sqlalchemy<2 in /home/pi/miniforge3/envs/rsudp/lib/python3.12/site-packages (from obspy->rsudp==2.1.0) (1.4.54)
Requirement already satisfied: decorator in /home/pi/miniforge3/envs/rsudp/lib/python3.12/site-packages (from obspy->rsudp==2.1.0) (5.2.1)
Requirement already satisfied: requests in /home/pi/miniforge3/envs/rsudp/lib/python3.12/site-packages (from obspy->rsudp==2.1.0) (2.32.3)
Requirement already satisfied: httpx~=0.27 in /home/pi/miniforge3/envs/rsudp/lib/python3.12/site-packages (from python-telegram-bot->rsudp==2.1.0) (0.28.1)
Requirement already satisfied: requests-oauthlib>=0.4.0 in /home/pi/miniforge3/envs/rsudp/lib/python3.12/site-packages (from twython->rsudp==2.1.0) (2.0.0)
Requirement already satisfied: anyio in /home/pi/miniforge3/envs/rsudp/lib/python3.12/site-packages (from httpx~=0.27->python-telegram-bot->rsudp==2.1.0) (4.9.0)
Requirement already satisfied: certifi in /home/pi/miniforge3/envs/rsudp/lib/python3.12/site-packages (from httpx~=0.27->python-telegram-bot->rsudp==2.1.0) (2025.1.31)
Requirement already satisfied: httpcore==1.* in /home/pi/miniforge3/envs/rsudp/lib/python3.12/site-packages (from httpx~=0.27->python-telegram-bot->rsudp==2.1.0) (1.0.8)
Requirement already satisfied: idna in /home/pi/miniforge3/envs/rsudp/lib/python3.12/site-packages (from httpx~=0.27->python-telegram-bot->rsudp==2.1.0) (3.10)
Requirement already satisfied: h11<0.15,>=0.13 in /home/pi/miniforge3/envs/rsudp/lib/python3.12/site-packages (from httpcore==1.*->httpx~=0.27->python-telegram-bot->rsudp==2.1.0) (0.14.0)
Requirement already satisfied: six>=1.5 in /home/pi/miniforge3/envs/rsudp/lib/python3.12/site-packages (from python-dateutil>=2.7->matplotlib<4,>3.2->rsudp==2.1.0) (1.17.0)
Requirement already satisfied: charset-normalizer<4,>=2 in /home/pi/miniforge3/envs/rsudp/lib/python3.12/site-packages (from requests->obspy->rsudp==2.1.0) (3.4.1)
Requirement already satisfied: urllib3<3,>=1.21.1 in /home/pi/miniforge3/envs/rsudp/lib/python3.12/site-packages (from requests->obspy->rsudp==2.1.0) (2.4.0)
Requirement already satisfied: oauthlib>=3.0.0 in /home/pi/miniforge3/envs/rsudp/lib/python3.12/site-packages (from requests-oauthlib>=0.4.0->twython->rsudp==2.1.0) (3.2.2)
Requirement already satisfied: greenlet!=0.4.17 in /home/pi/miniforge3/envs/rsudp/lib/python3.12/site-packages (from sqlalchemy<2->obspy->rsudp==2.1.0) (3.1.1)
Requirement already satisfied: sniffio>=1.1 in /home/pi/miniforge3/envs/rsudp/lib/python3.12/site-packages (from anyio->httpx~=0.27->python-telegram-bot->rsudp==2.1.0) (1.3.1)
Requirement already satisfied: typing_extensions>=4.5 in /home/pi/miniforge3/envs/rsudp/lib/python3.12/site-packages (from anyio->httpx~=0.27->python-telegram-bot->rsudp==2.1.0) (4.12.2)
Building wheels for collected packages: rsudp
  Building wheel for rsudp (setup.py): started
  Building wheel for rsudp (setup.py): finished with status 'done'
  Created wheel for rsudp: filename=rsudp-2.1.0-py3-none-any.whl size=502025 sha256=91917053488a06619c7dd1204d9bd6b5ac79b9fa9b9b2181dac082be5fe25f81
  Stored in directory: /tmp/pip-ephem-wheel-cache-6fqscems/wheels/e5/39/d9/1dab84c371793aa92f519063a54e56844a6bdad5cc0dd1de45
Successfully built rsudp
Installing collected packages: rsudp
  Attempting uninstall: rsudp
    Found existing installation: rsudp 2.1.0
    Uninstalling rsudp-2.1.0:
      Successfully uninstalled rsudp-2.1.0
Successfully installed rsudp-2.1.0
Qt import failed. Trying Tk...
detail: Failed to import any of the following Qt binding modules: PyQt5, PySide2
2025-04-20 06:24:40 [Init] Logging initialized successfully.
2025-04-20 06:24:40 Using settings file: /home/pi/.config/rsudp/rsudp_settings.json
2025-04-20 06:24:40 Output directory is: /home/pi/rsudp_data
2025-04-20 06:24:40 [RS lib] Initializing rsudp v 2.1.0.
2025-04-20 06:24:40 [openSOCK] Opening socket on localhost:8888 (HOST:PORT)
2025-04-20 06:24:40 [RS lib] Waiting for UDP data on port 8888...
2025-04-20 06:24:42 [Init] Available channels: ['EHZ']
2025-04-20 06:24:42 [get_inventory] Fetching inventory for station AM.S8B94 from Raspberry Shake FDSN.
2025-04-20 06:24:44 [get_inventory] Inventory fetch successful. Station region is WASHINGTON-OREGON BORDER REGION
2025-04-20 06:24:44 [conn_stats] Initialization stats:
2025-04-20 06:24:44 [conn_stats]                 Port: 8888
2025-04-20 06:24:44 [conn_stats]   Sending IP address: 10.10.0.42
2025-04-20 06:24:44 [conn_stats]     Set station name: S8B94
2025-04-20 06:24:44 [conn_stats]   Number of channels: 1
2025-04-20 06:24:44 [conn_stats]   Transmission freq.: 250 ms/packet
2025-04-20 06:24:44 [conn_stats]    Transmission rate: 4 packets/sec
2025-04-20 06:24:44 [conn_stats]   Samples per second: 100 sps
2025-04-20 06:24:44 [conn_stats]            Inventory: AM.S8B94 (Raspberry Shake Citizen Science Station)
2025-04-20 06:24:44 [PlotAbc] WARNING: Running on aarch64 machine, using Tk instead of Qt
2025-04-20 06:24:44 [PlotAbc] Signal deconvolution set to CHAN
2025-04-20 06:24:44 [PlotAbc] Seismogram units are channel-specific
2025-04-20 06:24:44 [Plot] Plotting 1 channels: ['EHZ']
2025-04-20 06:24:44 [Plot] Starting.
2025-04-20 06:24:44 [Alert] Alert stream units are counts
2025-04-20 06:24:44 [Alert] Alert stream will be bandpass filtered from 0.8 to 9 Hz
2025-04-20 06:24:45 [AlertSound] Loaded 4.07 sec alert sound from /home/pi/miniforge3/envs/rsudp/lib/python3.12/site-packages/rsudp/rs_sounds/doorbell.mp3
2025-04-20 06:24:45 [AlertSound] Starting.
2025-04-20 06:24:45 [PlotsController] Starting.
2025-04-20 06:24:45 [Consumer] Starting.
2025-04-20 06:24:45 [Producer] Starting.
2025-04-20 06:24:45 [Producer] Receiving UDP data from 10.10.0.42
2025-04-20 06:24:45 [Alert] Starting Alert trigger with sta=6s, lta=30s, duration=0.0s and threshold=1 on channel=EHZ
2025-04-20 06:24:45 [Alert] Earthquake trigger warmup time of 30 seconds...
2025-04-20 06:24:45 [Plot] WARNING: Failed to set PNG icon image, trying .ico instead
2025-04-20 06:25:15 [Alert] Earthquake trigger up and running normally.

The only two things of note that I can see are:

[PlotAbc] WARNING: Running on aarch64 machine, using Tk instead of Qt

and

WARNING: Failed to set PNG icon image, trying .ico instead

But as far as I can tell those are benign. I don’t think it’s a permissions issue, since data is written to the output dir when write is enabled. And I don’t see any errors in the log after an alert is triggered. In fact it logs that it wrote the png file.

The only other thing, I ran conda activate rsudp and then rs-test (which seems to default to saving data in /home/pi/rsudp/output_dir/screenshots) and the same behavior, it saved miniSEED data but no screenshots. The results are:

2025-04-20 06:34:05 TESTING Test results:
2025-04-20 06:34:05 TESTING log directory               : PASS
2025-04-20 06:34:05 TESTING stdout logging              : PASS
2025-04-20 06:34:05 TESTING logging to file             : PASS
2025-04-20 06:34:05 TESTING output directory structure  : PASS
2025-04-20 06:34:05 TESTING screenshot directory        : PASS
2025-04-20 06:34:05 TESTING data directory              : PASS
2025-04-20 06:34:05 TESTING port                        : PASS
2025-04-20 06:34:05 TESTING internet                    : PASS
2025-04-20 06:34:05 TESTING inventory (RS FDSN server)  : PASS
2025-04-20 06:34:05 TESTING packetizing data            : PASS
2025-04-20 06:34:05 TESTING sending data                : PASS
2025-04-20 06:34:05 TESTING receiving data              : PASS
2025-04-20 06:34:05 TESTING master queue                : PASS
2025-04-20 06:34:05 TESTING processing data             : PASS
2025-04-20 06:34:05 TESTING ALARM message               : PASS
2025-04-20 06:34:05 TESTING RESET message               : PASS
2025-04-20 06:34:05 TESTING IMGPATH message             : FAIL
2025-04-20 06:34:05 TESTING TERM message                : PASS
2025-04-20 06:34:05 TESTING pydub dependencies          : PASS
2025-04-20 06:34:05 TESTING matplotlib backend          : PASS
2025-04-20 06:34:05 TESTING plot                        : FAIL
2025-04-20 06:34:05 TESTING miniSEED write              : PASS
2025-04-20 06:34:05 TESTING miniSEED data               : PASS
2025-04-20 06:34:05 TESTING print data                  : PASS
2025-04-20 06:34:05 TESTING alert trigger on            : PASS
2025-04-20 06:34:05 TESTING alert trigger off           : PASS
2025-04-20 06:34:05 TESTING play sound                  : PASS
2025-04-20 06:34:05 TESTING screenshot exists           : FAIL
2025-04-20 06:34:05 TESTING Twitter text message        : PASS
2025-04-20 06:34:05 TESTING Twitter image message       : FAIL
2025-04-20 06:34:05 TESTING Telegram text message       : PASS
2025-04-20 06:34:05 TESTING Telegram image              : FAIL
2025-04-20 06:34:05 TESTING forwarding                  : PASS
2025-04-20 06:34:05 TESTING RSAM transmission           : PASS
2025-04-20 06:34:05 TESTING [Main] Shutdown successful.

Not sure why plot failed, as it displayed ok, IMGPATH message fail might indicate something but I’m not sure what.

Any help is appreciated.

Adam

hello,

this problem is resolved in the next release / update to the RSUDP source code, likely to happen later this week.

cheers,
richard

2 Likes

Cool, someone posted a fix on GitHub adding:

self.save_timer += 1

to c_plots.py and that got it working but I’ll keep an eye out for the official update.

Thank you.

1 Like