EPICS2SMS

Monitor one or more EPICS PVs and send an SMS alert via PSI mail infrastructure.

This tool does not use local /usr/sbin/sendmail. It sends mail via direct SMTP to smtp.psi.ch to ensure the message is handled as a registered system/application sender.

Files

  • epics2sms.sh
    EPICS polling + alert logic (send once per outage; reset when OK again).

  • smtp_send.py
    SMTP transport helper (no authentication). Sets both header From: and envelope sender (MAIL FROM) to the configured sender address.

Why SMTP instead of sendmail?

On beamline console hosts, local sendmail may be routed through internal relays or firewall rules and can lead to silent drops for mail-to-SMS gateways. Direct SMTP to smtp.psi.ch makes the transport path explicit and reproducible.

Requirements

  • EPICS CA tools available on the host (caget).
  • Python 3 available (python3).
  • Network access from the host to smtp.psi.ch:25.

Configuration

Edit epics2sms.sh:

  • PV_NAME and threshold logic (example currently uses value > 0 as OK).
  • RECIPIENTS
    Include the Swisscom gateway address:
    • 079XXXXXXX@mail2sms.swisscom.com
  • FROM_ADDR
    Must be a registered PSI system/application sender, e.g. cSAXS@psi.ch.

FROM_ADDR is critical: messages from host/user addresses like e23080@x12sa-cons-02.psi.ch may be filtered and never reach the SMS gateway.

Quick test

Send a normal email:

python3 smtp_send.py --to andreas.menzel@psi.ch --from-addr cSAXS@psi.ch "Test $(date)"

Send an SMS (via mail2sms):

python3 smtp_send.py --to 079XXXXXXX@mail2sms.swisscom.com --from-addr cSAXS@psi.ch "SMS test $(date)"

Run the monitor

./epics2sms.sh

Behavior:

  • polls the PV at POLL_INTERVAL while OK
  • if NOT OK, sends one alert
  • repeats checks at ERROR_INTERVAL while NOT OK
  • once OK again, the alert state resets

Notes / Troubleshooting

  • If no SMS arrives but SMTP returns success, ask IT to check Exchange/relay transport rules for the registered sender and the mail2sms gateway domain.
  • Use smtp_send.py directly for transport debugging (it should return non-zero on errors).
Description
Collection of small, self-contained tools and scripts made publicly available for PSI collaborators and other researchers.
Readme 58 KiB
Languages
Python 88.6%
Shell 11.4%