tkrebs / ep3-bs

Online booking system for courts
http://bs.hbsys.de/
MIT License
180 stars 108 forks source link

Tagesansicht auf ein Bildschirm #378

Open Bakati opened 4 years ago

Bakati commented 4 years ago

Hallo an Alle, Wenn ich die Seite aufrufen kommt richtigerweise heutige Tag zur Ansicht. Auf ein Terminal lauft die Seite den ganzen Tag um die aktuellen Buchungen zu sehen, auf den Browser läuft auch ein Auto Refresh (Auto Reload ohne Cache). Die Tages Stunden werden problemlos aktualisiert. Das Problem, wenn der Tag vorüber ist springt die Anzeige nicht auf den nächsten Tag. Ich lasse momentan zwei Tage auf dem Monitor anzeigen. Habe auch versucht nur ein Tag oder mehrere Tage leider kein Erfolg. Könnte jemand mir sagen wie ich das Problem lösen kann?

Vielen Dank

tkrebs commented 4 years ago

Entscheidend ist, was in der URL steht.

Ruft man das System erstmalig über die Domain auf, ist der URL-Pfad leer und es wird immer der jeweils aktuelle Tag angezeigt.

Klickt man die Tage durch oder auf "Heute", steht in der URL ?date=2020-07-01 - dann ist die Ansicht auf dieses Datum festgelegt.

Bakati commented 4 years ago

Lieber Tobias, vielen Dank für die prompte Antwort. Richtig, das habe ich auch gesehen aber, hier drückt niemand auf eine taste da die Monitor nur als Anzeige verwendet wird. Also ich rufe die URL auf und lasse es alle 3 min. auto reloaden, wie gesagt ohne den cache zu verwenden. Meine Meinung nach die Anzeige sollte am Mitternacht aud den nächsten Tag springen aber leider nicht.

Muss ich dafür unbeding den Browser schliessen und dann wieder öffnen? Genügt es nicht die Seite zu refreshen? Liebe Grüße

cbits68 commented 4 years ago

Versuche doch mal am Browser den Cache zu deaktivieren. Nachteil ist natürlich dann, dass Du alle 3 Minuten die komplette Seite lädst und damit viel mehr Traffic erzeugst. Aber dann kannst Du zumindest testen ob es daran liegt. Ansonsten müsstest Du den Browser um Mitternacht per Script neu starten und beim beenden automatisch den Cache leeren lassen.

cbits68 commented 4 years ago

Sorry, habe gerade erst gesehen, dass Du bereits ohne Cache arbeitest. Ist denn ein Benutzer eingeloggt oder lässt Du die Anzeige ohne Anmeldung laufen. Raspberry PI mit Raspbian?

tkrebs commented 4 years ago

Möglicherweise wird das Datum noch in einem Cookie gespeichert. Wenn du im Webbrowser Cookies für die Domain des Buchungssystems deaktivierst sollte es funktionieren.

Bakati commented 4 years ago

Das mit Cookies habe ich noch nicht gedacht, super Idee. Danke, ich werde es sofort ausprobieren.

Ansonsten habe ich den Browser vor Mitternacht per Script heruntergefahren und nach Mitternacht hoch, wie gesagt ohne Erfolg.
Gibt es beim Hochfahren eine Möglichkeit von Auto Login damit man alle Stunden des Tages sehen kann? Bisher habe ohne Anmeldung hochgefahren, aber es wäre super wenn es ginge. Danke an euch alle

cbits68 commented 4 years ago

Bin auch gerade dabei ein Display für das Clubhaus mit RasPI zu basteln (Kiosk Mode). Da gibt es etwas, das quasi die Eingaben/Maus simuliert, so dass man Beim Starten ein autologin simulieren kann. Bin aber aus Zeitgründen Un Corona noch nicht so weit. Sollte erst ein Terminal mit Touchscreen werden, ist aber derzeit nicht sinnvoll, da es nach jeder Nutzung desinfiziert werden müsste. Die Display Funktion im Clubhaus finde ich aber schon sinnvoll, da wir standardmäßig die namentliche Buchungsanzeige nicht aktivieren wollen. Für uns ist das dann im Clubhaus quasi die Digitalisierung der Magnettafel.

