itelescope/plans/README.md
Laurence cd3de71361 Verify Cen A, book CrA on T8 for 22 Jul evening, rebuild the rate model
Cen A (reservation 749302, T32) completed at 11:16 UTC, 34 minutes early
because the plan finished, not because of a fault: NGC5128 images are on
t32.itelescope.net:8032 and transaction 851344 billed 160 points. Balance
is now 2,097 of the original 2,638.

That second bill settles the billing question the 20 Jul note left open.
T32 billed 160 for a 120 min plan (2.00 h x 80) and T59 billed 381 for a
180 min plan (3.00 h x 127); both land exactly on the plan's exposure
total and neither lands on wall-clock time. So billing is per imaging
minute as originally documented, and the x1.6 wall-clock multiplier is
withdrawn from CAMPAIGN.md, TODO.md and NOTES.md. What is actually wrong
is the rate card's per-scope numbers, so each scope's rate now has to be
derived from its first real bill. The practical consequence is the
opposite of the old warning: the campaign is now heading to UNDER-spend
by roughly 800 points, so later planning sessions should add or lengthen
runs rather than trim them.

Queue #2 (Corona Australis on T8) is booked at last. The original
01:35-04:35 slot was confirmed dead by probing New.aspx, which answered
"Conflicting reservation. Start time must be later than 2:25 AM" (user
hajo's reservation 749207, exactly as the previous session predicted).
Rather than take the leftover 02:30-05:30, where the target sits 3.5 to
6.5 hours past the meridian, the run moved to the next night's evening,
2026-07-22 21:45 to 2026-07-23 00:45 SSO local, which brackets the ~22:30
culmination so all 115 minutes of imaging happen near the zenith. This is
the geometry of the previously rejected option (c) on the night of option
(b): (c) was only rejected because Cen A held the reservation quota, and
that expired when Cen A completed. Verified via Reservation/MySummary.aspx;
quota now 6:50 of 8:00.

The New.aspx probe is documented in plans/README.md as the way to test a
slot for conflicts, since the DayPilot grid renders client-side and shows
nothing to a plain HTTP fetch.
2026-07-21 12:43:11 +01:00

100 lines
5.2 KiB
Markdown

# Observing plans and the T33 session runbook
ACP observing plans for iTelescope scopes, plus the procedure to run one on T33
(the free Siding Spring scope). Credentials are NOT in this repo: they live in
the local claudetemp itelescope folder (creds.txt, `username=`/`password=` lines).
## Plan format (ACP)
See [ngc104-test.txt](ngc104-test.txt). Directives, then a target line:
`Name<TAB>RA_decimal_hours<TAB>Dec_decimal_degrees`. Counts, intervals, binning
and filters are parallel comma-separated lists. `#shutdown` parks safely at the
end (iTelescope's own one-click plans do the same).
## T33 endpoints (base http://t33.itelescope.net:8033, HTTP auth = iTelescope creds)
| Purpose | Path |
|---|---|
| Status JSON (times, obsStat, obsOwner) | /ac/SystemStatus/asystemstatus.asp |
| Console text | /ac/SystemStatus/aconsread.asp |
| Scope connect control | /ac/SystemStatus/ascopeconn.asp |
| Shutter/roof status | /ac/SystemStatus/ashutterctl.asp |
| My plan folder (list/upload/delete) | /plans/qisback/aindex.asp, aupload.asp, adelfile.asp |
| Run a plan ("Acquire Images") | POST /ac/Plans/plan.asp |
| My logs | /logs/qisback/aindex.asp |
| Finished data | data.itelescope.net |
Upload: multipart POST to `/plans/qisback/aupload.asp`, fields `File1` (the file)
and `DestPath=/plans/qisback`. Verified working 2026-07-18; content round-trips
exactly.
Run: the web UI posts the plan select to `/ac/Plans/plan.asp`; the select's value
is the WINDOWS path `C:\ProgramData\ACP\ACP Web Data\Doc Root\plans\qisback\<file>`.
Field names seen: `plan`, optional `VPhot`, `AutoLogoff`. NOT yet exercised live
(observatory was closed, daytime); the first live session must confirm whether a
scope-connect POST (ascopeconn.asp) is required first, and capture the exact
response shape.
## The 47 Tuc free-session test (ngc104-test.txt)
- Target: NGC 104 / 47 Tucanae, RA 0.4015 h, Dec -72.0814 deg (circumpolar at SSO).
- L 4x120 s, RGB 2x90 s each, Bin2: about 17 min exposure, about 24 min with
overhead, inside the daily free 30 minutes.
- Uploaded to /plans/qisback/ on 2026-07-18 and verified.
### When to run
47 Tuc clears T33's 20 degree minimum elevation in the second half of the SSO
night. SSO local = UTC+10; the good window is roughly 14:00-19:30 UTC (UK
afternoon/evening). Sunrise at SSO was 06:14 local (20:14 UTC) at recon time;
stop well before dawn.
### Procedure
1. GET asystemstatus.asp: confirm observatory open (obsStat) and no other user
(obsOwner n/a). If someone is on, wait and retry; T33 is first-come.
2. Confirm the plan file is still in /plans/qisback/ (aindex.asp).
3. POST plan.asp with the plan's Windows path to start acquisition.
4. Poll aconsread.asp (console) every minute or two: slew, centering, filter
changes, exposures. The run self-terminates via #shutdown.
5. Images land in /images/qisback/ on the scope server and then on
data.itelescope.net; logs in /logs/qisback/.
6. Record the session outcome in state/NOTES.md.
Abort path if something looks wrong: the web UI exposes an abort on the console
page; locate it live before starting exposures (not yet mapped).
## Reservations (verified working 2026-07-18)
Reservations live at http://reservations.itelescope.net ("Reservations Pilot"),
reached from each scope's /ac/MenuItems/reservation-edit.asp iframe as
`?t=<scope-id>&u=<username>` (scope ids look like GRAS059 for T59, GRAS033 for
T33; full list in the resources JSON on go.itelescope.net/Reservation/Overview.aspx,
whose embedded DayPilot events also show everyone's bookings, roof/sun times, and
the moon discount per night). No separate login: it trusts the u= parameter once a
session cookie exists.
Creating one is a three-step WebForms dance against
`New.aspx?start=<ISO local>&end=<ISO local>&r=<scope-id>` (times are OBSERVATORY
LOCAL): (1) GET the form, (2) POST tokens + DropDownStartTime/DropDownEndTime
(e.g. "12:05 AM"/"3:45 AM") + PlanToRunListBox=<plan file> + RescheduleCheckbox
+ ButtonRefreshPlans=Refresh Plans, which re-renders with Confirm enabled,
(3) re-POST the fresh tokens with the same fields + ReservationOKButton=Confirm
Reservation. Success = response script `ModalStatic.result("OK")` AND the booking
appearing in the grid: the modal also says "OK" on silent failure, so ALWAYS
re-fetch the grid and look for the reservation id + username.
Availability probing (2026-07-21): a plain GET of
`New.aspx?start=...&end=...&r=...` is a cheap, side-effect-free conflict check.
The form comes back with the two time dropdowns populated for +/-60 min around
the requested times, and if the slot collides with someone else's booking it
also renders "Conflicting reservation. Start time must be later than H:MM AM".
No message plus a full pair of dropdowns means the window is clear. This beats
reading the DayPilot grid, whose event divs do not survive a plain
Invoke-WebRequest fetch (they are rendered client-side).
Rules learned: maximum reservation length 4:00; recommended duration 1.5x total
imaging time; the attached plan is auto-started by iTelescope at reservation
start (no walk-in POST needed); RescheduleCheckbox auto-rebooks the identical
timeslot on the first available night of the next 30 if the run does not happen.
Delete/edit via Edit.aspx?id=<reservation id> from the grid.