Skip to content

SatMe PC Web publishing

Olivier Gouyen (F4IOZ) edited this page Oct 29, 2026 · 1 revision

🇫🇷 Version française

SatMe-PC — web publishing: pushing to your own site

← SatMe-PC guide · October 2026

SatMe-PC can push what the station makes to your own web site: SSTV and SSDV pictures, planches, event reports, contacts, the journal's videos, FT8 / FT4 passes, and as an option live data (auto-pilot, QO-100 spectrum, DATV picture, station, FT8 / FT4), your favourite satellites and your awards. Your site receives them as it likes — a PHP file on shared hosting, a WordPress plugin, a small Python or Node server, anything that answers an HTTP request. With no server at all, SatMe-PC can also write into a folder for a static site or a sync tool.

SatMe-PC always does the sending: it works from behind a home router, and nothing is opened on the station — the site never connects to the PC.

The full wire format, the examples and the receivers: docs/publication-web.md in the repository (in French: publication-web.fr.md).

Off by default: the module

Publication web is a module of Réglages › Modules, off by default, and no profile switches it on (nor off when it is ticked). While it is unticked, SatMe-PC sends nothing to anyone — no queue, no test, no live data — and no 🌐 button shows. See Modules.

Setting it up

Where: Réglages › Services en ligne › Envoyer vers un site web (once the module is ticked).

  1. Où envoyer (where to send): Adresse web (HTTPS) or Dossier sur ce PC (a folder on this PC).
  2. The address that receives, two ways:
    • with {type} in it, replaced by each request's type: https://example.org/api/satme/{type} → …/api/satme/sstv-image;
    • without {type}: everything goes to that one address (webhook style), the type in the X-SatMe-Type header: https://example.org/satme/recevoir.php.
  3. The token (optional, advised): a secret you make up (for instance openssl rand -hex 32) and your site checks, sent as Authorization: Bearer <token>. It stays on this PC and is never shown again.
  4. Tester (test): SatMe-PC sends a ping (nothing is published), or tries to write into the folder. Sending is ready only after a test that passes; another address, token or folder is tested again.
  5. Quoi envoyer (what to send): each kind Sur clic (at a click: the 🌐 button of each item), Automatique (as it comes) or Jamais (never). Everything starts at « Sur clic »: nothing goes by itself until you choose « Automatique ».

http:// (no S) is accepted only towards this machine or the local network (127.0.0.1, 192.168.…, 10.…, ….local…); elsewhere https:// is required. Redirects are not followed: give the final address.

What goes, and from where

Kind Type 🌐 button In « Automatique »
SSTV pictures sstv-image the SSTV viewer each picture received live (not the tests nor the replays)
SSDV pictures ssdv-image under each picture, Télémesure › Images SSDV (see SSDV) as it comes; sent again by itself when more packets arrive, under the same key
Planches planche Planche page, 🌐 Planche vers le site those with pictures, 2 min after the last picture received
Reports rapport (PDF) Planche page, 🌐 Rapport vers le site —
Contacts qso (ADIF) each line of the log (Contacts) each contact added
Journal videos journal-video (MP4) the journal's editor, under a video made —
FT8 / FT4 passes ft8-passage the Passages FT8/FT4 sur le site card of the FT8/FT4 tab (see FT8 / FT4) at the end of each pass
An award received diplome-image Envoyer le diplôme reçu in Agenda › Diplômes (see Awards) never: only on that click

Planches say everything about their series: the satellite, the event or the auto-pilot's campaign, the first and last picture's dates, slides received out of those expected and the ones missing, the best picture of each slide, the passes that brought pictures (AOS, LOS, max elevation, number of pictures, 🤖 auto-pilot) with each one's journal video, and the link to their report. An SSTV picture and a journal video say their pass and whether the auto-pilot received them. A site that does not know these optional fields ignores them.

En direct: live data (optional)