Bakati commented 4 years ago

Also bei uns ist namentliche Buchungsanzeige nur im Clubhaus erwünscht, daher die AUto Login auf dem großen Display der nur als Anzeige dient. leider kenn ich mit mit RasPI überhaupt nicht aus :(

cbits68 commented 4 years ago

Wenn ich es realisiert habe, kann ich gern eine Anleitung schreiben. Das schöne am Raspberry PI ist der geringe Stromverbrauch und dass man ihn einfach hinten am Monitor befestigen kann. Beim Touchscreen hatte ich einige Probleme mit der Bildschirmtastatur, sonst hat es auch gut funktioniert. Ist jetzt aber aktuell durch Corona auf Eis gelegt....

Bakati commented 4 years ago

Das wäre großartig. Danke

cbits68 commented 4 years ago

Wenn Du Google Chrome auf dem Display nutzt, sollte das aber eigentlich auch mit dem autologin möglich sein. Auf dem Raspberry PI ist nur Chromium verfügbar, da funktioniert es leider nicht.

Bakati commented 4 years ago

Super. Werde ausprobieren und berichten. Danke

Shineson1001 commented 4 years ago

Hi @Bakati,

hier nur ein paar spontane Gedankengänge um das Auto-Login-Problem und die Auswahl des richtigen Tages zu lösen. Auf einem Raspberry kann man auch Ubuntu Mate installieren .. dort gibt es auch den Firefox und man kann ein AutoAuth-Add-on installieren.

Man könnte ans Ende der layout.phtml Datei ein Seiten-Reload mit Datumsübergabe einfügen ... sähe dann in etwas so aus. .. die Funktion darf natürlich nicht bei jedem normalen User ausgeführt werden. Man darf diesen Code nur bei einem spezielle "Kisok-Mode"-User ausführen lassen; was man auch recht einfach implementieren kann.

        // Alle 60 Sekunden sich selber mit dem aktuellen Tagesdatum aufrufen lassen
        $(document).ready(function(){
            setInterval(function()
            { 
                start = Date.now();
                const dateTimeFormat = new Intl.DateTimeFormat('en', { year: 'numeric', month: '2-digit', day: '2-digit' });
                const [{ value: month },,{ value: day },,{ value: year }] = dateTimeFormat.formatToParts(start);
                location.href = "?date=" + `${year}-${month}-${day}`;
            }, 60000);
        });
Bakati commented 4 years ago

Hi @ Shineson1001,

vielen Dank, auch eine tolle Idee, ich hoffe das ich sie umsetzen kann.

cbits68 commented 4 years ago

Hi Shineson1001, das klingt nach einer einfacheren Lösung als mit Raspbian und Chromium. Werde ich mal ausprobieren. Wie kann man denn den Code auf den "Kiosk-Mode" User beschränken? Bisher habe ich immer versucht das Problem von der Client Seite zu lösen, aber die Idee mit dem serverbasierten Code für den User finde ich echt spannend!

Shineson1001 commented 4 years ago

Hi @cbits68, ich denke morgen werde ich Zeit dafür finden. Ich würde dann die User-Prüfung mit dem Usernamen machen .. soblad diese mit "Kiosk-" beginnt wird der Seiten-Reload Mechanismus aktiv.

Shineson1001 commented 4 years ago

Hi @cbits68,

hier die Änderungen: Neue Datei public/js/controller/frontend/autoreload.js

// Alle 60 Sekunden sich selber mit dem aktuellen Tagesdatum aufrufen lassen
$(document).ready(function(){
    setInterval(function()
    { 
        start = Date.now();
        const dateTimeFormat = new Intl.DateTimeFormat('en', { year: 'numeric', month: '2-digit', day: '2-digit' });
        const [{ value: month },,{ value: day },,{ value: year }] = dateTimeFormat.formatToParts(start);
        location.href = "?date=" + `${year}-${month}-${day}`;
    }, 60000);
});

Anpassung module/Frontend/view/frontend/index/userpanel.online.phtml

...
                <?= sprintf($this->t('Online as %s'), $this->user->need('alias')) ?>

                <?php 
                    // Usernamen pruefen um evtl. den Kiosk-Mode zu aktivieren
                    $useralias = $this->user->need('alias');

                    $pos = strpos($useralias, 'Kiosk-');

                    if($pos === 0)
                    {
                        $this->headScript()->appendFile($this->basePath('js/controller/frontend/autoreload.js'));
                    }
                ?>
cbits68 commented 4 years ago

Hi @Shineson1001, funktioniert Perfekt! Vielen Dank. Ubuntu Mate läuft auch schon auf dem Raspberry PI ;-) Muss jetzt nur noch den Kiosk Modus konfigurieren und den automatischen Login mit dem AutoAuth Add-On unter Firefox einstellen ;-) Im Clubhaus werde ich dann Monitor und RasPi an eine Zeitschaltuhr hängen, so dass die nicht 7*24 Stunden durchlaufen. Vor dem Ausschalten fahre ich den RasPi natürlich per CronJob sauber runter ;-) Da der RasPi ja selbstständig hochfährt, sobald der Strom wieder da ist, sollte das Display dann auch ohne Eingriffe funktionieren.

