NEWS
Bildschirmschoner für Touchscreen
-
Hallo zusammen,
ich möchte Euch meine Umsetzung eines Bildschirmschoners vorstellen.
Zunächst mal die Ausgangssituation und die Anforderung:
Ich habe im Wohnzimmer einen großen Touchscreen installiert, der mittels ioBroker und VIS diverse Infos über den Zustand des Hauses liefert und über den auch die Bedienung vieler Geräte erfolgt. Der Touchscreen wird ausschließlich hierfür genutzt. Des weiteren nutzen wir (die Familie) ein iPad sowie diverse weitere Geräte (Android Tablet, PCs) die in ihrer "Zweitfunktion" ebenfalls Zugriff auf die Visualisierung haben.
Was ich brauche ist also ein Bildschirmschoner ausschließlich für den Touch Screen.
Alle anderen Endgeräte zeigen die Visualisierung nur kurzfristig während einer gezielten Nutzung, sodass hier kein Bildschirmschoner erforderlich ist.
Ein "allgemeiner" Bildschirmschoner wie hier...
link text
...beschrieben führt zu Problemen, da dieser auf allen Geräten ausgeführt wird und es daher zu gegenseitigen Beeinflussungen kommt. Zudem ist dafür eine eigene View erforderlich, die bei Aktivierung angezeigt wird. Das hatte ich bisher so gelöst, dass der Home-Screen in eine weitere View (Screensaver) gespiegelt war und ein Skript bei Aufruf dieser Screensaver-View den Touchscreen runtergedimmt hat. Das funktioniert aber wegen der gegenseitigen Beeinflussung der Endgeräte nicht zufriedenstellend.
Meine Umsetzung besteht aus zwei Skripten.
Das erste läuft auf den Clients und ist in der Vis im Reiter "Skripte" einzutragen./* Bildschirmschoner Anforderung: Bei Nutzung eines bestimmten Endgerätes (in meinem Fall eines fest montierten Touchscreens) sollen Ereignisse am Touchscrteen überwacht werden. Bei "Nichtnutzung" wird nach einer festgelegten Zeit ein Objekt gesetzt. In Abhängigkeit davon dimmt ein weiteres JS-Script in IOBroker die Helligkeit und den Kontrast des Touchscreen runter bzw. hoch */ var touchInstance ='dc.4283b'; // hier ist die Instanz des Touchscreens einzutragen var touchNutzung = '0_userdata.0.Visualisierung.TouchNutzung'; // Dieses Objekt muss in IOBroker angelegt werden var zeitBisBildschirmschoner = 90; //Hier ist die Zeit bis zur Aktivierung des Bildschirmschoners in Sekunden einzutragen var debounce; var bildschirmschonerAktivierung = function() { vis.setValue('0_userdata.0.Visualisierung.TouchNutzung', false); //Bildschirm dimmen... vis.changeView('Home'); //...und Home-Seite aufrufen }; var EventHandling = function() { if (vis.instance == touchInstance) { if (debounce) { return; } debounce = setTimeout(function () { debounce = null; }, 5000); // 5 Sekunden Debounce-Zeit zur Schonung der Ressourcen vis.setValue('0_userdata.0.Visualisierung.TouchNutzung', true); // Bildschirmschoner deaktivieren if (Aktivzeit) { clearTimeout(Aktivzeit); } Aktivzeit = setTimeout(bildschirmschonerAktivierung, zeitBisBildschirmschoner * 1000); //Bei Touchnutzung Aktivzeit neu starten } }; var Aktivzeit = setTimeout(bildschirmschonerAktivierung, zeitBisBildschirmschoner * 1000); //Aktivzeit initialisieren document.addEventListener('touchmove', EventHandling); document.addEventListener('click', EventHandling); document.addEventListener('mousemove', EventHandling);
Der Zweite Teil läuft im ioBroker unter Skripte:
//Helligkeit des Touch-Screens ändern function helligkeit(Helligkeit, Kontrast){ var SSH = require('simple-ssh'); var ssh = new SSH({ host: '192.168.xxx.yyy', //IP-Adresse des Raspis an dem der Touchscreen angeschlossen ist user: 'Anmeldename', //Anmeldename und... pass: 'Passwort' //...Passwort }); ssh.exec('sudo ddcutil setvcp 10 ' + Helligkeit).start(); ssh.exec('sudo ddcutil setvcp 12 ' + Kontrast).start(); } on({id: '0_userdata.0.Visualisierung.TouchNutzung', change: 'any'}, function(obj) { //Bei Nutzung/Nichtnutzung des Touchscreens var touchStatus = getState("0_userdata.0.Visualisierung.TouchNutzung").val; if (touchStatus == false) { //"false" bei "Nichtnutzung" des Touchscreens helligkeit(20,20); } else { helligkeit(70,70); } })
Damit kann ich auf eine eigene Screensaver-View verzichten.
Zur Funktion:
Der Touchscreen zeigt normalerweise den runtergedimmten Homescreen.
Bei Berührung des Touchscreens wird im ersten Programm ein Timer (zeitBisBildschirmschoner) gesetzt, der bei Nutzung des Touchscreens immer wieder nachgetriggert wird. Zudem wird ein Objekt in ioBroker gesetzt (0_userdata.0.Visualisierung.TouchNutzung), welches die Nutzung des Touchscreens an das zweite Programm übergibt. Findet in der "zeitBisBildschirmschoner" keine weitere Bedienung am Touchscreen statt, wird wird das Objekt zurückgesetzt.Das zweite Programm reagiert auf Änderungen des Objekts "0_userdata.0.Visualisierung.TouchNutzung" und steuert über die Funktion "helligkeit" Helligkeit und Kontrast des Touchscreens.
Wenn der Bildschirmschoner aktiviert wird, wird der Touchscreen runtergedimmt und der Homebildschirm aufgerufen.Damit sind alle anderen Endgeräte vom Bildschirmschoner unbeeinflusst.
Abschließend noch ein paar Details zum Dimmen und Schalten des Touchscreens:
-
@pezi Danke für deine Beschreibung.
Welche SW läuft auf dem PI? Bullseye, Bookworm, .....
Verstehe ich es richtig das der Bildschirmschoner "nur" das abdunkeln des Bildschirms ist?
-
@wendy2702
Auf beiden Pi (IOB-Pi und Anzeige-PI des Touchscreens) läuft Bookworm.
Und ja, der Bildschirmschoner dimmt nur Helligkeit und Kontrast des Touchscreens und ruft den Home-Screen auf.
Mein Homescreen zeigt die (für uns) wichtigsten Infos wie Produktion der PV-Anlage, Wetterwarnungen, Wetterverhältnisse, Termine, eine unserer Außenkameras etc. an.
Der Bildschirm wird dabei nur soweit gedimmt, dass alle Infos noch gut erkennbar sind.Ein Problem ist allerdings noch zu lösen:
Gelegentlich springt der Touchscreen auf eine Vis-Seite, die auf einem der anderen Geräte angezeigt wird.
Warum das so ist, muss ich noch ergründen... -
@pezi sagte in Bildschirmschoner für Touchscreen:
Ein Problem ist allerdings noch zu lösen:
Gelegentlich springt der Touchscreen auf eine Vis-Seite, die auf einem der anderen Geräte angezeigt wird.
Warum das so ist, muss ich noch ergründen...Danke für deine Antwort.
So ein ähnliches Problem habe ich auch. Aktuell scheint es damit gelöst zu sein das ich die Bildschirm Anzeige Frequenz fest auf 60Hz eingestellt habe. Vorher hat der PI immer das verwendet was der Monitor maximal kann (120Hz). Seit dem umstellen habe ich keine Probleme mehr.
Vielleicht auch einen Versuch wert.