Under En direct, each part is ticked on its own; nothing by default:

  • Auto-pilote: a campaign's next pass, the reception under way, the next picture, the last picture received; during a pass, the picture coming in every 5 s.
  • Spectre QO-100: the narrow-band transponder as the SDR sees it, a line a second.
  • Image DATV: a small picture and the MER, while the receiver is locked.
  • Station: the satellite followed, where the antennas really point, the receiving chain in use (« something transmits »: yes or no, nothing more).
  • FT8/FT4: each FT8 (15 s) or FT4 (7.5 s) slot once decoded — the satellite of the pass (or the band), each message heard with its audio frequency, report, text, callsign and locator, and a small strip of the waterfall to draw a spectrogram. Only messages heard on the air.
  • Satellites favoris: the ★ list, as soon as it changes, at most once an hour otherwise (for a home page to feature them).
  • Diplômes: the awards followed in Agenda › Diplômes and your progress (« 37/100 locators »), as soon as they change, else once a day — never the contacts counted, the pictures' names, the notes or your details.

Only names, times and measurements — never an address, a pairing code, a password or a key. No queue: when the site does not answer, SatMe-PC waits and tries again. Effacer le direct (clear the live data) removes it from the site at once. A site that does not know a type is left alone (« non pris en charge par le site »), without an error.

The queue

Nothing goes from the page itself: each item is first copied into a queue on disk (the data folder's site/), sent one at a time, in order. No answer, a timeout or a server error: tried again after 30 s, 1 min, 2 min… then every hour, with the same delivery id, even after a restart. On the card: what waits, the last answers, Réessayer maintenant (retry now), Vider la file (empty the queue). A refusal by the site is not tried again (a refused kind shows « refusé (403) » in the history); a refused token stops everything until the next test.

API v1, in short

Every request is one POST to the address set, with the headers X-SatMe-Version: 1, X-SatMe-Type, X-SatMe-Id (one id per delivery: the same from one try to the next, so nothing is published twice) and, with a token, Authorization: Bearer ….

  • Media (pictures, planches, reports, contacts, videos): multipart/form-data with three fields — type, meta (a JSON card: title, satellite, UTC time, mode, your callsign and locator, the file's name, type, size and SHA-256…) and fichier (the file).
  • Data (ping, live data, favourites, awards): a JSON.
  • The answer: any 2xx is accepted; 401 = token refused (everything stops); 403 = this kind is not taken by the site; 408, 429, 5xx or no answer = tried again later. An {"erreur": "…"} in the answer is shown as it is on the card.
  • The version only changes if a receiver written for v1 would stop working: adding a type or a field does not change it. Ignore the fields you do not know.

Ready-to-use receivers

In the repository, docs/exemples/publication-web/ (GPL, copy and adapt them):

  • recevoir.php: one PHP file for shared hosting — checks the token and the type, stores each file with its JSON card, keeps an index.json;
  • recevoir.py: Python 3, standard library only — the same, plus the live data; serves the folder read-only too;
  • index.html: a plain page that reads index.json and shows the pictures, videos, documents and contacts.

Security, on your side: HTTPS on the Internet, a long random token compared in constant time, an allow-list of types and sizes, files named by you (never by the name received), stored where the web server does not execute them, and every text escaped when shown.

No server: a folder

Dossier sur ce PC and a full path (/home/me/Nextcloud/satme, C:\Users\me\Sync\satme); Tester checks it can be written. SatMe-PC then writes each item with the same queue and the same choices: <type>/<year>/<id>.<ext> and its .json card, an index.json (the last 500), an Atom feed flux.xml, and when ticked direct/direct.json and the live pictures, favoris.json, diplomes.json. Never half a file: each one is written beside its place, then renamed. For a static site (Hugo, Jekyll, plain HTML) or a sync tool you already have (Nextcloud, Syncthing, an rsync or FTP mirror) — SatMe-PC never does FTP itself.

In the demonstration

In --demo, only to a site on this machine (http://127.0.0.1:…), never to a folder: try it with recevoir.py started beside it.

Clone this wiki locally