Gruß Andreas

Bakati commented 4 years ago

Hi @ Shineson1001 toll gemacht. Bei mir läuft die Anzeige 7*24 und auf ein Windows PC. Wenn diese Reload funktioniert brauche dann AutoAuth Add-On nicht mehr, oder verstehe ich es falsch? Ich könnte mit ein User der "Kiosk-xy" einloggen und dei Anzeige ohne den Firefox herunterfahern und wieder hochfahren weiter laufen lassen durch den Reload funktion sollte auch immer den aktuellen Tag anzeigen. Ist es richtig so?

Vielen Dank für Deine tolle Arbeit. Liebe Grüße

Shineson1001 commented 4 years ago

Hi @Bakati, ja, wenn du den Rechner immer an und den Browser, mit eingeloggten "Kiosk-xy"-User, geöffnet lässt, dann braucht man kein AutoAuth-Add-On.

Shineson1001 commented 4 years ago

Hi @cbits68, so würde ich mir das auch einrichten. Berichte mal, ob das System zuverläßig läuft.

cbits68 commented 4 years ago

Mit dem AutoAuth Add-On komme ich noch nicht wirklich klar. Firefox speichert zwar die Anmeldeinformationen, aber im Add-On finde ich keine Einträge bei Saved Credentials :-( Googlen hilft hier bisher auch nicht weiter, eine Doku habe ich nicht gefunden und auf Github steht: "AutoAuth is a simple Firefox Addon based on WebExtension that submits HTTP authentication credentials automatically. It does not send credentials to pages that have a custom login form." Ob das mit dem ep3 Login funktioniert und mit https ist mir noch unklar.

Bakati commented 4 years ago

Hi @ Shineson1001 Ok, werde erst heute einrichten spätestens bis morgen werde ich euch wissen lassen. Noch eine Frage. Die neue Datei soll 1zu 1 erstellt werden und die Anpasung in der module/Frontend/view/frontend/index/userpanel.online.phtml irgendwo eingefügt werden?

cbits68 commented 4 years ago

so ist es. Den Code in der userpanel.online.phtml einfach ans Ende kopieren ...

Bakati commented 4 years ago

Super Danke. Übrigens ich habe mit Chrome Auto Login sehr gute Erfolge gehabt. Es funktioniert gut. Probiere mal.

cbits68 commented 4 years ago

Ja, da bin ich bereits dabei😉

Bakati commented 4 years ago

Sorry für meine blöde Frage. Ist es so richtig?

...

    <td style="padding-left: 12px; border-left: solid 1px #CCC;">

        <a href="<?= $this->url('service/help') ?>" class="default-button" data-tooltip="<?= sprintf($this->t('Get additional %shelp and information%s'), '<b>', '</b>') ?>"><b>?</b></a>

    </td>

</tr>

<?= sprintf($this->t('Online as %s'), $this->user->need('alias')) ?>

            <?php 
                // Usernamen pruefen um evtl. den Kiosk-Mode zu aktivieren
                $useralias = $this->user->need('alias');

                $pos = strpos($useralias, 'Kiosk-');

                if($pos == 0)
                {
                    $this->headScript()->appendFile($this->basePath('js/controller/frontend/autoreload.js'));
                }
            ?>
cbits68 commented 4 years ago

Chrome mit Auto Login Extention funktioniert :-)

