Änderungen

Addon:lcd msg

5.545 Byte hinzugefügt, 16:03, 29. Apr. 2011
/* delete_msg.sh */
===Übersicht===
Das Addon lcd_msg dient dazu, die Displayfläche der [[CCU1|CCU]] zu einer vollwertigen Textausgabe-Schnittstelle aufzuwerten, statt sie nur für das CCU-Menü zu verwenden. Das Menü der CCU wird durch das Addon nicht beeinträchtigt, sonder vielmehr auch erweitert. Weiterhin können zusammen mit der Textanzeige auch die Alarm- und die Service-LED, sowie die Hintergrundbeleuchtung der Station gesteuert werden.
 
:[http://fhz-forum.de/viewtopic.php?f=26&t=3575 FHZ-Forums-Thread]
:[[Datei:Lcd_msg_ccu.tar.gz|Datei-Download]]
===Features===
**Vor der Aktivierung kann die Hintergrundbeleuchtung zum Blinken gebracht werden
**Aktivierung kann mit einem Timeout versehen werden
*Anzeige von Texten mit Priorität (ausblenden der Texte mit niedrigerer Priorität)
 ==Menü (im Aufbau)==
===Einseitige Nachricht===
:- (lang) = Anlernen
*'''b<timeout>''' Hintergrundbeleuchtung aktivieren (mit Dauer)
*'''g<group>''' Gruppennamen der Nachricht setzen (default 'msg', max 6 Buchstaben o. Zahlen)
*'''i<id>''' Id der Nachricht setzen (default '0500', max 20 Buchstaben o. Zahlen)*'''p<priority>''' Setzt die Priorität der Nachricht (default '500', max 20 Buchstaben o. Zahlen)
*'''a<timeout>''' Alarm-LED aktivieren (mit Dauer)
*'''s<timeout>''' Service-LED aktivieren (mit Dauer)
'''<group>'''
Setzt die Nachrichtengruppe. Nachrichten lassen sich gruppenweise aus dem Menü heraus löschen. Das Menü wird durch Druck auf die Menü-Taste während der Anzeige der Nachricht aufgerufen. Es erscheint die Meldung 'del <group>?' (wobei <group> die selbst definierte Gruppe ist), die man bestätigen oder verwerfen kann. Der Gruppenname darf nicht aus keine Sonderzeichen oder Leerzeichen bestehenenthalten.
'''<id>'''
Setzt die Nachrichtenid. Beim Schreiben einer neuen Nachricht wird die Nachricht mit der selben id innerhalb der selben Gruppe überschrieben, während Nachrichten mit anderen ids oder anderen Gruppen weiter bestehen. Weiterhin dient die id dazu, die Nachrichten zu sortieren (Gruppenübergreifend). Die id wird nirgendwo angezeigt und kann frei gewählt werden. Die id darf nicht aus keine Sonderzeichen oder Leerzeichen bestehenenthalten. '''<priority>'''Setzt die Nachrichtenpriorität. Ein kleinerer Wert hier entspricht der umgangssprachlich höheren Priorität. Ein größerer Wert bedeutet also, dass die Nachricht weniger wichtig ist. Es werden nur Nachrichten angezeigt, die die gleiche höchste Priorität besitzen. Beispiel:*$m1h i1$Hallo Welt! :&rArr;zeigt 1 Stunde lang den Text "Hallo Welt!" mit der Standard-Priorität 500 an.*$m1h i2 p500$Test:&rArr;zeigt zusätzlich neben "Hallo Welt!" auch "Test" an. Die Angabe einer anderen id (wahlweise auch Gruppe) ist notwendig um nicht die vorherige Nachricht zu überschreiben.*$m1m p400$Neue Mail!:&rArr;zeigt eine Minute lang die Meldung "Neue Mail!" an. Während dieser Minute werden die anderen beiden Nachrichten nicht angezeigt! Nach Ablauf der Minute wird diese Meldung gelöscht, und es wird wieder im Wechsel "Hallo Welt!" und "Test" angezeigt.::Eine weitere Meldung mit p400 würde parallel zu dieser Nachricht angezeigt werden (innerhalb der Lebenszeit der Nachricht). ::Eine weitere Meldung mit p300 würde diese Nachricht ausblenden (innerhalb der Lebenszeit der Nachricht)
'''<flash>'''
Numerisch, gibt an, wie häufig die Hintergrundbeleuchtung blinken soll. Zur besseren Lesbarkeit wird die Hintergrundbeleuchtung hell und dunkel (nicht aus) geschaltet. Eine Bedienung der CCU ist während des Blinkvorgangs nicht empfehelnswertempfehlenswert, daher sollte die Anzahl der Blink-Vorgänge klein gewählt werden. Nach einem Blinken ohne anschließender Hintergrundbeleuchtungsdauer wird die Beleuchtung auf die normale Beleuchtungsdauer gesetzt (dies ist notwendig, damit die Beleuchtungsdauer nicht auf 1 Sekunde stehen bleibt).
'''<script>'''
Hiermit kann das Display resettet werden, falls es mal nicht reagiert.
===delete_msg.sh===
/etc/config/addons/lcd_msg/delete_msg.sh [-g[roup] <group>] [-i[d] <messageid>]
Löscht eine oder mehrere Nachrichten. Optional kann eine Gruppe und/oder eine Id angegeben werden, um das Löschen einzuschränken. Bei der Angabe einer Id ohne Gruppe werden alle Nachrichten mit dieser Id (von jeder Gruppe) gelöscht. (Vorsicht, hier muss zwischen dem -g/-i und der Bezeichnung ein Leerzeichen stehen, bei display_msg nicht! Ich gebe zu, nicht sehr intuitiv, müsste ich verbessern).
Beispiel:
*delete_msg.sh -g temp
:&rArr;Löscht alle Nachrichten der Gruppe temp
Das funktioniert soweit gut, jetzt wird es leider etwas unschön: wie soll man den Wenn-Teil des Programms formulieren? lcd_msg ist sinnvollerweise eine Textvariable, aber leider kann man nur Abfragen gegen numerische Werte formulieren. Vielleicht weiß ein erfahrener HM-Scripter, wie man auf Aktualisierungen der Text-Variablen das Programm ausführen kann? Ein Workaround besteht darin, das Programm an den Tastendruck eines virtuellen Kanals zu hängen. Man muss dann nach dem Setzen des Textes in der lcd_msg-Variablen diesen Kanal einmal "betätigen". Ideal wäre natürlich nur eine Variable...
==Changelog==
*v1.2
**Daemonizing beim Erstellen der Nachricht, dadurch reagiert das aufrufende ReGa-Script besser (CCU läuft runder)
**Bugfixes in der flash.tcl, Blinken konnte niedrige Beleuchtung zurück lassen
**Neues Feature: Priorität
 
==Funktionsweise der zukünftigen Version==
Entwicklungsbasis von MustangRocks und DocZoid für die weitere Entwicklung
===Komponenten===
Es gibt folgende Software-Komponenten:
*'''hss_lcd.ko''': Kernel-Treiber, basierend auf OpenSource, von MustangRocks weiterentwickelt, zur Ansteuerung des CCU-Displays und der LEDs und Tasten. Weiterentwickelte Version enthält zwei Kanäle, einen zur Kommunikation mit hss_lcd, und einen zur Kommunikation mit dem API.
*'''hss_lcd''': Programm von eq-3, welches die HTML-Interpretation der Menüdateien enthält. Ruft die Menüdateien über den Webserver auf, so dass cgi-Scripte ausgeführt werden. Kann keine LEDs ansteuern, nur Text anzeigen.
*'''hss_index.cgi''': Haupt-Menüdatei, welche bisher direkt den anzuzeigenden Text und einen autoswitch-timeout zurückgegeben haben, um ein refresh der angezeigten Daten zu erreichen. Die zukünftige Verwendung wird weiter unten beschrieben.
*'''API''': Das API wird von MustangRocks als tcl-Datei (Name) bereitgestellt, um eine einfachere Kommunikation zwischen TCL-Programmen und der hss_lcd.ko zu ermöglichen.
*'''ccu_lcd''': Daemon, welcher die Nachrichtenverwaltung übernimmt.
===Initialisierung===
*hss_lcd wird gestartet und ruft hss_index.cgi auf.
*in hss_index.cgi wird zunächst der ccu_lcd daemon Prozess gestartet, und ein default-String (ccu_lcd Va.b) zur Anzeige an der CCU zurückgegeben, ohne refresh-timeout.
*in ccu_lcd wird die init-Routine des API aufgerufen, und ein TCP-Listener-Socket geöffnet (Nachrichtenannahme)
*im API wird die initialisierung von hss_lcd.ko weitergeführt
*hss_lcd.ko schaltet auf den zweiten Kanal zur Anzeige der eigenen Nachrichten
*ccu_lcd zeigt ggf. bestehende Nachrichten an
===Ereignisse===
*Neue Nachrichten werden durch Übertragung von TCP-Daten (Warum nicht UDP?) an ccu_lcd gemeldet. ccu_lcd verarbeitet daraufhin die Daten und hält sie für eine weitere Übermittlung an das API vor (vermutlich in Dateien).
*Nachdem eine "showtime" von Nachrichten abgelaufen ist meldet sich hss_lcd.ko über das API beim ccu_lcd-Daemon. Dort können dann weitere Nachrichten übermittelt werden.
*Tastendrücke werden von hss_lcd.ko abgefangen und über das API an ccu_lcd gemeldet. ccu_lcd kann dann entscheiden (über einen API-Aufruf), ob das alte Menü über den Standard-Kanal angezeigt werden soll. Langfristig müsste das alte Menü selbst dargestellt werden.
===Fragen===
#warum nicht UDP statt TCP
#Nachrichten in Dateien vorhalten hat den Vorteil, dass bei einem Neustart des Anzeigesystems alte Nachrichten wieder angezeigt werden können. Scheint mir (DocZoid) jedoch mehr Aufwand in der Programmierung, zumal ein Neustart des Anzeigesystem nicht notwendig sein sollte. Bei einem CCU-Neustart sind eh alle Nachrichten weg. Mal schauen inwieweit sich das alte Dateien-System übernehmen lässt.
#Wie werden neue Nachrichten an hss_lcd.ko gesendet? Wenn nur eine Nachricht angezeigt wird sollte hss_lcd.ko nicht ständig pollen, ob es neue Nachrichten gibt: man hätte nicht viel zum alten System gewonnen. Grundsätzlich sollten neue Nachrichten immer ''sofort'' angezeigt werden (wenn die Priorität dies zulässt), und das Pollen muss minimiert werden, sprich ccu_lcd darf dem API nur eine showtime übergeben, wenn weitere Nachrichten angezeigt werden müssen.
#Wer prüft auf den timeout einer Nachricht, insbesondere wenn es nur eine gibt und es kein Polling gibt?
===Timeout-Überwachung===
#LED- und Hintergrundbeleuchtungs-Timeouts werden von hss_lcd.ko überwacht
#Bei Nachrichten-Timeouts muss die Datei / der Datensatz in ccu_lcd gelöscht werden. Wird ccu_lcd hier extern von hss_lcd.ko getriggert?
===API-Beschreibung===
123
Bearbeitungen