diff --git a/.codex-temp/php-server.err.log b/.codex-temp/php-server.err.log
index 3f35db5..b5cb368 100644
--- a/.codex-temp/php-server.err.log
+++ b/.codex-temp/php-server.err.log
@@ -205,3 +205,285 @@ Stack trace:
[Sat Apr 4 19:33:39 2026] 127.0.0.1:51368 Accepted
[Sat Apr 4 19:33:40 2026] 127.0.0.1:51368 [200]: GET /favicon.ico
[Sat Apr 4 19:33:40 2026] 127.0.0.1:51368 Closing
+[Sat Apr 4 19:40:22 2026] 127.0.0.1:51175 Accepted
+[Sat Apr 4 19:40:22 2026] 127.0.0.1:51175 [302]: GET /settings.php
+[Sat Apr 4 19:40:22 2026] 127.0.0.1:51175 Closing
+[Sat Apr 4 19:40:22 2026] 127.0.0.1:51176 Accepted
+[Sat Apr 4 19:40:22 2026] 127.0.0.1:51176 [200]: GET /login.php
+[Sat Apr 4 19:40:22 2026] 127.0.0.1:51176 Closing
+[Sat Apr 4 19:40:54 2026] 127.0.0.1:57107 Accepted
+[Sat Apr 4 19:40:54 2026] 127.0.0.1:57107 [302]: GET /settings.php
+[Sat Apr 4 19:40:54 2026] 127.0.0.1:57107 Closing
+[Sat Apr 4 19:40:54 2026] 127.0.0.1:57108 Accepted
+[Sat Apr 4 19:40:54 2026] 127.0.0.1:57108 [200]: GET /login.php
+[Sat Apr 4 19:40:54 2026] 127.0.0.1:57108 Closing
+[Sat Apr 4 19:43:07 2026] 127.0.0.1:60471 Accepted
+[Sat Apr 4 19:43:07 2026] 127.0.0.1:60471 [200]: GET /my_favorites.php
+[Sat Apr 4 19:43:07 2026] 127.0.0.1:60471 Closing
+[Sat Apr 4 19:43:07 2026] 127.0.0.1:63523 Accepted
+[Sat Apr 4 19:43:07 2026] 127.0.0.1:63523 [200]: GET /css/style.css
+[Sat Apr 4 19:43:07 2026] 127.0.0.1:63523 Closing
+[Sat Apr 4 19:43:07 2026] 127.0.0.1:53915 Accepted
+[Sat Apr 4 19:43:07 2026] 127.0.0.1:65359 Accepted
+[Sat Apr 4 19:43:07 2026] 127.0.0.1:53915 [200]: GET /images/star16x16.png
+[Sat Apr 4 19:43:07 2026] 127.0.0.1:65359 [200]: GET /images/star16x16_rays.png
+[Sat Apr 4 19:43:07 2026] 127.0.0.1:53915 Closing
+[Sat Apr 4 19:43:07 2026] 127.0.0.1:65359 Closing
+[Sat Apr 4 19:43:08 2026] 127.0.0.1:57355 Accepted
+[Sat Apr 4 19:43:08 2026] 127.0.0.1:57355 [200]: GET /favicon.ico
+[Sat Apr 4 19:43:08 2026] 127.0.0.1:57355 Closing
+[Sat Apr 4 19:43:10 2026] 127.0.0.1:51011 Accepted
+[Sat Apr 4 19:43:10 2026] 127.0.0.1:51011 [200]: GET /settings.php
+[Sat Apr 4 19:43:10 2026] 127.0.0.1:51011 Closing
+[Sat Apr 4 19:43:10 2026] 127.0.0.1:60289 Accepted
+[Sat Apr 4 19:43:10 2026] 127.0.0.1:60289 [200]: GET /css/style.css
+[Sat Apr 4 19:43:10 2026] 127.0.0.1:60289 Closing
+[Sat Apr 4 19:43:10 2026] 127.0.0.1:63366 Accepted
+[Sat Apr 4 19:43:10 2026] 127.0.0.1:63366 [200]: GET /images/star16x16.png
+[Sat Apr 4 19:43:10 2026] 127.0.0.1:58674 Accepted
+[Sat Apr 4 19:43:10 2026] 127.0.0.1:58674 [200]: GET /images/star16x16_rays.png
+[Sat Apr 4 19:43:10 2026] 127.0.0.1:63366 Closing
+[Sat Apr 4 19:43:10 2026] 127.0.0.1:58674 Closing
+[Sat Apr 4 19:43:10 2026] 127.0.0.1:54239 Accepted
+[Sat Apr 4 19:43:11 2026] 127.0.0.1:54239 [200]: GET /favicon.ico
+[Sat Apr 4 19:43:11 2026] 127.0.0.1:54239 Closing
+[Sat Apr 4 19:48:27 2026] 127.0.0.1:59536 Accepted
+[Sat Apr 4 19:48:27 2026] 127.0.0.1:59536 [200]: GET /settings.php
+[Sat Apr 4 19:48:27 2026] 127.0.0.1:59536 Closing
+[Sat Apr 4 19:48:27 2026] 127.0.0.1:59856 Accepted
+[Sat Apr 4 19:48:27 2026] 127.0.0.1:59856 [200]: GET /css/style.css
+[Sat Apr 4 19:48:27 2026] 127.0.0.1:59856 Closing
+[Sat Apr 4 19:48:27 2026] 127.0.0.1:60559 Accepted
+[Sat Apr 4 19:48:27 2026] 127.0.0.1:50765 Accepted
+[Sat Apr 4 19:48:27 2026] 127.0.0.1:60559 [200]: GET /images/star16x16.png
+[Sat Apr 4 19:48:27 2026] 127.0.0.1:50765 [200]: GET /images/star16x16_rays.png
+[Sat Apr 4 19:48:27 2026] 127.0.0.1:60559 Closing
+[Sat Apr 4 19:48:27 2026] 127.0.0.1:50765 Closing
+[Sat Apr 4 19:48:27 2026] 127.0.0.1:64157 Accepted
+[Sat Apr 4 19:48:28 2026] 127.0.0.1:64157 [200]: GET /favicon.ico
+[Sat Apr 4 19:48:28 2026] 127.0.0.1:64157 Closing
+[Sat Apr 4 19:48:36 2026] 127.0.0.1:53240 Accepted
+[Sat Apr 4 19:48:36 2026] 127.0.0.1:53240 [200]: POST /settings.php
+[Sat Apr 4 19:48:36 2026] 127.0.0.1:53240 Closing
+[Sat Apr 4 19:48:36 2026] 127.0.0.1:52502 Accepted
+[Sat Apr 4 19:48:36 2026] 127.0.0.1:52502 [200]: GET /css/style.css
+[Sat Apr 4 19:48:36 2026] 127.0.0.1:52502 Closing
+[Sat Apr 4 19:48:36 2026] 127.0.0.1:57085 Accepted
+[Sat Apr 4 19:48:36 2026] 127.0.0.1:58526 Accepted
+[Sat Apr 4 19:48:36 2026] 127.0.0.1:57085 [200]: GET /images/star16x16.png
+[Sat Apr 4 19:48:36 2026] 127.0.0.1:58526 [200]: GET /images/star16x16_rays.png
+[Sat Apr 4 19:48:36 2026] 127.0.0.1:57085 Closing
+[Sat Apr 4 19:48:36 2026] 127.0.0.1:58526 Closing
+[Sat Apr 4 19:48:36 2026] 127.0.0.1:62820 Accepted
+[Sat Apr 4 19:48:37 2026] 127.0.0.1:62820 [200]: GET /favicon.ico
+[Sat Apr 4 19:48:37 2026] 127.0.0.1:62820 Closing
+[Sat Apr 4 19:48:45 2026] 127.0.0.1:65378 Accepted
+[Sat Apr 4 19:48:45 2026] 127.0.0.1:65378 [200]: GET /telegram/connect.php
+[Sat Apr 4 19:48:45 2026] 127.0.0.1:65378 Closing
+[Sat Apr 4 19:48:45 2026] 127.0.0.1:63398 Accepted
+[Sat Apr 4 19:48:45 2026] 127.0.0.1:63398 [200]: GET /css/style.css
+[Sat Apr 4 19:48:45 2026] 127.0.0.1:63398 Closing
+[Sat Apr 4 19:48:45 2026] 127.0.0.1:59277 Accepted
+[Sat Apr 4 19:48:45 2026] 127.0.0.1:53328 Accepted
+[Sat Apr 4 19:48:45 2026] 127.0.0.1:59277 [200]: GET /images/star16x16.png
+[Sat Apr 4 19:48:45 2026] 127.0.0.1:53328 [200]: GET /images/star16x16_rays.png
+[Sat Apr 4 19:48:45 2026] 127.0.0.1:59277 Closing
+[Sat Apr 4 19:48:45 2026] 127.0.0.1:53328 Closing
+[Sat Apr 4 19:48:45 2026] 127.0.0.1:64543 Accepted
+[Sat Apr 4 19:48:46 2026] 127.0.0.1:64543 [200]: GET /favicon.ico
+[Sat Apr 4 19:48:46 2026] 127.0.0.1:64543 Closing
+[Sat Apr 4 19:51:52 2026] 127.0.0.1:49354 Accepted
+[Sat Apr 4 19:51:52 2026] 127.0.0.1:49354 [302]: GET /telegram/connect.php
+[Sat Apr 4 19:51:52 2026] 127.0.0.1:49354 Closing
+[Sat Apr 4 19:51:52 2026] 127.0.0.1:49355 Accepted
+[Sat Apr 4 19:51:52 2026] 127.0.0.1:49355 [200]: GET /login.php
+[Sat Apr 4 19:51:52 2026] 127.0.0.1:49355 Closing
+[Sat Apr 4 19:56:56 2026] 127.0.0.1:49500 Accepted
+[Sat Apr 4 19:56:56 2026] 127.0.0.1:49500 [302]: GET /telegram/connect.php
+[Sat Apr 4 19:56:56 2026] 127.0.0.1:49500 Closing
+[Sat Apr 4 19:56:56 2026] 127.0.0.1:49501 Accepted
+[Sat Apr 4 19:56:57 2026] 127.0.0.1:49501 [200]: GET /login.php
+[Sat Apr 4 19:56:57 2026] 127.0.0.1:49501 Closing
+[Sat Apr 4 20:10:11 2026] 127.0.0.1:51757 Accepted
+[Sat Apr 4 20:10:11 2026] 127.0.0.1:51757 [302]: GET /telegram/broadcast_test.php
+[Sat Apr 4 20:10:11 2026] 127.0.0.1:51757 Closing
+[Sat Apr 4 20:10:45 2026] 127.0.0.1:61088 Accepted
+[Sat Apr 4 20:10:45 2026] 127.0.0.1:61088 [200]: GET /admin_users.php
+[Sat Apr 4 20:10:45 2026] 127.0.0.1:61088 Closing
+[Sat Apr 4 20:10:45 2026] 127.0.0.1:58250 Accepted
+[Sat Apr 4 20:10:45 2026] 127.0.0.1:58250 [200]: GET /css/style.css
+[Sat Apr 4 20:10:45 2026] 127.0.0.1:58250 Closing
+[Sat Apr 4 20:10:45 2026] 127.0.0.1:62701 Accepted
+[Sat Apr 4 20:10:45 2026] 127.0.0.1:62701 [200]: GET /images/star16x16.png
+[Sat Apr 4 20:10:45 2026] 127.0.0.1:50531 Accepted
+[Sat Apr 4 20:10:45 2026] 127.0.0.1:50531 [200]: GET /images/star16x16_rays.png
+[Sat Apr 4 20:10:45 2026] 127.0.0.1:62701 Closing
+[Sat Apr 4 20:10:45 2026] 127.0.0.1:50531 Closing
+[Sat Apr 4 20:10:45 2026] 127.0.0.1:60043 Accepted
+[Sat Apr 4 20:10:46 2026] 127.0.0.1:60043 [200]: GET /favicon.ico
+[Sat Apr 4 20:10:46 2026] 127.0.0.1:60043 Closing
+[Sat Apr 4 20:10:48 2026] 127.0.0.1:49369 Accepted
+[Sat Apr 4 20:10:49 2026] 127.0.0.1:49369 [200]: GET /telegram/broadcast_test.php
+[Sat Apr 4 20:10:49 2026] 127.0.0.1:49369 Closing
+[Sat Apr 4 20:10:49 2026] 127.0.0.1:53364 Accepted
+[Sat Apr 4 20:10:49 2026] 127.0.0.1:53364 [200]: GET /css/style.css
+[Sat Apr 4 20:10:49 2026] 127.0.0.1:53364 Closing
+[Sat Apr 4 20:10:49 2026] 127.0.0.1:57509 Accepted
+[Sat Apr 4 20:10:49 2026] 127.0.0.1:57509 [200]: GET /images/star16x16.png
+[Sat Apr 4 20:10:49 2026] 127.0.0.1:57509 Closing
+[Sat Apr 4 20:10:49 2026] 127.0.0.1:60548 Accepted
+[Sat Apr 4 20:10:49 2026] 127.0.0.1:60548 [200]: GET /images/star16x16_rays.png
+[Sat Apr 4 20:10:49 2026] 127.0.0.1:60548 Closing
+[Sat Apr 4 20:10:49 2026] 127.0.0.1:57884 Accepted
+[Sat Apr 4 20:10:49 2026] 127.0.0.1:57884 [200]: GET /favicon.ico
+[Sat Apr 4 20:10:49 2026] 127.0.0.1:57884 Closing
+[Sat Apr 4 20:10:56 2026] 127.0.0.1:60086 Accepted
+[Sat Apr 4 20:10:56 2026] PHP Fatal error: Uncaught Error: Call to undefined function mb_strlen() in C:\Users\ich\source\repos\skyview.astronomiemuseum.de\public\telegram\broadcast_test.php:225
+Stack trace:
+#0 {main}
+ thrown in C:\Users\ich\source\repos\skyview.astronomiemuseum.de\public\telegram\broadcast_test.php on line 225
+[Sat Apr 4 20:10:56 2026] 127.0.0.1:60086 [200]: POST /telegram/broadcast_test.php - Uncaught Error: Call to undefined function mb_strlen() in C:\Users\ich\source\repos\skyview.astronomiemuseum.de\public\telegram\broadcast_test.php:225
+Stack trace:
+#0 {main}
+ thrown in C:\Users\ich\source\repos\skyview.astronomiemuseum.de\public\telegram\broadcast_test.php on line 225
+[Sat Apr 4 20:10:56 2026] 127.0.0.1:60086 Closing
+[Sat Apr 4 20:10:56 2026] 127.0.0.1:60739 Accepted
+[Sat Apr 4 20:10:57 2026] 127.0.0.1:60739 [200]: GET /favicon.ico
+[Sat Apr 4 20:10:57 2026] 127.0.0.1:60739 Closing
+[Sat Apr 4 20:11:41 2026] 127.0.0.1:63735 Accepted
+[Sat Apr 4 20:11:41 2026] 127.0.0.1:63735 [200]: GET /telegram/broadcast_test.php
+[Sat Apr 4 20:11:41 2026] 127.0.0.1:63735 Closing
+[Sat Apr 4 20:11:42 2026] 127.0.0.1:57750 Accepted
+[Sat Apr 4 20:11:42 2026] 127.0.0.1:57750 [200]: GET /favicon.ico
+[Sat Apr 4 20:11:42 2026] 127.0.0.1:57750 Closing
+[Sat Apr 4 20:11:43 2026] 127.0.0.1:49797 Accepted
+[Sat Apr 4 20:11:43 2026] 127.0.0.1:49797 [200]: GET /telegram/broadcast_test.php
+[Sat Apr 4 20:11:43 2026] 127.0.0.1:49797 Closing
+[Sat Apr 4 20:11:43 2026] 127.0.0.1:57009 Accepted
+[Sat Apr 4 20:11:43 2026] 127.0.0.1:57009 [200]: GET /css/style.css
+[Sat Apr 4 20:11:43 2026] 127.0.0.1:57009 Closing
+[Sat Apr 4 20:11:44 2026] 127.0.0.1:59357 Accepted
+[Sat Apr 4 20:11:44 2026] 127.0.0.1:56268 Accepted
+[Sat Apr 4 20:11:44 2026] 127.0.0.1:59357 [200]: GET /images/star16x16.png
+[Sat Apr 4 20:11:44 2026] 127.0.0.1:56268 [200]: GET /images/star16x16_rays.png
+[Sat Apr 4 20:11:44 2026] 127.0.0.1:59357 Closing
+[Sat Apr 4 20:11:44 2026] 127.0.0.1:56268 Closing
+[Sat Apr 4 20:11:44 2026] 127.0.0.1:64168 Accepted
+[Sat Apr 4 20:11:45 2026] 127.0.0.1:64168 [200]: GET /favicon.ico
+[Sat Apr 4 20:11:45 2026] 127.0.0.1:64168 Closing
+[Sat Apr 4 20:11:45 2026] 127.0.0.1:51771 Accepted
+[Sat Apr 4 20:11:45 2026] 127.0.0.1:51771 [200]: POST /telegram/broadcast_test.php
+[Sat Apr 4 20:11:45 2026] 127.0.0.1:51771 Closing
+[Sat Apr 4 20:11:45 2026] 127.0.0.1:53274 Accepted
+[Sat Apr 4 20:11:45 2026] 127.0.0.1:53274 [200]: GET /css/style.css
+[Sat Apr 4 20:11:45 2026] 127.0.0.1:53274 Closing
+[Sat Apr 4 20:11:46 2026] 127.0.0.1:61053 Accepted
+[Sat Apr 4 20:11:46 2026] 127.0.0.1:61053 [200]: GET /images/star16x16.png
+[Sat Apr 4 20:11:46 2026] 127.0.0.1:49236 Accepted
+[Sat Apr 4 20:11:46 2026] 127.0.0.1:49236 [200]: GET /images/star16x16_rays.png
+[Sat Apr 4 20:11:46 2026] 127.0.0.1:61053 Closing
+[Sat Apr 4 20:11:46 2026] 127.0.0.1:49236 Closing
+[Sat Apr 4 20:11:46 2026] 127.0.0.1:50467 Accepted
+[Sat Apr 4 20:11:46 2026] 127.0.0.1:50467 [200]: GET /favicon.ico
+[Sat Apr 4 20:11:46 2026] 127.0.0.1:50467 Closing
+[Sat Apr 4 20:15:27 2026] 127.0.0.1:55582 Accepted
+[Sat Apr 4 20:15:27 2026] 127.0.0.1:55582 [200]: GET /telegram/broadcast_test.php
+[Sat Apr 4 20:15:27 2026] 127.0.0.1:55582 Closing
+[Sat Apr 4 20:15:27 2026] 127.0.0.1:64068 Accepted
+[Sat Apr 4 20:15:27 2026] 127.0.0.1:64068 [200]: GET /css/style.css
+[Sat Apr 4 20:15:27 2026] 127.0.0.1:64068 Closing
+[Sat Apr 4 20:15:27 2026] 127.0.0.1:63912 Accepted
+[Sat Apr 4 20:15:27 2026] 127.0.0.1:63912 [200]: GET /images/star16x16.png
+[Sat Apr 4 20:15:27 2026] 127.0.0.1:54947 Accepted
+[Sat Apr 4 20:15:27 2026] 127.0.0.1:54947 [200]: GET /images/star16x16_rays.png
+[Sat Apr 4 20:15:27 2026] 127.0.0.1:63912 Closing
+[Sat Apr 4 20:15:27 2026] 127.0.0.1:54947 Closing
+[Sat Apr 4 20:15:27 2026] 127.0.0.1:51829 Accepted
+[Sat Apr 4 20:15:28 2026] 127.0.0.1:51829 [200]: GET /favicon.ico
+[Sat Apr 4 20:15:28 2026] 127.0.0.1:51829 Closing
+[Sat Apr 4 20:15:49 2026] 127.0.0.1:63140 Accepted
+[Sat Apr 4 20:15:49 2026] PHP Warning: Undefined variable $ErrorActionPreference in C:\Users\ich\source\repos\skyview.astronomiemuseum.de\public\telegram\broadcast_test.php on line 77
+= : Die Benennung "=" wurde nicht als Name eines Cmdlet, einer Funktion, einer Skriptdatei oder eines ausfhrbaren
+Programms erkannt. berprfen Sie die Schreibweise des Namens, oder ob der Pfad korrekt ist (sofern enthalten), und
+wiederholen Sie den Vorgang.
+In Zeile:1 Zeichen:2
++ = 'Stop'
++ ~
+ + CategoryInfo : ObjectNotFound: (=:String) [], CommandNotFoundException
+ + FullyQualifiedErrorId : CommandNotFoundException
+
+[Sat Apr 4 20:15:50 2026] 127.0.0.1:63140 [200]: POST /telegram/broadcast_test.php
+[Sat Apr 4 20:15:50 2026] 127.0.0.1:63140 Closing
+[Sat Apr 4 20:15:50 2026] 127.0.0.1:56354 Accepted
+[Sat Apr 4 20:15:50 2026] 127.0.0.1:56354 [200]: GET /css/style.css
+[Sat Apr 4 20:15:50 2026] 127.0.0.1:56354 Closing
+[Sat Apr 4 20:15:50 2026] 127.0.0.1:57107 Accepted
+[Sat Apr 4 20:15:50 2026] 127.0.0.1:63396 Accepted
+[Sat Apr 4 20:15:50 2026] 127.0.0.1:57107 [200]: GET /images/star16x16.png
+[Sat Apr 4 20:15:50 2026] 127.0.0.1:63396 [200]: GET /images/star16x16_rays.png
+[Sat Apr 4 20:15:50 2026] 127.0.0.1:57107 Closing
+[Sat Apr 4 20:15:50 2026] 127.0.0.1:63396 Closing
+[Sat Apr 4 20:15:50 2026] 127.0.0.1:55764 Accepted
+[Sat Apr 4 20:15:51 2026] 127.0.0.1:55764 [200]: GET /favicon.ico
+[Sat Apr 4 20:15:51 2026] 127.0.0.1:55764 Closing
+[Sat Apr 4 20:16:40 2026] 127.0.0.1:55289 Accepted
+[Sat Apr 4 20:16:40 2026] 127.0.0.1:55289 [200]: GET /telegram/broadcast_test.php
+[Sat Apr 4 20:16:40 2026] 127.0.0.1:55289 Closing
+[Sat Apr 4 20:16:40 2026] 127.0.0.1:58669 Accepted
+[Sat Apr 4 20:16:40 2026] 127.0.0.1:58669 [200]: GET /css/style.css
+[Sat Apr 4 20:16:40 2026] 127.0.0.1:58669 Closing
+[Sat Apr 4 20:16:40 2026] 127.0.0.1:50546 Accepted
+[Sat Apr 4 20:16:40 2026] 127.0.0.1:50546 [200]: GET /images/star16x16.png
+[Sat Apr 4 20:16:40 2026] 127.0.0.1:51858 Accepted
+[Sat Apr 4 20:16:40 2026] 127.0.0.1:51858 [200]: GET /images/star16x16_rays.png
+[Sat Apr 4 20:16:40 2026] 127.0.0.1:50546 Closing
+[Sat Apr 4 20:16:40 2026] 127.0.0.1:51858 Closing
+[Sat Apr 4 20:16:40 2026] 127.0.0.1:54376 Accepted
+[Sat Apr 4 20:16:41 2026] 127.0.0.1:54376 [200]: GET /favicon.ico
+[Sat Apr 4 20:16:41 2026] 127.0.0.1:54376 Closing
+[Sat Apr 4 20:16:49 2026] 127.0.0.1:61162 Accepted
+[Sat Apr 4 20:16:49 2026] 127.0.0.1:61162 [200]: POST /telegram/broadcast_test.php
+[Sat Apr 4 20:16:49 2026] 127.0.0.1:61162 Closing
+[Sat Apr 4 20:16:49 2026] 127.0.0.1:49802 Accepted
+[Sat Apr 4 20:16:49 2026] 127.0.0.1:49802 [200]: GET /css/style.css
+[Sat Apr 4 20:16:49 2026] 127.0.0.1:49802 Closing
+[Sat Apr 4 20:16:49 2026] 127.0.0.1:65086 Accepted
+[Sat Apr 4 20:16:49 2026] 127.0.0.1:65086 [200]: GET /images/star16x16.png
+[Sat Apr 4 20:16:49 2026] 127.0.0.1:65460 Accepted
+[Sat Apr 4 20:16:49 2026] 127.0.0.1:65460 [200]: GET /images/star16x16_rays.png
+[Sat Apr 4 20:16:49 2026] 127.0.0.1:65086 Closing
+[Sat Apr 4 20:16:49 2026] 127.0.0.1:65460 Closing
+[Sat Apr 4 20:16:49 2026] 127.0.0.1:63450 Accepted
+[Sat Apr 4 20:16:50 2026] 127.0.0.1:63450 [200]: GET /favicon.ico
+[Sat Apr 4 20:16:50 2026] 127.0.0.1:63450 Closing
+[Sat Apr 4 20:18:27 2026] 127.0.0.1:55134 Accepted
+[Sat Apr 4 20:18:27 2026] 127.0.0.1:55134 [200]: GET /telegram/broadcast_test.php
+[Sat Apr 4 20:18:27 2026] 127.0.0.1:55134 Closing
+[Sat Apr 4 20:18:27 2026] 127.0.0.1:59680 Accepted
+[Sat Apr 4 20:18:27 2026] 127.0.0.1:59680 [200]: GET /css/style.css
+[Sat Apr 4 20:18:27 2026] 127.0.0.1:59680 Closing
+[Sat Apr 4 20:18:27 2026] 127.0.0.1:62473 Accepted
+[Sat Apr 4 20:18:27 2026] 127.0.0.1:62473 [200]: GET /images/star16x16.png
+[Sat Apr 4 20:18:27 2026] 127.0.0.1:59162 Accepted
+[Sat Apr 4 20:18:27 2026] 127.0.0.1:59162 [200]: GET /images/star16x16_rays.png
+[Sat Apr 4 20:18:27 2026] 127.0.0.1:62473 Closing
+[Sat Apr 4 20:18:27 2026] 127.0.0.1:59162 Closing
+[Sat Apr 4 20:18:27 2026] 127.0.0.1:65020 Accepted
+[Sat Apr 4 20:18:28 2026] 127.0.0.1:65020 [200]: GET /favicon.ico
+[Sat Apr 4 20:18:28 2026] 127.0.0.1:65020 Closing
+[Sat Apr 4 20:18:31 2026] 127.0.0.1:57969 Accepted
+#< CLIXML
+
+Warning: Module "mysqli" is already loaded in Unknown on line 0
diff --git a/config/skyview.sql b/config/skyview.sql
index de50a59..1263889 100644
--- a/config/skyview.sql
+++ b/config/skyview.sql
@@ -482,10 +482,11 @@ CREATE TABLE IF NOT EXISTS `moon_craters` (
-- Daten-Export vom Benutzer nicht ausgewÀhlt
--- Exportiere Struktur von Tabelle d0467f49.sat_import_runs
-CREATE TABLE IF NOT EXISTS `sat_import_runs` (
+-- Exportiere Struktur von Tabelle d0467f49.app_import_runs
+CREATE TABLE IF NOT EXISTS `app_import_runs` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`source` varchar(32) NOT NULL,
+ `source_url` varchar(500) DEFAULT NULL,
`started_at` datetime NOT NULL,
`finished_at` datetime DEFAULT NULL,
`records_received` int(11) NOT NULL DEFAULT 0,
@@ -494,8 +495,8 @@ CREATE TABLE IF NOT EXISTS `sat_import_runs` (
`status` varchar(32) NOT NULL,
`message` text DEFAULT NULL,
PRIMARY KEY (`id`),
- KEY `idx_sat_import_runs_source` (`source`),
- KEY `idx_sat_import_runs_started_at` (`started_at`)
+ KEY `idx_app_import_runs_source` (`source`),
+ KEY `idx_app_import_runs_started_at` (`started_at`)
) ENGINE=InnoDB AUTO_INCREMENT=23 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- Daten-Export vom Benutzer nicht ausgewÀhlt
@@ -638,6 +639,29 @@ CREATE TABLE IF NOT EXISTS `star_hipparcos` (
-- Daten-Export vom Benutzer nicht ausgewÀhlt
+-- Exportiere Struktur von Tabelle d0467f49.aavso_tcrb_observations
+CREATE TABLE IF NOT EXISTS `aavso_tcrb_observations` (
+ `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
+ `source_row_key` varchar(50) DEFAULT NULL,
+ `star_name` varchar(50) NOT NULL DEFAULT 'T CrB',
+ `jd` decimal(16,6) NOT NULL,
+ `observed_at_utc` datetime NOT NULL,
+ `calendar_date_text` varchar(64) DEFAULT NULL,
+ `magnitude` decimal(8,3) NOT NULL,
+ `magnitude_error` decimal(8,3) DEFAULT NULL,
+ `filter_code` varchar(20) DEFAULT NULL,
+ `observer_code` varchar(20) DEFAULT NULL,
+ `notes_raw` longtext DEFAULT NULL,
+ `imported_at` datetime NOT NULL DEFAULT current_timestamp(),
+ `created_at` datetime NOT NULL DEFAULT current_timestamp(),
+ `updated_at` datetime NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `uq_aavso_tcrb_observation` (`jd`,`filter_code`,`observer_code`),
+ KEY `idx_aavso_tcrb_observed_at_utc` (`observed_at_utc`),
+ KEY `idx_aavso_tcrb_filter_code` (`filter_code`),
+ KEY `idx_aavso_tcrb_observer_code` (`observer_code`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='AAVSO WebObs CCD-Beobachtungen fuer T CrB';
+
/*!40103 SET TIME_ZONE=IFNULL(@OLD_TIME_ZONE, 'system') */;
/*!40101 SET SQL_MODE=IFNULL(@OLD_SQL_MODE, '') */;
/*!40014 SET FOREIGN_KEY_CHECKS=IFNULL(@OLD_FOREIGN_KEY_CHECKS, 1) */;
diff --git a/php-server.err.log b/php-server.err.log
new file mode 100644
index 0000000..af389a9
--- /dev/null
+++ b/php-server.err.log
@@ -0,0 +1,434 @@
+[Sun Apr 5 08:41:18 2026] PHP Warning: Module "mysqli" is already loaded in Unknown on line 0
+[Sun Apr 5 08:41:18 2026] PHP 8.4.5 Development Server (http://127.0.0.1:8000) started
+[Sun Apr 5 08:41:20 2026] 127.0.0.1:56954 Accepted
+[Sun Apr 5 08:41:20 2026] 127.0.0.1:56954 [200]: GET /
+[Sun Apr 5 08:41:20 2026] 127.0.0.1:56954 Closing
+[Sun Apr 5 08:41:47 2026] 127.0.0.1:56958 Accepted
+[Sun Apr 5 08:41:47 2026] 127.0.0.1:56958 [200]: GET /
+[Sun Apr 5 08:41:47 2026] 127.0.0.1:56958 Closing
+[Sun Apr 5 09:03:20 2026] 127.0.0.1:58699 Accepted
+[Sun Apr 5 09:03:21 2026] 127.0.0.1:58699 [200]: GET /tcrb_lightcurve.php
+[Sun Apr 5 09:03:22 2026] 127.0.0.1:58699 Closing
+[Sun Apr 5 09:04:28 2026] 127.0.0.1:57870 Accepted
+[Sun Apr 5 09:04:29 2026] 127.0.0.1:57870 [200]: GET /
+[Sun Apr 5 09:04:29 2026] 127.0.0.1:57870 Closing
+[Sun Apr 5 09:04:29 2026] 127.0.0.1:59118 Accepted
+[Sun Apr 5 09:04:29 2026] 127.0.0.1:59118 [200]: GET /css/style.css
+[Sun Apr 5 09:04:29 2026] 127.0.0.1:59118 Closing
+[Sun Apr 5 09:04:29 2026] 127.0.0.1:50781 Accepted
+[Sun Apr 5 09:04:29 2026] 127.0.0.1:62400 Accepted
+[Sun Apr 5 09:04:29 2026] 127.0.0.1:50781 [200]: GET /images/star16x16.png
+[Sun Apr 5 09:04:29 2026] 127.0.0.1:62400 [200]: GET /images/star16x16_rays.png
+[Sun Apr 5 09:04:29 2026] 127.0.0.1:50781 Closing
+[Sun Apr 5 09:04:29 2026] 127.0.0.1:62400 Closing
+[Sun Apr 5 09:04:29 2026] 127.0.0.1:50410 Accepted
+[Sun Apr 5 09:04:30 2026] 127.0.0.1:50410 [200]: GET /favicon.ico
+[Sun Apr 5 09:04:30 2026] 127.0.0.1:50410 Closing
+[Sun Apr 5 09:04:30 2026] 127.0.0.1:58330 Accepted
+[Sun Apr 5 09:04:33 2026] 127.0.0.1:58331 Accepted
+[Sun Apr 5 09:04:33 2026] 127.0.0.1:58331 [200]: GET /tcrb_lightcurve.php
+[Sun Apr 5 09:04:34 2026] 127.0.0.1:58331 Closing
+[Sun Apr 5 09:04:34 2026] 127.0.0.1:58330 [200]: GET /tcrb_lightcurve.php
+[Sun Apr 5 09:04:34 2026] 127.0.0.1:58330 Closing
+[Sun Apr 5 09:04:35 2026] 127.0.0.1:54593 Accepted
+[Sun Apr 5 09:04:35 2026] 127.0.0.1:54593 [200]: GET /css/style.css
+[Sun Apr 5 09:04:35 2026] 127.0.0.1:54593 Closing
+[Sun Apr 5 09:04:35 2026] 127.0.0.1:62799 Accepted
+[Sun Apr 5 09:04:35 2026] 127.0.0.1:62898 Accepted
+[Sun Apr 5 09:04:35 2026] 127.0.0.1:62799 [200]: GET /images/star16x16.png
+[Sun Apr 5 09:04:35 2026] 127.0.0.1:62898 [200]: GET /images/star16x16_rays.png
+[Sun Apr 5 09:04:35 2026] 127.0.0.1:62799 Closing
+[Sun Apr 5 09:04:35 2026] 127.0.0.1:62898 Closing
+[Sun Apr 5 09:04:35 2026] 127.0.0.1:57032 Accepted
+[Sun Apr 5 09:04:36 2026] 127.0.0.1:57032 [200]: GET /favicon.ico
+[Sun Apr 5 09:04:36 2026] 127.0.0.1:57032 Closing
+[Sun Apr 5 09:04:36 2026] 127.0.0.1:52221 Accepted
+[Sun Apr 5 09:05:00 2026] 127.0.0.1:52221 [200]: GET /tcrb_lightcurve.php?filters%5B%5D=B&filters%5B%5D=I&filters%5B%5D=R&filters%5B%5D=Red-Vis.&filters%5B%5D=SG&filters%5B%5D=SI&filters%5B%5D=SR&filters%5B%5D=SU&filters%5B%5D=TB&filters%5B%5D=TG&filters%5B%5D=TR&filters%5B%5D=U&filters%5B%5D=V&filters%5B%5D=Vis.
+[Sun Apr 5 09:05:00 2026] 127.0.0.1:52221 Closing
+[Sun Apr 5 09:05:00 2026] 127.0.0.1:51545 Accepted
+[Sun Apr 5 09:05:00 2026] 127.0.0.1:51545 [200]: GET /css/style.css
+[Sun Apr 5 09:05:00 2026] 127.0.0.1:51545 Closing
+[Sun Apr 5 09:05:00 2026] 127.0.0.1:57177 Accepted
+[Sun Apr 5 09:05:00 2026] 127.0.0.1:51353 Accepted
+[Sun Apr 5 09:05:00 2026] 127.0.0.1:57177 [200]: GET /images/star16x16.png
+[Sun Apr 5 09:05:00 2026] 127.0.0.1:51353 [200]: GET /images/star16x16_rays.png
+[Sun Apr 5 09:05:00 2026] 127.0.0.1:57177 Closing
+[Sun Apr 5 09:05:00 2026] 127.0.0.1:51353 Closing
+[Sun Apr 5 09:05:01 2026] 127.0.0.1:64241 Accepted
+[Sun Apr 5 09:05:01 2026] 127.0.0.1:64241 [200]: GET /favicon.ico
+[Sun Apr 5 09:05:01 2026] 127.0.0.1:64241 Closing
+[Sun Apr 5 09:05:01 2026] 127.0.0.1:50264 Accepted
+[Sun Apr 5 09:06:21 2026] 127.0.0.1:50264 Closed without sending a request; it was probably just an unused speculative preconnection
+[Sun Apr 5 09:06:21 2026] 127.0.0.1:50264 Closing
+[Sun Apr 5 09:06:21 2026] 127.0.0.1:58191 Accepted
+[Sun Apr 5 09:06:21 2026] 127.0.0.1:58191 [200]: GET /tcrb_lightcurve.php?filters%5B%5D=B
+[Sun Apr 5 09:06:21 2026] 127.0.0.1:58191 Closing
+[Sun Apr 5 09:06:21 2026] 127.0.0.1:63650 Accepted
+[Sun Apr 5 09:06:21 2026] 127.0.0.1:63650 [200]: GET /css/style.css
+[Sun Apr 5 09:06:21 2026] 127.0.0.1:63650 Closing
+[Sun Apr 5 09:06:22 2026] 127.0.0.1:64805 Accepted
+[Sun Apr 5 09:06:22 2026] 127.0.0.1:64244 Accepted
+[Sun Apr 5 09:06:22 2026] 127.0.0.1:64805 [200]: GET /images/star16x16.png
+[Sun Apr 5 09:06:22 2026] 127.0.0.1:64244 [200]: GET /images/star16x16_rays.png
+[Sun Apr 5 09:06:22 2026] 127.0.0.1:64805 Closing
+[Sun Apr 5 09:06:22 2026] 127.0.0.1:64244 Closing
+[Sun Apr 5 09:06:22 2026] 127.0.0.1:63043 Accepted
+[Sun Apr 5 09:06:23 2026] 127.0.0.1:63043 [200]: GET /favicon.ico
+[Sun Apr 5 09:06:23 2026] 127.0.0.1:63043 Closing
+[Sun Apr 5 09:06:23 2026] 127.0.0.1:56378 Accepted
+[Sun Apr 5 09:06:32 2026] 127.0.0.1:56378 [200]: GET /tcrb_lightcurve.php?filters%5B%5D=B&filters%5B%5D=V
+[Sun Apr 5 09:06:32 2026] 127.0.0.1:56378 Closing
+[Sun Apr 5 09:06:33 2026] 127.0.0.1:55344 Accepted
+[Sun Apr 5 09:06:33 2026] 127.0.0.1:55344 [200]: GET /css/style.css
+[Sun Apr 5 09:06:33 2026] 127.0.0.1:55344 Closing
+[Sun Apr 5 09:06:33 2026] 127.0.0.1:62793 Accepted
+[Sun Apr 5 09:06:33 2026] 127.0.0.1:50086 Accepted
+[Sun Apr 5 09:06:33 2026] 127.0.0.1:62793 [200]: GET /images/star16x16.png
+[Sun Apr 5 09:06:33 2026] 127.0.0.1:50086 [200]: GET /images/star16x16_rays.png
+[Sun Apr 5 09:06:33 2026] 127.0.0.1:62793 Closing
+[Sun Apr 5 09:06:33 2026] 127.0.0.1:50086 Closing
+[Sun Apr 5 09:06:33 2026] 127.0.0.1:53067 Accepted
+[Sun Apr 5 09:06:34 2026] 127.0.0.1:53067 [200]: GET /favicon.ico
+[Sun Apr 5 09:06:34 2026] 127.0.0.1:53067 Closing
+[Sun Apr 5 09:06:34 2026] 127.0.0.1:64617 Accepted
+[Sun Apr 5 09:06:51 2026] 127.0.0.1:64617 [200]: GET /tcrb_lightcurve.php?filters%5B%5D=B&filters%5B%5D=V
+[Sun Apr 5 09:06:51 2026] 127.0.0.1:64617 Closing
+[Sun Apr 5 09:06:52 2026] 127.0.0.1:56300 Accepted
+[Sun Apr 5 09:06:52 2026] 127.0.0.1:56300 [200]: GET /css/style.css
+[Sun Apr 5 09:06:52 2026] 127.0.0.1:56300 Closing
+[Sun Apr 5 09:06:52 2026] 127.0.0.1:56087 Accepted
+[Sun Apr 5 09:06:52 2026] 127.0.0.1:61670 Accepted
+[Sun Apr 5 09:06:52 2026] 127.0.0.1:56087 [200]: GET /images/star16x16.png
+[Sun Apr 5 09:06:52 2026] 127.0.0.1:61670 [200]: GET /images/star16x16_rays.png
+[Sun Apr 5 09:06:52 2026] 127.0.0.1:56087 Closing
+[Sun Apr 5 09:06:52 2026] 127.0.0.1:61670 Closing
+[Sun Apr 5 09:06:52 2026] 127.0.0.1:50474 Accepted
+[Sun Apr 5 09:06:53 2026] 127.0.0.1:50474 [200]: GET /favicon.ico
+[Sun Apr 5 09:06:53 2026] 127.0.0.1:50474 Closing
+[Sun Apr 5 09:06:53 2026] 127.0.0.1:57647 Accepted
+[Sun Apr 5 09:07:15 2026] 127.0.0.1:57647 [200]: GET /tcrb_lightcurve.php?filters%5B%5D=B&filters%5B%5D=V
+[Sun Apr 5 09:07:15 2026] 127.0.0.1:57647 Closing
+[Sun Apr 5 09:07:15 2026] 127.0.0.1:50671 Accepted
+[Sun Apr 5 09:07:15 2026] 127.0.0.1:50671 [200]: GET /css/style.css
+[Sun Apr 5 09:07:15 2026] 127.0.0.1:50671 Closing
+[Sun Apr 5 09:07:15 2026] 127.0.0.1:63305 Accepted
+[Sun Apr 5 09:07:15 2026] 127.0.0.1:63305 [200]: GET /images/star16x16.png
+[Sun Apr 5 09:07:15 2026] 127.0.0.1:63305 Closing
+[Sun Apr 5 09:07:15 2026] 127.0.0.1:63643 Accepted
+[Sun Apr 5 09:07:15 2026] 127.0.0.1:60051 Accepted
+[Sun Apr 5 09:07:15 2026] 127.0.0.1:63643 [200]: GET /images/star16x16_rays.png
+[Sun Apr 5 09:07:15 2026] 127.0.0.1:63643 Closing
+[Sun Apr 5 09:07:16 2026] 127.0.0.1:60051 [200]: GET /favicon.ico
+[Sun Apr 5 09:07:16 2026] 127.0.0.1:60051 Closing
+[Sun Apr 5 09:07:26 2026] 127.0.0.1:60054 Accepted
+[Sun Apr 5 09:07:27 2026] 127.0.0.1:60054 [200]: GET /tcrb_lightcurve.php
+[Sun Apr 5 09:07:28 2026] 127.0.0.1:60054 Closing
+[Sun Apr 5 09:07:32 2026] 127.0.0.1:64959 Accepted
+[Sun Apr 5 09:07:33 2026] 127.0.0.1:64959 [200]: GET /tcrb_lightcurve.php?filters%5B%5D=B&filters%5B%5D=V
+[Sun Apr 5 09:07:33 2026] 127.0.0.1:64959 Closing
+[Sun Apr 5 09:07:33 2026] 127.0.0.1:52027 Accepted
+[Sun Apr 5 09:07:33 2026] 127.0.0.1:52027 [200]: GET /css/style.css
+[Sun Apr 5 09:07:33 2026] 127.0.0.1:52027 Closing
+[Sun Apr 5 09:07:33 2026] 127.0.0.1:63633 Accepted
+[Sun Apr 5 09:07:33 2026] 127.0.0.1:57816 Accepted
+[Sun Apr 5 09:07:33 2026] 127.0.0.1:63633 [200]: GET /images/star16x16.png
+[Sun Apr 5 09:07:33 2026] 127.0.0.1:57816 [200]: GET /images/star16x16_rays.png
+[Sun Apr 5 09:07:33 2026] 127.0.0.1:63633 Closing
+[Sun Apr 5 09:07:33 2026] 127.0.0.1:57816 Closing
+[Sun Apr 5 09:07:33 2026] 127.0.0.1:64706 Accepted
+[Sun Apr 5 09:07:34 2026] 127.0.0.1:64706 [200]: GET /favicon.ico
+[Sun Apr 5 09:07:34 2026] 127.0.0.1:64706 Closing
+[Sun Apr 5 09:07:34 2026] 127.0.0.1:57213 Accepted
+[Sun Apr 5 09:08:22 2026] 127.0.0.1:57222 Accepted
+[Sun Apr 5 09:08:22 2026] 127.0.0.1:57222 [200]: GET /tcrb_lightcurve.php
+[Sun Apr 5 09:08:23 2026] 127.0.0.1:57222 Closing
+[Sun Apr 5 09:08:53 2026] 127.0.0.1:57213 Closed without sending a request; it was probably just an unused speculative preconnection
+[Sun Apr 5 09:08:53 2026] 127.0.0.1:57213 Closing
+[Sun Apr 5 09:08:53 2026] 127.0.0.1:50203 Accepted
+[Sun Apr 5 09:08:54 2026] 127.0.0.1:50203 [200]: GET /tcrb_lightcurve.php?filters%5B%5D=B&filters%5B%5D=V
+[Sun Apr 5 09:08:54 2026] 127.0.0.1:50203 Closing
+[Sun Apr 5 09:08:54 2026] 127.0.0.1:50103 Accepted
+[Sun Apr 5 09:08:54 2026] 127.0.0.1:50103 [200]: GET /css/style.css
+[Sun Apr 5 09:08:54 2026] 127.0.0.1:50103 Closing
+[Sun Apr 5 09:08:54 2026] 127.0.0.1:61966 Accepted
+[Sun Apr 5 09:08:54 2026] 127.0.0.1:56961 Accepted
+[Sun Apr 5 09:08:54 2026] 127.0.0.1:61966 [200]: GET /images/star16x16.png
+[Sun Apr 5 09:08:54 2026] 127.0.0.1:56961 [200]: GET /images/star16x16_rays.png
+[Sun Apr 5 09:08:54 2026] 127.0.0.1:61966 Closing
+[Sun Apr 5 09:08:54 2026] 127.0.0.1:56961 Closing
+[Sun Apr 5 09:08:54 2026] 127.0.0.1:61750 Accepted
+[Sun Apr 5 09:08:55 2026] 127.0.0.1:61750 [200]: GET /favicon.ico
+[Sun Apr 5 09:08:55 2026] 127.0.0.1:61750 Closing
+[Sun Apr 5 09:08:55 2026] 127.0.0.1:65247 Accepted
+[Sun Apr 5 09:09:04 2026] 127.0.0.1:65247 [200]: GET /tcrb_lightcurve.php?filters%5B%5D=B
+[Sun Apr 5 09:09:04 2026] 127.0.0.1:65247 Closing
+[Sun Apr 5 09:09:04 2026] 127.0.0.1:62953 Accepted
+[Sun Apr 5 09:09:04 2026] 127.0.0.1:62953 [200]: GET /css/style.css
+[Sun Apr 5 09:09:04 2026] 127.0.0.1:62953 Closing
+[Sun Apr 5 09:09:04 2026] 127.0.0.1:59789 Accepted
+[Sun Apr 5 09:09:04 2026] 127.0.0.1:59789 [200]: GET /images/star16x16.png
+[Sun Apr 5 09:09:04 2026] 127.0.0.1:59789 Closing
+[Sun Apr 5 09:09:04 2026] 127.0.0.1:55683 Accepted
+[Sun Apr 5 09:09:04 2026] 127.0.0.1:55310 Accepted
+[Sun Apr 5 09:09:04 2026] 127.0.0.1:55683 [200]: GET /images/star16x16_rays.png
+[Sun Apr 5 09:09:04 2026] 127.0.0.1:55683 Closing
+[Sun Apr 5 09:09:05 2026] 127.0.0.1:55310 [200]: GET /favicon.ico
+[Sun Apr 5 09:09:05 2026] 127.0.0.1:55310 Closing
+[Sun Apr 5 09:12:33 2026] 127.0.0.1:50465 Accepted
+[Sun Apr 5 09:12:33 2026] 127.0.0.1:50465 [200]: GET /tcrb_lightcurve.php?filters%5B%5D=B
+[Sun Apr 5 09:12:33 2026] 127.0.0.1:50465 Closing
+[Sun Apr 5 09:12:33 2026] 127.0.0.1:62337 Accepted
+[Sun Apr 5 09:12:33 2026] 127.0.0.1:62337 [200]: GET /css/style.css
+[Sun Apr 5 09:12:33 2026] 127.0.0.1:62337 Closing
+[Sun Apr 5 09:12:33 2026] 127.0.0.1:62888 Accepted
+[Sun Apr 5 09:12:33 2026] 127.0.0.1:53230 Accepted
+[Sun Apr 5 09:12:33 2026] 127.0.0.1:62888 [200]: GET /images/star16x16.png
+[Sun Apr 5 09:12:33 2026] 127.0.0.1:53230 [200]: GET /images/star16x16_rays.png
+[Sun Apr 5 09:12:33 2026] 127.0.0.1:62888 Closing
+[Sun Apr 5 09:12:33 2026] 127.0.0.1:53230 Closing
+[Sun Apr 5 09:12:34 2026] 127.0.0.1:50620 Accepted
+[Sun Apr 5 09:12:34 2026] 127.0.0.1:50620 [200]: GET /favicon.ico
+[Sun Apr 5 09:12:34 2026] 127.0.0.1:50620 Closing
+[Sun Apr 5 09:12:34 2026] 127.0.0.1:58601 Accepted
+[Sun Apr 5 09:13:55 2026] 127.0.0.1:58601 Closed without sending a request; it was probably just an unused speculative preconnection
+[Sun Apr 5 09:13:55 2026] 127.0.0.1:58601 Closing
+[Sun Apr 5 09:14:02 2026] 127.0.0.1:58126 Accepted
+[Sun Apr 5 09:14:02 2026] 127.0.0.1:58126 [200]: GET /tcrb_lightcurve.php
+[Sun Apr 5 09:14:03 2026] 127.0.0.1:58126 Closing
+[Sun Apr 5 09:16:48 2026] 127.0.0.1:56884 Accepted
+[Sun Apr 5 09:16:48 2026] 127.0.0.1:56884 [200]: GET /tcrb_lightcurve.php?filters%5B%5D=B
+[Sun Apr 5 09:16:48 2026] 127.0.0.1:56884 Closing
+[Sun Apr 5 09:16:48 2026] 127.0.0.1:51727 Accepted
+[Sun Apr 5 09:16:48 2026] 127.0.0.1:51727 [200]: GET /css/style.css
+[Sun Apr 5 09:16:48 2026] 127.0.0.1:51727 Closing
+[Sun Apr 5 09:16:49 2026] 127.0.0.1:61828 Accepted
+[Sun Apr 5 09:16:49 2026] 127.0.0.1:60727 Accepted
+[Sun Apr 5 09:16:49 2026] 127.0.0.1:61828 [200]: GET /images/star16x16.png
+[Sun Apr 5 09:16:49 2026] 127.0.0.1:60727 [200]: GET /images/star16x16_rays.png
+[Sun Apr 5 09:16:49 2026] 127.0.0.1:61828 Closing
+[Sun Apr 5 09:16:49 2026] 127.0.0.1:60727 Closing
+[Sun Apr 5 09:16:49 2026] 127.0.0.1:51536 Accepted
+[Sun Apr 5 09:16:50 2026] 127.0.0.1:51536 [200]: GET /favicon.ico
+[Sun Apr 5 09:16:50 2026] 127.0.0.1:51536 Closing
+[Sun Apr 5 09:16:50 2026] 127.0.0.1:58994 Accepted
+[Sun Apr 5 09:17:36 2026] 127.0.0.1:58994 [200]: GET /tcrb_lightcurve.php?filters%5B%5D=B&filters%5B%5D=V
+[Sun Apr 5 09:17:36 2026] 127.0.0.1:58994 Closing
+[Sun Apr 5 09:17:36 2026] 127.0.0.1:65289 Accepted
+[Sun Apr 5 09:17:36 2026] 127.0.0.1:65289 [200]: GET /css/style.css
+[Sun Apr 5 09:17:36 2026] 127.0.0.1:65289 Closing
+[Sun Apr 5 09:17:37 2026] 127.0.0.1:54338 Accepted
+[Sun Apr 5 09:17:37 2026] 127.0.0.1:54338 [200]: GET /images/star16x16.png
+[Sun Apr 5 09:17:37 2026] 127.0.0.1:54338 Closing
+[Sun Apr 5 09:17:37 2026] 127.0.0.1:62997 Accepted
+[Sun Apr 5 09:17:37 2026] 127.0.0.1:51304 Accepted
+[Sun Apr 5 09:17:37 2026] 127.0.0.1:62997 [200]: GET /images/star16x16_rays.png
+[Sun Apr 5 09:17:37 2026] 127.0.0.1:62997 Closing
+[Sun Apr 5 09:17:38 2026] 127.0.0.1:51304 [200]: GET /favicon.ico
+[Sun Apr 5 09:17:38 2026] 127.0.0.1:51304 Closing
+[Sun Apr 5 09:18:21 2026] 127.0.0.1:49914 Accepted
+[Sun Apr 5 09:18:21 2026] 127.0.0.1:49914 [200]: GET /tcrb_lightcurve.php?filters%5B%5D=V&filters%5B%5D=Vis.
+[Sun Apr 5 09:18:21 2026] 127.0.0.1:49914 Closing
+[Sun Apr 5 09:18:21 2026] 127.0.0.1:51379 Accepted
+[Sun Apr 5 09:18:21 2026] 127.0.0.1:51379 [200]: GET /css/style.css
+[Sun Apr 5 09:18:21 2026] 127.0.0.1:51379 Closing
+[Sun Apr 5 09:18:21 2026] 127.0.0.1:53012 Accepted
+[Sun Apr 5 09:18:21 2026] 127.0.0.1:64244 Accepted
+[Sun Apr 5 09:18:21 2026] 127.0.0.1:53012 [200]: GET /images/star16x16.png
+[Sun Apr 5 09:18:21 2026] 127.0.0.1:64244 [200]: GET /images/star16x16_rays.png
+[Sun Apr 5 09:18:21 2026] 127.0.0.1:53012 Closing
+[Sun Apr 5 09:18:21 2026] 127.0.0.1:64244 Closing
+[Sun Apr 5 09:18:21 2026] 127.0.0.1:59012 Accepted
+[Sun Apr 5 09:18:22 2026] 127.0.0.1:59012 [200]: GET /favicon.ico
+[Sun Apr 5 09:18:22 2026] 127.0.0.1:59012 Closing
+[Sun Apr 5 09:18:22 2026] 127.0.0.1:49511 Accepted
+[Sun Apr 5 09:18:34 2026] 127.0.0.1:49511 [200]: GET /tcrb_lightcurve.php?filters%5B%5D=V
+[Sun Apr 5 09:18:34 2026] 127.0.0.1:49511 Closing
+[Sun Apr 5 09:18:34 2026] 127.0.0.1:53689 Accepted
+[Sun Apr 5 09:18:34 2026] 127.0.0.1:53689 [200]: GET /css/style.css
+[Sun Apr 5 09:18:34 2026] 127.0.0.1:53689 Closing
+[Sun Apr 5 09:18:35 2026] 127.0.0.1:53724 Accepted
+[Sun Apr 5 09:18:35 2026] 127.0.0.1:53724 [200]: GET /images/star16x16.png
+[Sun Apr 5 09:18:35 2026] 127.0.0.1:53724 Closing
+[Sun Apr 5 09:18:35 2026] 127.0.0.1:57912 Accepted
+[Sun Apr 5 09:18:35 2026] 127.0.0.1:54204 Accepted
+[Sun Apr 5 09:18:35 2026] 127.0.0.1:57912 [200]: GET /images/star16x16_rays.png
+[Sun Apr 5 09:18:35 2026] 127.0.0.1:57912 Closing
+[Sun Apr 5 09:18:36 2026] 127.0.0.1:54204 [200]: GET /favicon.ico
+[Sun Apr 5 09:18:36 2026] 127.0.0.1:54204 Closing
+[Sun Apr 5 09:19:09 2026] 127.0.0.1:60535 Accepted
+[Sun Apr 5 09:19:09 2026] 127.0.0.1:60535 [200]: GET /tcrb_lightcurve.php?filters%5B%5D=CV&filters%5B%5D=V
+[Sun Apr 5 09:19:09 2026] 127.0.0.1:60535 Closing
+[Sun Apr 5 09:19:09 2026] 127.0.0.1:55329 Accepted
+[Sun Apr 5 09:19:09 2026] 127.0.0.1:55329 [200]: GET /css/style.css
+[Sun Apr 5 09:19:09 2026] 127.0.0.1:55329 Closing
+[Sun Apr 5 09:19:09 2026] 127.0.0.1:56639 Accepted
+[Sun Apr 5 09:19:09 2026] 127.0.0.1:61824 Accepted
+[Sun Apr 5 09:19:09 2026] 127.0.0.1:56639 [200]: GET /images/star16x16.png
+[Sun Apr 5 09:19:09 2026] 127.0.0.1:61824 [200]: GET /images/star16x16_rays.png
+[Sun Apr 5 09:19:09 2026] 127.0.0.1:56639 Closing
+[Sun Apr 5 09:19:09 2026] 127.0.0.1:61824 Closing
+[Sun Apr 5 09:19:10 2026] 127.0.0.1:61125 Accepted
+[Sun Apr 5 09:19:10 2026] 127.0.0.1:61125 [200]: GET /favicon.ico
+[Sun Apr 5 09:19:10 2026] 127.0.0.1:61125 Closing
+[Sun Apr 5 09:19:10 2026] 127.0.0.1:52409 Accepted
+[Sun Apr 5 09:19:19 2026] 127.0.0.1:52409 [200]: GET /tcrb_lightcurve.php?filters%5B%5D=R&filters%5B%5D=V
+[Sun Apr 5 09:19:19 2026] 127.0.0.1:52409 Closing
+[Sun Apr 5 09:19:19 2026] 127.0.0.1:64933 Accepted
+[Sun Apr 5 09:19:19 2026] 127.0.0.1:64933 [200]: GET /css/style.css
+[Sun Apr 5 09:19:19 2026] 127.0.0.1:64933 Closing
+[Sun Apr 5 09:19:19 2026] 127.0.0.1:54659 Accepted
+[Sun Apr 5 09:19:19 2026] 127.0.0.1:54659 [200]: GET /images/star16x16.png
+[Sun Apr 5 09:19:19 2026] 127.0.0.1:54659 Closing
+[Sun Apr 5 09:19:19 2026] 127.0.0.1:56306 Accepted
+[Sun Apr 5 09:19:19 2026] 127.0.0.1:59001 Accepted
+[Sun Apr 5 09:19:19 2026] 127.0.0.1:56306 [200]: GET /images/star16x16_rays.png
+[Sun Apr 5 09:19:19 2026] 127.0.0.1:56306 Closing
+[Sun Apr 5 09:19:20 2026] 127.0.0.1:59001 [200]: GET /favicon.ico
+[Sun Apr 5 09:19:20 2026] 127.0.0.1:59001 Closing
+[Sun Apr 5 09:19:28 2026] 127.0.0.1:51610 Accepted
+[Sun Apr 5 09:19:28 2026] 127.0.0.1:51610 [200]: GET /tcrb_lightcurve.php?filters%5B%5D=SU&filters%5B%5D=V
+[Sun Apr 5 09:19:28 2026] 127.0.0.1:51610 Closing
+[Sun Apr 5 09:19:28 2026] 127.0.0.1:58168 Accepted
+[Sun Apr 5 09:19:28 2026] 127.0.0.1:58168 [200]: GET /css/style.css
+[Sun Apr 5 09:19:28 2026] 127.0.0.1:58168 Closing
+[Sun Apr 5 09:19:28 2026] 127.0.0.1:59299 Accepted
+[Sun Apr 5 09:19:28 2026] 127.0.0.1:57058 Accepted
+[Sun Apr 5 09:19:28 2026] 127.0.0.1:59299 [200]: GET /images/star16x16.png
+[Sun Apr 5 09:19:28 2026] 127.0.0.1:57058 [200]: GET /images/star16x16_rays.png
+[Sun Apr 5 09:19:28 2026] 127.0.0.1:59299 Closing
+[Sun Apr 5 09:19:28 2026] 127.0.0.1:57058 Closing
+[Sun Apr 5 09:19:28 2026] 127.0.0.1:51123 Accepted
+[Sun Apr 5 09:19:30 2026] 127.0.0.1:51123 [200]: GET /favicon.ico
+[Sun Apr 5 09:19:30 2026] 127.0.0.1:51123 Closing
+[Sun Apr 5 09:19:30 2026] 127.0.0.1:58163 Accepted
+[Sun Apr 5 09:19:43 2026] 127.0.0.1:58163 [200]: GET /tcrb_lightcurve.php?
+[Sun Apr 5 09:19:43 2026] 127.0.0.1:58163 Closing
+[Sun Apr 5 09:19:43 2026] 127.0.0.1:63431 Accepted
+[Sun Apr 5 09:19:43 2026] 127.0.0.1:63431 [200]: GET /css/style.css
+[Sun Apr 5 09:19:43 2026] 127.0.0.1:63431 Closing
+[Sun Apr 5 09:19:43 2026] 127.0.0.1:63810 Accepted
+[Sun Apr 5 09:19:43 2026] 127.0.0.1:49861 Accepted
+[Sun Apr 5 09:19:43 2026] 127.0.0.1:63810 [200]: GET /images/star16x16.png
+[Sun Apr 5 09:19:43 2026] 127.0.0.1:63810 Closing
+[Sun Apr 5 09:19:43 2026] 127.0.0.1:49861 [200]: GET /images/star16x16_rays.png
+[Sun Apr 5 09:19:43 2026] 127.0.0.1:49861 Closing
+[Sun Apr 5 09:19:44 2026] 127.0.0.1:55189 Accepted
+[Sun Apr 5 09:19:45 2026] 127.0.0.1:55189 [200]: GET /favicon.ico
+[Sun Apr 5 09:19:45 2026] 127.0.0.1:55189 Closing
+[Sun Apr 5 09:20:52 2026] 127.0.0.1:59913 Accepted
+[Sun Apr 5 09:20:52 2026] 127.0.0.1:59913 [200]: GET /tcrb_lightcurve.php?filters%5B%5D=V
+[Sun Apr 5 09:20:52 2026] 127.0.0.1:59913 Closing
+[Sun Apr 5 09:20:52 2026] 127.0.0.1:62258 Accepted
+[Sun Apr 5 09:20:52 2026] 127.0.0.1:62258 [200]: GET /css/style.css
+[Sun Apr 5 09:20:52 2026] 127.0.0.1:62258 Closing
+[Sun Apr 5 09:20:53 2026] 127.0.0.1:58865 Accepted
+[Sun Apr 5 09:20:53 2026] 127.0.0.1:55357 Accepted
+[Sun Apr 5 09:20:53 2026] 127.0.0.1:58865 [200]: GET /images/star16x16.png
+[Sun Apr 5 09:20:53 2026] 127.0.0.1:55357 [200]: GET /images/star16x16_rays.png
+[Sun Apr 5 09:20:53 2026] 127.0.0.1:58865 Closing
+[Sun Apr 5 09:20:53 2026] 127.0.0.1:55357 Closing
+[Sun Apr 5 09:20:53 2026] 127.0.0.1:53823 Accepted
+[Sun Apr 5 09:20:54 2026] 127.0.0.1:53823 [200]: GET /favicon.ico
+[Sun Apr 5 09:20:54 2026] 127.0.0.1:53823 Closing
+[Sun Apr 5 09:20:54 2026] 127.0.0.1:49851 Accepted
+[Sun Apr 5 09:21:56 2026] 127.0.0.1:49851 Closed without sending a request; it was probably just an unused speculative preconnection
+[Sun Apr 5 09:21:56 2026] 127.0.0.1:49851 Closing
+[Sun Apr 5 09:25:02 2026] 127.0.0.1:51369 Accepted
+[Sun Apr 5 09:25:03 2026] 127.0.0.1:51369 [200]: GET /tcrb_lightcurve.php
+[Sun Apr 5 09:25:03 2026] 127.0.0.1:51369 Closing
+[Sun Apr 5 09:28:00 2026] 127.0.0.1:52013 Accepted
+[Sun Apr 5 09:28:01 2026] 127.0.0.1:52013 [200]: GET /tcrb_lightcurve.php
+[Sun Apr 5 09:28:01 2026] 127.0.0.1:52013 Closing
+[Sun Apr 5 09:28:01 2026] 127.0.0.1:63106 Accepted
+[Sun Apr 5 09:28:01 2026] 127.0.0.1:63106 [200]: GET /css/style.css
+[Sun Apr 5 09:28:01 2026] 127.0.0.1:63106 Closing
+[Sun Apr 5 09:28:01 2026] 127.0.0.1:55381 Accepted
+[Sun Apr 5 09:28:01 2026] 127.0.0.1:53886 Accepted
+[Sun Apr 5 09:28:01 2026] 127.0.0.1:55381 [200]: GET /images/star16x16.png
+[Sun Apr 5 09:28:01 2026] 127.0.0.1:53886 [200]: GET /images/star16x16_rays.png
+[Sun Apr 5 09:28:01 2026] 127.0.0.1:55381 Closing
+[Sun Apr 5 09:28:01 2026] 127.0.0.1:53886 Closing
+[Sun Apr 5 09:28:01 2026] 127.0.0.1:53593 Accepted
+[Sun Apr 5 09:28:04 2026] 127.0.0.1:53593 [200]: GET /favicon.ico
+[Sun Apr 5 09:28:04 2026] 127.0.0.1:53593 Closing
+[Sun Apr 5 09:28:28 2026] 127.0.0.1:63663 Accepted
+[Sun Apr 5 09:28:28 2026] 127.0.0.1:63663 [200]: GET /tcrb_lightcurve.php?filters%5B%5D=I&filters%5B%5D=R&filters%5B%5D=V
+[Sun Apr 5 09:28:28 2026] 127.0.0.1:63663 Closing
+[Sun Apr 5 09:28:28 2026] 127.0.0.1:61074 Accepted
+[Sun Apr 5 09:28:28 2026] 127.0.0.1:61074 [200]: GET /css/style.css
+[Sun Apr 5 09:28:28 2026] 127.0.0.1:61074 Closing
+[Sun Apr 5 09:28:29 2026] 127.0.0.1:63330 Accepted
+[Sun Apr 5 09:28:29 2026] 127.0.0.1:65079 Accepted
+[Sun Apr 5 09:28:29 2026] 127.0.0.1:63330 [200]: GET /images/star16x16.png
+[Sun Apr 5 09:28:29 2026] 127.0.0.1:65079 [200]: GET /images/star16x16_rays.png
+[Sun Apr 5 09:28:29 2026] 127.0.0.1:63330 Closing
+[Sun Apr 5 09:28:29 2026] 127.0.0.1:65079 Closing
+[Sun Apr 5 09:28:29 2026] 127.0.0.1:64619 Accepted
+[Sun Apr 5 09:28:30 2026] 127.0.0.1:64619 [200]: GET /favicon.ico
+[Sun Apr 5 09:28:30 2026] 127.0.0.1:64619 Closing
+[Sun Apr 5 09:28:30 2026] 127.0.0.1:51060 Accepted
+[Sun Apr 5 09:28:34 2026] 127.0.0.1:51060 [200]: GET /tcrb_lightcurve.php?filters%5B%5D=V
+[Sun Apr 5 09:28:34 2026] 127.0.0.1:51060 Closing
+[Sun Apr 5 09:28:34 2026] 127.0.0.1:49882 Accepted
+[Sun Apr 5 09:28:34 2026] 127.0.0.1:49882 [200]: GET /css/style.css
+[Sun Apr 5 09:28:34 2026] 127.0.0.1:49882 Closing
+[Sun Apr 5 09:28:34 2026] 127.0.0.1:57884 Accepted
+[Sun Apr 5 09:28:34 2026] 127.0.0.1:57884 [200]: GET /images/star16x16.png
+[Sun Apr 5 09:28:34 2026] 127.0.0.1:57884 Closing
+[Sun Apr 5 09:28:34 2026] 127.0.0.1:54484 Accepted
+[Sun Apr 5 09:28:34 2026] 127.0.0.1:60639 Accepted
+[Sun Apr 5 09:28:34 2026] 127.0.0.1:54484 [200]: GET /images/star16x16_rays.png
+[Sun Apr 5 09:28:34 2026] 127.0.0.1:54484 Closing
+[Sun Apr 5 09:28:36 2026] 127.0.0.1:60639 [200]: GET /favicon.ico
+[Sun Apr 5 09:28:36 2026] 127.0.0.1:60639 Closing
+[Sun Apr 5 09:30:04 2026] 127.0.0.1:50224 Accepted
+[Sun Apr 5 09:30:04 2026] 127.0.0.1:50224 [200]: GET /tcrb_lightcurve.php
+[Sun Apr 5 09:30:04 2026] 127.0.0.1:50224 Closing
+[Sun Apr 5 09:31:20 2026] 127.0.0.1:51175 Accepted
+[Sun Apr 5 09:31:21 2026] 127.0.0.1:51175 [200]: GET /tcrb_lightcurve.php
+[Sun Apr 5 09:31:21 2026] 127.0.0.1:51175 Closing
+[Sun Apr 5 09:31:21 2026] 127.0.0.1:58982 Accepted
+[Sun Apr 5 09:31:21 2026] 127.0.0.1:58982 [200]: GET /css/style.css
+[Sun Apr 5 09:31:21 2026] 127.0.0.1:58982 Closing
+[Sun Apr 5 09:31:21 2026] 127.0.0.1:61557 Accepted
+[Sun Apr 5 09:31:21 2026] 127.0.0.1:58924 Accepted
+[Sun Apr 5 09:31:21 2026] 127.0.0.1:61557 [200]: GET /images/star16x16.png
+[Sun Apr 5 09:31:21 2026] 127.0.0.1:58924 [200]: GET /images/star16x16_rays.png
+[Sun Apr 5 09:31:21 2026] 127.0.0.1:61557 Closing
+[Sun Apr 5 09:31:21 2026] 127.0.0.1:58924 Closing
+[Sun Apr 5 09:31:21 2026] 127.0.0.1:57822 Accepted
+[Sun Apr 5 09:31:22 2026] 127.0.0.1:57822 [200]: GET /favicon.ico
+[Sun Apr 5 09:31:22 2026] 127.0.0.1:57822 Closing
+[Sun Apr 5 09:31:22 2026] 127.0.0.1:64591 Accepted
+[Sun Apr 5 09:31:37 2026] 127.0.0.1:64591 [200]: GET /tcrb_lightcurve.php?filters%5B%5D=B&filters%5B%5D=V
+[Sun Apr 5 09:31:37 2026] 127.0.0.1:64591 Closing
+[Sun Apr 5 09:31:37 2026] 127.0.0.1:62566 Accepted
+[Sun Apr 5 09:31:37 2026] 127.0.0.1:62566 [200]: GET /css/style.css
+[Sun Apr 5 09:31:37 2026] 127.0.0.1:62566 Closing
+[Sun Apr 5 09:31:38 2026] 127.0.0.1:62905 Accepted
+[Sun Apr 5 09:31:38 2026] 127.0.0.1:62905 [200]: GET /images/star16x16.png
+[Sun Apr 5 09:31:38 2026] 127.0.0.1:62905 Closing
+[Sun Apr 5 09:31:38 2026] 127.0.0.1:61446 Accepted
+[Sun Apr 5 09:31:38 2026] 127.0.0.1:58223 Accepted
+[Sun Apr 5 09:31:38 2026] 127.0.0.1:61446 [200]: GET /images/star16x16_rays.png
+[Sun Apr 5 09:31:38 2026] 127.0.0.1:61446 Closing
+[Sun Apr 5 09:31:39 2026] 127.0.0.1:58223 [200]: GET /favicon.ico
+[Sun Apr 5 09:31:39 2026] 127.0.0.1:58223 Closing
+[Sun Apr 5 09:31:51 2026] 127.0.0.1:51105 Accepted
+[Sun Apr 5 09:31:51 2026] 127.0.0.1:51105 [200]: GET /tcrb_lightcurve.php?filters%5B%5D=V
+[Sun Apr 5 09:31:51 2026] 127.0.0.1:51105 Closing
+[Sun Apr 5 09:31:51 2026] 127.0.0.1:65141 Accepted
+[Sun Apr 5 09:31:51 2026] 127.0.0.1:65141 [200]: GET /css/style.css
+[Sun Apr 5 09:31:51 2026] 127.0.0.1:65141 Closing
+[Sun Apr 5 09:31:51 2026] 127.0.0.1:54456 Accepted
+[Sun Apr 5 09:31:51 2026] 127.0.0.1:62415 Accepted
+[Sun Apr 5 09:31:51 2026] 127.0.0.1:54456 [200]: GET /images/star16x16.png
+[Sun Apr 5 09:31:51 2026] 127.0.0.1:62415 [200]: GET /images/star16x16_rays.png
+[Sun Apr 5 09:31:51 2026] 127.0.0.1:54456 Closing
+[Sun Apr 5 09:31:51 2026] 127.0.0.1:62415 Closing
+[Sun Apr 5 09:31:51 2026] 127.0.0.1:58480 Accepted
+[Sun Apr 5 09:31:52 2026] 127.0.0.1:58480 [200]: GET /favicon.ico
+[Sun Apr 5 09:31:52 2026] 127.0.0.1:58480 Closing
+[Sun Apr 5 09:31:52 2026] 127.0.0.1:63903 Accepted
+[Sun Apr 5 09:32:56 2026] 127.0.0.1:63903 Closed without sending a request; it was probably just an unused speculative preconnection
+[Sun Apr 5 09:32:56 2026] 127.0.0.1:63903 Closing
diff --git a/php-server.log b/php-server.log
new file mode 100644
index 0000000..e69de29
diff --git a/public/header.php b/public/header.php
index 555a055..5f0303a 100644
--- a/public/header.php
+++ b/public/header.php
@@ -55,6 +55,7 @@ $menuGroups = [
['href' => 'moonphase.php', 'label' => 'Mondphase'],
['href' => 'index_py.php', 'label' => 'Sonne & Mond'],
['href' => 'planetensichtbarkeit.php', 'label' => 'Planetensichtbarkeit'],
+ ['href' => 'tcrb_lightcurve.php', 'label' => 'T CrB Lichtkurve'],
['href' => 'solarsystem.php', 'label' => 'Sonnensystem'],
['href' => 'jupitersystem.php', 'label' => 'Jupitersystem'],
['href' => 'tagbogen.php', 'label' => 'Tagbogen'],
diff --git a/public/tcrb_lightcurve.php b/public/tcrb_lightcurve.php
new file mode 100644
index 0000000..62f43d9
--- /dev/null
+++ b/public/tcrb_lightcurve.php
@@ -0,0 +1,554 @@
+ PDO::ERRMODE_EXCEPTION,
+ PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
+ ]
+);
+
+$loggedIn = isset($_SESSION['user_id']);
+$pageTitle = 'T CrB Lichtkurve';
+$headerIntroPre = 'Variabler Stern';
+$headerIntroTitle = 'T CrB Lichtkurve';
+$headerIntroSub = 'AAVSO-WebObs-Daten mit waehlbaren Filtern in einem gemeinsamen Plotly-Diagramm.';
+$errors = [];
+
+function h(?string $value): string
+{
+ return htmlspecialchars((string) $value, ENT_QUOTES, 'UTF-8');
+}
+
+$filterRows = $pdo->query("
+ SELECT `filter_code`, COUNT(*) AS `entry_count`
+ FROM `aavso_tcrb_observations`
+ WHERE `filter_code` IS NOT NULL
+ AND `filter_code` <> ''
+ GROUP BY `filter_code`
+ ORDER BY `filter_code` ASC
+")->fetchAll();
+
+$availableFilters = [];
+foreach ($filterRows as $filterRow) {
+ $filterCode = trim((string) ($filterRow['filter_code'] ?? ''));
+ if ($filterCode === '') {
+ continue;
+ }
+
+ $availableFilters[] = [
+ 'code' => $filterCode,
+ 'count' => (int) ($filterRow['entry_count'] ?? 0),
+ ];
+}
+
+$selectedFilters = array_values(array_unique(array_filter(array_map(
+ static fn ($value): string => trim((string) $value),
+ is_array($_GET['filters'] ?? null) ? $_GET['filters'] : []
+), static fn (string $value): bool => $value !== '')));
+
+if (empty($selectedFilters)) {
+ $selectedFilters = in_array('V', array_column($availableFilters, 'code'), true)
+ ? ['V']
+ : array_column($availableFilters, 'code');
+}
+
+$selectedFilters = array_values(array_intersect($selectedFilters, array_column($availableFilters, 'code')));
+
+if (empty($availableFilters)) {
+ $errors[] = 'In der Tabelle aavso_tcrb_observations sind noch keine T-CrB-Daten vorhanden.';
+}
+
+$observations = [];
+$summary = [
+ 'count' => 0,
+ 'min_utc' => null,
+ 'max_utc' => null,
+ 'min_mag' => null,
+ 'max_mag' => null,
+];
+
+if (empty($errors) && !empty($selectedFilters)) {
+ $placeholders = implode(',', array_fill(0, count($selectedFilters), '?'));
+ $stmt = $pdo->prepare("
+ SELECT
+ `observed_at_utc`,
+ `jd`,
+ `magnitude`,
+ `magnitude_error`,
+ `filter_code`,
+ `observer_code`,
+ `notes_raw`
+ FROM `aavso_tcrb_observations`
+ WHERE `filter_code` IN ({$placeholders})
+ ORDER BY `observed_at_utc` ASC, `jd` ASC
+ ");
+ $stmt->execute($selectedFilters);
+ $rows = $stmt->fetchAll();
+
+ foreach ($rows as $row) {
+ $observedAtUtc = (string) ($row['observed_at_utc'] ?? '');
+ $magnitude = isset($row['magnitude']) ? (float) $row['magnitude'] : null;
+ if ($observedAtUtc === '' || $magnitude === null) {
+ continue;
+ }
+
+ $observations[] = [
+ 'observed_at_utc' => $observedAtUtc,
+ 'jd' => isset($row['jd']) ? (float) $row['jd'] : null,
+ 'magnitude' => $magnitude,
+ 'magnitude_error' => $row['magnitude_error'] !== null ? (float) $row['magnitude_error'] : null,
+ 'filter_code' => (string) ($row['filter_code'] ?? ''),
+ 'observer_code' => (string) ($row['observer_code'] ?? ''),
+ 'notes_raw' => (string) ($row['notes_raw'] ?? ''),
+ ];
+
+ $summary['count']++;
+ $summary['min_utc'] = $summary['min_utc'] === null || $observedAtUtc < $summary['min_utc'] ? $observedAtUtc : $summary['min_utc'];
+ $summary['max_utc'] = $summary['max_utc'] === null || $observedAtUtc > $summary['max_utc'] ? $observedAtUtc : $summary['max_utc'];
+ $summary['min_mag'] = $summary['min_mag'] === null || $magnitude < $summary['min_mag'] ? $magnitude : $summary['min_mag'];
+ $summary['max_mag'] = $summary['max_mag'] === null || $magnitude > $summary['max_mag'] ? $magnitude : $summary['max_mag'];
+ }
+}
+
+if (empty($errors) && empty($observations)) {
+ $errors[] = 'Fuer die ausgewaehlten Filter wurden keine Daten gefunden.';
+}
+
+$filterPalette = [
+ 'U' => '#4c6ef5',
+ 'B' => '#1c7ed6',
+ 'V' => '#2b8a3e',
+ 'R' => '#c92a2a',
+ 'I' => '#862e9c',
+ 'CV' => '#495057',
+ 'TG' => '#0b7285',
+ 'TB' => '#364fc7',
+ 'TR' => '#d9480f',
+];
+
+$chartDatasets = [];
+foreach ($selectedFilters as $selectedFilter) {
+ $chartDatasets[$selectedFilter] = [
+ 'filter' => $selectedFilter,
+ 'color' => $filterPalette[$selectedFilter] ?? sprintf('#%06X', crc32($selectedFilter) & 0xFFFFFF),
+ 'points' => [],
+ ];
+}
+
+foreach ($observations as $observation) {
+ $filterCode = $observation['filter_code'];
+ if (!isset($chartDatasets[$filterCode])) {
+ continue;
+ }
+
+ $chartDatasets[$filterCode]['points'][] = $observation;
+}
+
+$chartDatasets = array_values(array_filter($chartDatasets, static fn (array $dataset): bool => !empty($dataset['points'])));
+
+$plotlyTraces = [];
+foreach ($chartDatasets as $dataset) {
+ $xValues = [];
+ $yValues = [];
+ $errorValues = [];
+ $customData = [];
+ $hasErrors = false;
+
+ foreach ($dataset['points'] as $point) {
+ $xValues[] = (string) $point['observed_at_utc'];
+ $yValues[] = (float) $point['magnitude'];
+ $errorValue = $point['magnitude_error'] !== null ? (float) $point['magnitude_error'] : 0.0;
+ $errorValues[] = $errorValue;
+ if ($errorValue > 0) {
+ $hasErrors = true;
+ }
+
+ $customData[] = [
+ $point['jd'],
+ $point['observer_code'] !== '' ? $point['observer_code'] : 'â',
+ $point['magnitude_error'] !== null ? number_format((float) $point['magnitude_error'], 3, '.', '') : 'â',
+ ];
+ }
+
+ $plotlyTraces[] = [
+ 'type' => 'scatter',
+ 'mode' => 'lines+markers',
+ 'name' => $dataset['filter'],
+ 'x' => $xValues,
+ 'y' => $yValues,
+ 'line' => [
+ 'color' => $dataset['color'],
+ 'width' => 2,
+ ],
+ 'marker' => [
+ 'color' => $dataset['color'],
+ 'size' => 7,
+ 'line' => [
+ 'color' => '#0f172a',
+ 'width' => 1,
+ ],
+ ],
+ 'error_y' => [
+ 'type' => 'data',
+ 'array' => $errorValues,
+ 'visible' => $hasErrors,
+ 'thickness' => 1.1,
+ 'width' => 3,
+ 'color' => $dataset['color'],
+ ],
+ 'customdata' => $customData,
+ 'hovertemplate' => 'Filter %{fullData.name}
'
+ . 'Magnitude %{y:.3f}
'
+ . 'Fehler %{customdata[2]}
'
+ . 'UTC %{x}
'
+ . 'JD %{customdata[0]}
'
+ . 'Observer %{customdata[1]}
'
+ . 'Magnitude %{y:.3f}
'
+ . 'UTC %{x}
'
+ . 'Fenster %{customdata[0]} Punkte