cbits68 commented 4 years ago

Hi @ Shineson1001, gibt noch einen kleinen Schönheitsfehler. Nach der Anpassung im Code wird der angemeldete Benutzer doppelt angezeigt. Das betrifft alle Benutzer, nicht nur den Kiosk User.

Ich nehme die Anpassungen gleich noch mal raus, um zu schauen ob das wirklich daher kommt. image

Shineson1001 commented 4 years ago

Hi @cbits68,

                <?= sprintf($this->t('Online as %s'), $this->user->need('alias')) ?>

Der Code ist bei dir wahrscheinlich jetzt doppelt in der Datei verhanden .. einfach den letzten rauslöschen.

cbits68 commented 4 years ago

jep :-) jetzt passt es

cbits68 commented 4 years ago

Nur als Tip: mit Google Chrome Auto Login funktioniert es auf dem PC. Da Google aber den Chrome nur noch in der 64 Bit Variante bereitstellt, muss es schon mindestens ein Raspberry PI 3 sein. Bei meinem 2er gibt es Ubuntu Mate nur in 32 Bit. Muss mir jetzt mal einen 3er oder 4er borgen für den Test.

cbits68 commented 4 years ago

hmmm, zu früh gefreut? Irgendwie macht er den Reload jetzt doch nicht nur bei den "Kiosk-" Benutzern, sondern bei allen :-( Dachte es wäre gestern nicht so gewesen, aber wenn ich jetzt mal ein Buchungsfenster offen lasse, sehe ich, dass die Seite reloaded wird und das Buchungsfenster dann weg ist. Die Userprüfung schein im Code unwirksam und autoreload.js grundsetzlich aufgerufen zu werden.

Shineson1001 commented 4 years ago

Hi @cbits68.

jo .. mein Fehler if($pos == 0) muss if($pos === 0) heißen

cbits68 commented 4 years ago

👍 Hab ich auch nicht gesehen🤣

Bakati commented 4 years ago

Hi @ Shineson1001 Hi @cbits68 Ich hoffe es geht euch gut. Bitte, ich bin schon ganz konfus. Würdet ihr mir bitte die finale Code so wie sein soll noch einmal schreiben? Ich denke bei autoreload.js hat sich nicht geändert. Vielen Dank im Voraus. Liebe Grüße

cbits68 commented 4 years ago

Hallo Bakati, kein Problem ... autoreload.js bleibt wie gehabt. in userpanel.online.phtml nach Zeile 5 den folgenden Code einfügen:

` <?php // Usernamen pruefen um evtl. den Kiosk-Mode zu aktivieren $useralias = $this->user->need('alias');

                $pos = strpos($useralias, 'Kiosk-');

                if($pos === 0)
                {
                    $this->headScript()->appendFile($this->basePath('js/controller/frontend/autoreload.js'));
                }
            ?>`

Liebe Grüße CBITS

Bakati commented 4 years ago

Super. Tausend Dank. Liebe Grüße

Bakati commented 4 years ago

Hi @cbits68

ich muss dich wieder belestigen. Bei mir funktionierts autoreload leider nicht. Ich henge die complete Code an so wie es bei mir ausschaut. Was ist da falsch?

user->can('admin.see-menu')): ?> headScript()->appendFile($this->basePath('js/controller/frontend/index.admin.min.js')) ?>
t('Online as %s'), $this->user->need('alias')) ?> user->need('alias'); $pos = strpos($useralias, 'Kiosk-'); if($pos === 0) { $this->headScript()->appendFile($this->basePath('js/controller/frontend/autoreload.js')); } ?>`
t('Administration') ?> t('My bookings') ?> t('My account') ?> t('Logout') ?> ?
Bakati commented 4 years ago

habe einen User mit Alias Kiosk angelegt und firefox in kiosk mode ausgeführt und den Benutzer angelogt. Leider die Seite wird nicht refreshd. Bitte um eure Meinung

Bakati commented 4 years ago

Und so schaut es mit autoreload.js aus.

// JavaScript Document // Alle 60 Sekunden sich selber mit dem aktuellen Tagesdatum aufrufen lassen $(document).ready(function(){ setInterval(function() { start = Date.now(); const dateTimeFormat = new Intl.DateTimeFormat('en', { year: 'numeric', month: '2-digit', day: '2-digit' }); const [{ value: month },,{ value: day },,{ value: year }] = dateTimeFormat.formatToParts(start); location.href = "?date=" + ${year}-${month}-${day}; }, 60000); });

Bakati commented 4 years ago

bei location.href ist ein syntax error

cbits68 commented 4 years ago

User muss mit Kiosk- beginnen. Bei mir ist der Alias z.B. Kiosk-Clubhaus

cbits68 commented 4 years ago

Du kannst bei $pos = strpos($useralias, 'Kiosk-'); natürlich auch auch den kompletten Alias reinschreiben. Wenn man mehrere Displays bauen will, dann werden alle die mit Kiosk- starten mit dem autoreload bedient ...

Bakati commented 4 years ago

Perfekt, jezt funktionierts bei mir auch. Super tolle Arbeit. Vielen Dank an euch beide. Ganz Liebe Grüße

cbits68 commented 4 years ago

Unser Platzbelegungsdisplay ist nun auch fertig und muss nur noch an die Wand :-) Ich habe es jetzt doch mit Raspberry Pi OS und Chromium im Kiosk Mode realisiert. Ubuntu Mate und Firefox war mir zu Ressourcen fressend ;-) Da man bei Chromium, bei der ersten Anmeldung des Kiosk Benutzers am Buchungssystem die Anmeldedaten speichern kann, brauchte ich nur noch den Klick auf den Anmeldbutton umzusetzen. Dafür ein kleines Shellscript geschrieben, welche mittels xdotool (mousemove & click 1) dann beim Start des PI den Anmeldebutton verzögert drückt (sleep 15 hat gereicht) Über eine Zeitschaltuhr gehen PI und Monitor dann Morgens um 8 an. Um 20;45 fahre ich den PI über die Crontab sauber runter und um 21 Uhr geht der Strom aus. Ich hoffe das das Display somit "Wartungsfrei" läuft ... Danke nochmal Shineson1001 für die tolle Unterstützung. Gruß CBITS

Shineson1001 commented 4 years ago

Hi @cbits68, Danke für die Rückmeldung. Hört sich gut an. Welche Version vom Raspberry Pi nutzt du?

cbits68 commented 4 years ago

produktiv den 3B, beim Testen habe ich meinen älteren 2B benutzt, der läuft für diese Zwecke auch völlig OK. Beim 3B ist halt schon WLAN & Bluetooth drin und muss dann nicht über USB angeschlossen werden. Daher nehme ich den 3B und habe dann noch ein BT Touchkeyboard im Klubhaus liegen, falls ich doch mal ran muss. SSH ist aber auch aktiviert, so dass ich auch mit Smartphone oder Laptop ran komme. Am Pi habe ich auch einen Resettaster angelötet (kommt man aber nur ran wenn man den Deckel vom Gehäuse abmacht, damit da keiner mal eben draufdrückt und mir die SD Karte zerschießt ;-)

cbits68 commented 4 years ago

Ich stelle mal Bilder hier ein, wenn es hängt😉 PI ist hinten am Monitor angebracht, so dass man Ihn nicht sieht und auch noch so einfach dran kommt.

Bakati commented 4 years ago

Hi @Shineson1001 @cbits68

Hallo an alle, also obwohl ich ein stink normales PC verwende bei mir läuft auch alles perfekt. Danke an euch beiden, habe sehr viel von euch gelernt. Da ihr so gut seid habe ich eine bitte. Ich habe vor Monaten eine Anfrage #277 . Könnt ihr da etwas machen? Das wäre immens wichtig, man sparrt sich sehr viel Zeit.

Vielen Dank