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

3.3 KiB

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.