2.2 KiB
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 headerFrom: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_NAMEand threshold logic (example currently usesvalue > 0as 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_INTERVALwhile OK - if NOT OK, sends one alert
- repeats checks at
ERROR_INTERVALwhile 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.pydirectly for transport debugging (it should return non-zero on errors).