itelescope/state/NOTES.md
Laurence c45d87c9d0 Rate card: per-scope Plan-40 points rates extracted from the portal
The UpdatePlan page embeds each telescope's dark-of-moon base rate in a
data-default-rate attribute; effective rate = base x (1 - plan
AccessDiscount from DataService.svc/GetMyAvailablePlans) x (1 - moon
discount from a server-side illumination table, not yet extracted). Records
the computed Plan-40 rates for all 25 listed scopes, the billing model
(points per imaging hour, billed per minute of exposure time, overhead
unbilled), the walk-in rule (idle scopes need no reservation; the ACP flow
is identical to the free scopes with points deducting), and the Cloudflare
constraint on the reservation planner.
2026-07-18 22:32:29 +01:00

58 lines
3.3 KiB
Markdown

# Notes
> Working notes, gotchas, environment quirks, and dead ends to avoid. Free form. The
> point is to save a future session from rediscovering something the hard way.
- Refresh the specs snapshot with:
`curl -sL "https://docs.google.com/spreadsheets/d/1jZWkkjewOuyNC9YzQ8y2d0pO1e4T7EBeysmQMPBVSOk/export?format=csv" -o data/itelescope-telescopes.csv`
- The CSV has multi-line cells (quoted); line count is not row count. Telescope rows
start `T<number>,`; observatory header rows have an empty first column.
- Sensors are 16-bit ADC unless noted (T20's ASI2400C is 14-bit).
- Free scopes (30 min/day): T68 (Utah), T33 (Siding Spring).
- Minimum elevation limits come from the support article, not the sheet.
## Automation recon (2026-07-18, all verified live)
Credentials live OUTSIDE this repo (local claudetemp, never commit them).
- go.itelescope.net is ASP.NET WebForms. Login: GET /login.aspx, POST
UsernameTextBox/PasswordTextBox plus __VIEWSTATE, __VIEWSTATEGENERATOR,
__EVENTVALIDATION, LoginButton=Login; session cookie then works everywhere.
- JSON service at /DataService.svc (session-cookie auth): GetAccountStatus
(balance, plan, renewal), GetMyAvailablePlans (per-plan, per-scope
AccessDiscount), ApplyPromoCode (POST). More methods likely; enumerate from
inline $.ajax calls on each page (Scripts/Common.js has none).
- Home page /default.aspx carries live network status text (per-scope
offline/online reasons) plus points balance: cheap to poll.
- Reservation/Overview.aspx links every telescope's own control server:
https://tNN.itelescope.online/ or http://tNN.itelescope.net:80NN/. These are
ACP web servers behind HTTP auth accepting the same iTelescope credentials
(verified read-only on T33: index.asp is a TiddlyWiki info page, min elevation
20 degrees, 900 s max exposure). Session control and plan submission happen
here; ACP endpoint mapping is the next step.
- Reservation/Planner.aspx now redirects to https://lookup.itelescope.online
(new planning tool, not yet explored).
- Weather per site: Weather/Weather.aspx?site=UDRO|SSO|DSC|SRO|AC|EYE.
- Account: Plan-40 (GBP 32.00 per 28 days), renewal 12 Aug 2026, subscribed
since Apr 2019, balance 2,638 points at recon time.
## Rate card (2026-07-18, points per imaging hour, billed per minute)
Extracted from MyAccount/UpdatePlan.aspx: each scope row carries
data-default-rate (dark-of-moon base); effective rate = base x (1 -
AccessDiscount from DataService GetMyAvailablePlans) x (1 - moon discount,
server-side table keyed on illumination, not extracted yet). Plan-40 discount
is 10% on most scopes, 20% on a few, 0% on the newest (T25, T26, T73, T74).
Plan-40 rates before moon discount: T2 50, T5 68, T8 130, T10 146, T11 161,
T14 97, T17 135, T18 81, T20 89, T21 76, T24 186, T25 322, T26 394, T30 161,
T32 146, T33 0 (free), T59 80, T68 0 (free), T70 119, T71 106, T72 202,
T73 224, T74 295, T75 202, T80 119.
Standouts: T59 at 80/hr is the value big scope (20" CDK, square 37 arcmin
field, 900 s subs); T5 at 68/hr the cheapest paid; T26 at 394/hr the dearest.
Billing is per minute of imaging (exposure) time, so overhead is not billed.
Paid imaging needs no reservation when a scope is idle: same walk-in ACP flow
as the free scopes, points just deduct. Reservations (to guarantee a slot) go
through lookup.itelescope.online, which is Cloudflare-protected: Playwright
needed.