Ankündigung

Einklappen
Keine Ankündigung bisher.

[mmh] ChangeLog auf aktuellen Stand 1.0.90

Einklappen
Dieses Thema ist geschlossen.
X
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    [mmh] ChangeLog auf aktuellen Stand 1.0.90

    Hallo Junx,

    hier ein wenig Rache :-)

    Ich weiss wir hängen ja nun noch immer nach mit unserer Doku... Nun werde ich immer häufiger mit Aussagen wie "... seid einem Jahr ist nix geschehen konfrontiert" und das ärgert mich natürlich.

    Eines möchte ich mal dazu klarstellen:

    Wir geben Vollgas und haben in doch kurzer Zeit, wie ich finde, geniales geschaffen. Oftmals sind wie in der Findungsphase und wissen gar nicht, ob wir Funktionen belassen bzw. eingebundene Funktionen optimieren und verbessern... Man kann das in dem folgenden Changelog auch gut verfolgen.

    Ich persönlich gebe Versionen für die Öffentlichkeit erst frei, wenn 110% in der Praxis getestet. Der Erfolg zahlt sich aus... zumindest liest man in den Foren nicht viel über Probleme!!!! Und wir haben nun fast 200 Lizenzen im Umlauf. Wir werden auch in Zukunft höchstens 2,3 Versionen im Jahr veröffentlichen. Ich persönlich hasse nämlich diese permanent Updates!!!

    Ich will euch nun hiermit in die Lage versetzten die Entwicklung mitzuverfolgen. Rückfragen bitte erst, wenn alles durchgelesen... was noch in Version 1.0.73 beschrieben, kann in Version 1.0.82 schon wieder ganz anders sein. Das macht mir meine Arbeit ja auch eben so schwierig und verzögert eben die Vervollständigung der Dokumentation, die in jedem Fall samt Beispiele folgen wird.

    WICHTIG: Einiges habe ich selbst noch nicht testen können !!!

    ..


    Version 1.0.67:

    Neues Feature:
    Oneshot-Timer: Feuert einmal nach der eingestellten Zeit (in Sekunden) und beendet sich dann.
    Einrichtung: In der timer.csv als Timertyp ONESHOT eintragen. Alle anderen Konfigurationsoptionen gelten wie bisher.

    Bugfixes:
    - HS-Kommandos werden nicht mehr verschluckt
    - deadlock bei verschachtelten Scriptaufrufen behoben.
    - Absturz beim parallelen Abarbeiten mehrerer Sequenzen behoben

    Version 1.0.68:
    - GUI-Steuerung geändert. Der Daemon wartet jetzt nicht mehr, bis die GUI den Befehl abgearbeitet hat. Das macht die GUI rasend schnell, könnte aber evtl. andere Probleme erzeugen. Einfach mal testen.
    - die Steuerung der Systemlautstärke sollte jetzt auch auf dem iMac funktionieren
    - Memory-Management verbessert

    iViewer:
    - der \%-Match funktioniert jetzt wie erwartet.
    - "sequence to send"-Logging entfernt

    Version 1.0.69:
    Bugfixes:
    - der Installer beendet den Daemon und die GUI jetzt sauber
    - der Commandserver verschluckt keine Befehle mehr
    - diverse Bugfixes zur Stabilitätsverbesserung
    - DELAY funktioniert wieder sauber

    Neue Features:
    - erweitertes Logging
    - die iViewer-Event-Sequenzen können jetzt auch Sysvars enthalten
    - Broadcast: Senden von DVD-Informationen: GETDVDTITLE,GETTITLE und GETCHAPTER


    Und hier nochmal die iViewer-Join-Definitionen zusammengefasst:
    Digital-Joins:
    {Nummer};{Typ};{Push-Action};{Release-Action};{Push-Event};{Release-Event};NOCACHE;{Local-Action}

    Analog-Joins:
    {Nummer};{Bedingung};{Skalierung};{Action};{Event} ;NOCACHE;{Local-Action}

    Serial-Joins:
    {Nummer};{Bedingung};{Action};{Event};NOCACHE;{Loc al-Action}

    Version 1.0.70:

    - PLAYPLAYLIST funktioniert wieder
    - weitere Stabilitätsverbesserungen

    Version 1.0.71:

    Neues Feature in der iViewer-csv:
    - mehrfache Angabe des Argument-Platzhalters möglich
    hier die nächste Version.

    Version 1.0.72:
    - nur Optimierungen

    Version 1.0.73
    - Umlaute werden korrekt in .csvs geschrieben
    - neue automatische Systemvariablen HOMEDIR und PROFILE
    - im Prefpanel taucht bei installierter Lizenz ein "?" auf - nach Klick auf das "?" werden die Lizenzinfos angezeigt
    - das Problem der zeitweise auftretenden "Zombie-GUI-Prozesse" sollte behoben sein

    Neben diversen Bugfixes (u.a. in der HS-Kommunikation und beim parallelen Abarbeiten von Commandserver-Befehlen) gibt es folgende neue Features:

    - der Befehl ITUNES-GETSTREAMTITLE kommt jetzt auch über den Broadcast und liefert den aktuellen Titel des Radiosenders (sofern übermittelt)
    - Rückwärts-Matching in der iViewer.csv:
    Wenn in einer Match-Zeile hinter dem \* noch ein \% auftaucht, matcht die Engine von hinten nach vorne. Das ist auch stimmig, denn den \% benutzt man ja nur dann, wenn man ein Element gezielt ansteuern möchte.
    Beispiel:

    Gegeben sei der String:
    <ITUNES>GETALLPLAYLISTS=Mediathek|Musik|Filme|Fern sehsendungen|Podcasts|Party-Jukebox|Genius|Meine Lieblingstitel|Meine Top 25|Musik der 90er|Musikvideos|Zuletzt gespielt|Zuletzt hinzugefügt|OK</ITUNES>

    Man möchte auf das Element vor |Genius| matchen:
    |\*|Genius| -> ist falsch, da die Engine so nicht weiß, daß man rückwärts matchen möchte, also fügt man ein \% als Dummy an, der eigentlich keine Funktion hat:

    |\*|Genius|\% -> liefert "Party-Jukebox" als Match zurück

    Um auf ein weiter vorne stehendes Element zu matchen, fügt man einfach weitere \% ein:

    |\*|\%|Genius| -> ist richtig und liefert "Podcasts" zurück. Die obige Bedingung "\% hinter \*" ist ja bereits erfüllt. Ein weiteres \% am Ende würde aber auch nicht schaden.

    So kann man sich dann durch die Elemente hangeln bzw. sie gezielt extrahieren.

    Allerdings ist der Match-String bis jetzt noch etwas ungenau. Denn es könnte ja passieren, daß das Wort "Genius" noch in anderen Kombinationen auftaucht.
    Also stellen wir die Itunes-Klasse mit Befehl voran:

    <ITUNES>GETALLPLAYLISTS=\*|\%|Genius| -> leider wieder falsch, in dieser Kombination würde \* auf alle Elemente bis einschließlich Podcasts matchen und uns eine Liste zurückgeben, also fügen wir noch einen \% ein, um den Rest (der voransteht) zu entsorgen und trotzdem sauber auf das Element zu matchen, der fertige Match-String sieht damit so aus:

    <ITUNES>GETALLPLAYLISTS=\%|\*|\%|Genius| -> liefert sauber "Podcasts" zurück und entsorgt dabei alles, was an Elementen zwischen dem Befehlsnamen und dem gewünschten Element steht.

    Version 1.0.75 - iViewer GUI upload support

    1) Grundfunktion (funktioniert auch ohne iViewer-Lizenz): Upload der Dateien in den iViewer
    - Konfiguration:
    a) in den iViewer-Settings auf dem iPhone/iPod unter "File URL" die Daten des mmh-Webservers eingeben. Die Angabe des GUI-Namens ist nicht erforderlich!
    Beispiel: http://192.168.1.51:8080
    Natürlich noch "Reload GUI file" und ggfs. "Cache All Images" aktivieren.
    b) den kompletten GUI-Ordner vom PC in den misc-Ordner von mmh kopieren und in "iviewer" umbenennen. "iviewer" liegt also neben "web"

    - Anwendung: mmh neu starten und den iViewer-Client aktivieren. mmh erkennt den Client, gibt im Log die ID des Clients aus (wichtig für die Lizensierung), sucht im iviewer-Ordner nach einem
    GUI-File und lädt dieses und sämtliche Grafiken auf den Client.

    2) Erweiterte Upload-Funktion (nur mit iViewer-Lizenz): Automatische Anpassung des GUI-Files
    zusätzlich zur unter 1) genannten Konfiguration sind folgende Optionen möglich:

    a) Netzwerkeinstellungen anpassen:
    iIVewer.csv, Sektion [CONFIG]
    GUI_IP;{IP} oder AUTO
    GUI_PORT;{Port} oder AUTO

    Hier lassen sich die Netzwerk-Settings für das GUI-File manuell bzw. automatisch festlegen
    GUI_IP;AUTO verwendet die aktuelle IP des Systems
    GUI_PORT;AUTO verwendet den unter PORT in der iViewer.csv eingestellten Port des Systems

    Beispiel:
    [CONFIG];;
    ACTIVE;YES;
    PORT;7500;
    PORTRAIT;<SCRIPT><RUN=iViewerRemoteMotionPortrait. myh></SCRIPT>
    LANDSCAPE;<SCRIPT><RUN=iViewerRemoteMotionLandscap e.myh></SCRIPT>;
    DEBUG;YES
    GUI_IP;AUTO
    GUI_PORT;AUTO

    Hinweis: GUI_IP und GUI_PORT müssen beide definiert und gültig sein, um eine Ersetzung zu erreichen!
    - Anwendung: keine - bei einem GUI-Upload werden die Netzwerkeinstellungen im GUI-File automatisch angepasst.

    b) Lizenzinformationen hinzufügen:
    in der iViewer.csv eine neue Sektion [CLIENTS] erstellen und die Lizenzdaten eintragen:
    {Name};{UID};{Key}

    {Name} - frei wählbarer Name, wird z.Zt. nur fürs Logging verwendet.
    {UID} - die (U)ID des Clients, wie sie von CommandFusion zur Lizensierung verwendet und von mmh bei einem Connect im Log ausgegeben wird.
    {Key} - der von CommandFusion erstellte Key

    Beispiel:
    [CLIENTS];
    My Ipod;f699a50b0fe830fa8ce6d3c7461c94ff909c9def;9D6F 6164AF68B1A384419E3B09B49857

    - Anwendung: keine - bei einem GUI-Upload werden die Lizenzinformationen automatisch dem GUI-File hinzugefügt.

    Hinweis: Die Modifikationen finden nur im Speicher statt. Das GUI-File im iviewer-Ordner wird nicht modifiziert! Es sind maximal 256 Client-Definitionen möglich

    Version 1.0.76:
    GUI:
    - bei Texteinblendungen keine Fettschrift mehr
    - Texte werden automatisch vertikal zentriert

    Config-Panel:
    - Projektpfad einstellbar
    - iViewer-/mRemote-Lizenzen lassen sich per Drag&Drop auf das Keyfile-Feld einspielen
    - das Lizenz-Panel ist jetzt ein Sheet und zeigt die mmh- und die mRemote-Lizenzen an

    - die iViewer-Lizenzen werden jetzt nicht mehr in der iViewer.csv gesucht, sondern liegen jetzt in der Datei remote_licenses.csv im Application-Support-Ordner. Die Datei wird automatisch vom Config-Panel geschrieben, wenn eine neue Lizenz eingespielt wird

    - neue Sysvar: PROJECT - gibt den im Panel eingestellten Projektpfad aus

    - BAOS: Fix für verschluckte Befehle eingebaut

    Version 1.0.77 mit folgenden Neuerungen:

    PrefPane:
    - die mRemote-Lizenzliste wird beim Einspielen einer neuen Lizenz sofort aktualisiert
    - Bugfix: keine doppelten, identischen Lizenzen mehr möglich
    - mRemote-Lizenzeinträge lassen sich jetzt durch Doppelklick auf den entsprechenden Eintrag löschen

    mRemote/iViewer:
    - iViewer.csv in mremote.csv umbenannt (alles kleingeschrieben!)
    - Ordner ..misc/iviewer in ..misc/mremote umbenannt
    - Relay-Erweiterung: Wenn die Verbindung zwischen iPod und mmh während einer bestehenden Relay-Verbindung abreisst (z.B. durch sleep des iPods oder WLAN-Aussetzer),
    wird die Relay-Verbindung beim Reconnect des Clients wiederhergestellt. Die Erkennung des Clients erfolgt anhand der IP-Adresse.

    Neue SYS-Befehle:

    PUSHUPKEY
    PUSHDNKEY
    PUSHLEKEY
    PUSHRIKEY

    Version 1.0.80:

    Bugfix:
    Das Argument des TIME-Befehls der TCP- und UDP-Klasse wurde nicht richtig interpretiert.


    neue Features für die mremote.csv:

    [CONFIG]-Sektion:
    CONNECT;{mmh-Sequenz} - führt {mmh-Sequenz} bei jedem Connect eines Clients aus

    [DIGITAL]-Sektion:
    - Intervall-Buttons: bei INTERVAL=0{,x} wird die Intervallsequenz nur einmal {nach der Zeit x} ausgeführt

    neu: HOLD-Button: - führt eine mmh-Sequenz in Abhängigkeit der Druck-Dauer des Buttons aus
    Typ: HOLD=x (in ms)
    Beispiel:
    12;HOLD=1000;<sys><volup=5></sys>;<sys><voldn=5></sys>

    Führt "volup" aus, wenn der Button nach weniger als 1 Sekunde losgelassen wird.
    Wenn länger als 1 Sekunde gedrückt wird, wird sofort "voldn" ausgeführt, auch wenn der Button gedrückt gehalten wird.


    neuer WINDOW-Befehl LEVEL=NORMAL/HIGH/LOW - legt die Ebene des zuvor mit SELECT ausgewählten Fensters fest.
    LEVEL=NORMAL - Window über allen normalen Fenstern, unterhalb des Bildschirmschoners (default)
    LEVEL=HIGH - Window über dem Bildschirmschoner
    LEVEL=LOW - Window unter allen Fenstern, auf dem Desktop-Hintergrund

    Wenn LEVEL nicht angegeben wird, wird automatisch LEVEL=NORMAL angenommen.
    Durch Level wird der "Raum", in dem sich das Fenster befindet, ausgewählt. Die Auswahl der Fensterreihenfolge innerhalb des "Raums" kann nach wie vor mit Hilfe des SELECT-Befehls erfolgen.
    Ein Fenster mit SELECT=2 liegt also über einem Fenster mit SELECT=1, wenn beide das selbe LEVEL besitzen.
    Entsprechend liegt ein Fenster mit SELECT=3 und LEVEL=HIGH über(!) einem Fenster mit SELECT=4 und LEVEL=NORMAL, obwohl die ID des Fensters höher ist.

    Der LEVEL-Befehl kann jederzeit - auch bei bereits dargestellten Fenstern - angewendet werden.

    Version 1.0.82 - iViewer Support für dynamische Listen

    Weitere Neuerungen:
    - neuer SYS-Befehl GETSS - auslesen des Bildschirmschoner-Status, liefert ON bzw. OFF (kommt auch über den Broadcast)
    - der Webserver unterstützt jetzt auch GIF-Dateien

    Jetzt zum List-Support:
    - eine neue Sektion in der mremote.csv anlegen:
    [LIST={x}]; x entspricht dabei der Analog-Join-Nummer, die man im guiDesigner für die Liste gewählt hat

    in dieser Sektion kann man jetzt die Joins auflisten, für die man gerne List-Support haben möchte,
    Syntax:
    {Join-Typ=Nummer};{Master-Join-Typ=Nummer};{Match-Sequenz};{Optionen};{Local-Action}

    Erklärung:
    {Join-Typ=Nummer} - Beschreibt den Join, für den List-Support gewünscht wird, z.B. SERIAL=7 oder ANALOG=3 oder DIGITAL=23, sinnvoll ist eigentlich nur SERIAL
    {Master-Join-Typ=Nummer} - Beschreibt den Join, an den der o.g. Join angehängt werden soll.d.h. wenn der Master-Join aus der Liste ein Event schickt, wird ein Event für den o.g. Join simuliert, Syntax wie oben
    {Match-Sequenz} - die Match-Sequenz zur Erzeugung eines Listeneintrages, der Match erfolgt subtraktiv
    {Optionen} - weitere Konfigurationsoptionen, z.Zt. ungenutzt
    {Local-Action} - mmh-Sequenz, die ausgeführt werden soll, wenn ein Match erfolgt. hier ist als Wildcard neben dem Argument \# zusätzlich \& für den Listen-Index möglich


    Zum besseren Verständnis ein Beispiel:
    Man legt im gui Designer eine Subpage für die Listeneinträge an, auf dem sich ein Button befindet. Der Button-Text hat den Serial Join 91 und die Button-Action selbst den Digital-Join 90, die Liste selbst hat den Index 1.

    Um die Liste zu füllen, muß man zunächst eine Liste erzeugen, die später aufgesplittet und an die einzelnen Listenelemente geschrieben wird:
    [SERIAL];
    91;#;<ITUNES><PLAYPLAYLIST=\#></ITUNES>;GETALLPLAYLISTS=\*OK;

    Das ist ein ganz normaler Eintrag für einen Serial Join, wichtig ist hier die Matchsequenz: als Ergebnis kommt hier eine Liste aller Playlisten heraus:
    Mediathek|Musik|....|zuletzt hinzugefügt|
    In der List-Definiton wird auf diese Liste nochmal subtraktiv gematcht und damit die Liste gefüllt:
    [LIST=1];
    SERIAL=91;DIGITAL=90;\*|;;

    Hier wird mit dem Matcheintrag \*| auf das jeweils nächste Element der oben erzeugten Liste gematcht und somit sukzessive die Liste erzeugt, Button 1 der Liste heißt also "Mediathek", Button 2 "Musik" usw...
    Damit sind die Buttons dynamisch erzeugt und beschriftet.

    Da der iViewer keine Serial-Join-Actions aus einer Liste erzeugen kann, "verdongelt" obige Zeile den "Master-Join" d90 mit dem Serial-Join s91. d.h. wenn d90 eine list-action sendet, wird automatisch die korrespondierende serial-action mit dem passenden Argument simuliert. Mit diesem Argument wird dann die "normale" Action des Serial-Joins aufgerufen, in diesem Beispiel <ITUNES><PLAYPLAYLIST=\#></ITUNES>, siehe oben.
    Um weitere Funktionen auszuführen, kann man Listeneinträge auch manuell modifizieren, hierfür habe ich die SET...JOIN-Befehle erweitert:
    <SYS><SETSERIALJOIN=91,0,Hello></SYS> - ändert den Namen (und damit auch das Argument für evtl. Actions) des 1. Listen-Elementes in "Hello".
    die Befehle sind natürlich abwärtskompatibel, d.h. wenn nur die Nummer (ohne Index) angegeben wird, funktionieren sie wie bisher. Listen lassen sich nur dann modifizieren, wenn der entsprechende Join auch als "zur Liste zugehörig" definiert ist. In unserem Beispiel würde also ein <SYS><SETSERIALJOIN=47,0,Hello></SYS> nichts bringen, weil der Serial Join 47 in keiner Listen-Definiton auftaucht.

    Mit Hilfe der Local-Actions und dem index-Platzhalter \& kann man so auch den Listeneinträgen dynamische Thumbnails verpassen. Nehmen wir an, die Subpage hätte zusätzlich noch ein Bild, in das die URL geschrieben werden muß, der serielle Join für die URL sei 92.
    Wir erweitern die obige Listen-Definition um eine local-Action, in der die URL für das jeweilige Bild geschrieben wird:[LIST=1];
    SERIAL=91;DIGITAL=90;\*|;;<SYS><SETSERIALJOIN=92,\ &,http://192.168.1.51:8080/\#.jpg></SYS>

    Setzt zusätzlich noch die URL für das jeweilige Bild:
    1. Thumbnail: http://192.168.1.51:8080/Musik.jpg
    2. Thumbnail: http://192.168.1.51:8080/Mediathek.jpg
    usw.

    Nochmal kurz zusammengefasst:
    - Serial Join allgemein definieren, Action für das Argument, Match für die komplette Liste
    - den Serial Join an eine Liste und an einen "Master-Join" binden
    - auf den gewünschten String matchen, der dem indizierten Serial Join zugeordnet werden soll
    - ggfs. zusätzliche Local-Action eintragen

    Version: 1.0.83

    Bugfixes:
    - Problem bei der Rückgabe von langen Listen behoben
    - SYS-GET...INFOLDER lieferte bei index=0,length=1 die komplette Liste zurück
    - Das PrefPane erstellt jetzt auch die Unterordner misc und web

    Features:
    - Der Befehl DVD - GETVOL kommt jetzt auch im Broadcast.

    - SYSVARS können jetzt in allen .csvs in der [CONFIG]-Sektion verwendet werden.

    Beispiel (webserver.csv):
    DVD_PATH;[MY_PATH]

    Achtung: Die Variablen werden nur beim Start von mmh gelesen, eine Änderung der Variablen zur Laufzeit hat keine Wirkung und wird erst nach einem Neustart übernommen!


    - neuer SYS-Befehl:
    SETDISPLAYMODE=x,y{,bpp}/0/NORMAL - ändert die Bildschirmauflösung in x und y die Farbtiefe (bpp) ist optional
    Beispiele:
    SETDISPLAYMODE=800,600 - ändert die Auflösung in 800*600 und behält die aktuelle Farbtiefe bei
    SETDISPLAYMODE=1024,768,16 - ändert die Auflösung in 1024*768 und setzt die Farbtiefe auf 16 Bit
    SETDISPLAYMODE=0 oder NORMAL - setzt die Bildschirmauflösung zurück auf die Werte, die beim Start von mmh aktiv waren

    Hinweise:
    Wenn die Angaben nicht umsetzbar sind (Auflösung und/oder Farbtiefe), wird automatisch der nächstmögliche Modus eingestellt (siehe Log)
    Es ist nicht möglich, Modi einzustellen, die vom Bildschirm nicht unterstützt werden.
    Beim Beenden von mmh wird der Bildschirm auf den ursprünglichen Modus zurückgesetzt.


    - Format-String %l zum gezielten Ausgeben von Listen (möglich bei allen Befehlen, die Listen zurückgeben):
    %l{Index},{Länge} - gibt ab {Index} {Länge} Listenelemente zurück. wenn Länge negativ ist, wird rückwärts gezählt, also die Ausgabe herumgedreht

    Beispiel:
    <GETFOLDERINFOLDER{%l17,5}=/Users/mmh/Test> - Liefert 5 Ordnernamen ab dem Index 17 als Liste zurück
    <GETFILESINFOLDER{%l12,-5}=/Users/mmh/Test> - Liefert die Dateinamen von Index 12 bis Index 8, beginnend mit Index 12

    Version 1.0.84.

    Änderungen zur Vorversion:

    - bei Änderung der Bildschirmauflösung wird die GUI neu gestartet (Anpassung der Buttonleisten)
    - Klasse WINDOW: LEVEL=LOW liegt jetzt über den Desktop-Icons
    - PrefPane: Das web-Directory wird jetzt an der richtigen Stelle erzeugt, zusätzlich wird das mremote-Dir automatisch angelegt
    - Prefpane: Die Prozesssteuerung wurde überarbeitet - besseres Starten/Beenden/Neustarten des Dienstes
    - Bei ITunes-Trackwechseln werden Änderungen auch gebroadcasted, wenn der Titel gleich bleibt.
    - der SYS-Befehl GETSPEAKERVOL liefert zusätzlich den Quellennamen des Airtunes-Gerätes zurück, Syntax: GETSPEAKERVOL={Name}={WERT}|OK
    - Der Start des Dienstes bei einem Neustart des Mac wurde um weitere 5 Sekunden erhöht, um GUI-Start-Probleme zu umgehen. Aktueller Wert: 10 Sekunden
    - DVD - GETDVDTITLE verändert den Applikationsfocus nicht mehr.

    KNX/IP Routing Support:
    Allgemeines:
    - der KNX/IP Routing Support ist von der HS/BAOS-Lizenz abhängig.
    - beim Start wird automatisch ein KNX/IP Routing-fähiger IP-Router gesucht und im Log angezeigt
    - mmh liest die Mutlicast-Adresse des IP-Routers aus und tritt der entsprechenden Gruppe bei
    - die Konfigurationsdatei heisst knx.csv und wird im misc-Ordner abgelegt
    - in der knx.csv angelegte Adressen werden konvertiert, ggfs. Actions ausgeführt und über den Broadcast gesendet
    - Es existiert eine neue Befehlsklasse KNX mit z.Zt. einem Befehl:
    SETVALUE={KNX-Adresse},{Wert}[,{Typ}[_{Subtyp}]] - sendet ein Telegramm auf den Bus
    {KNX-Adresse} - die KNX-Adresse (oder der entsprechende Name, falls in der knx.csv definiert) entweder dezimal oder 2-stufig oder 3-stufig
    {Wert} - der zu übertragende Wert
    {Typ} - notwendig, falls nicht in der knx.csv definiert, mögliche Werte: EIS1... EIS15 (z.zt. noch nicht alle unterstützt, siehe knx.csv weiter unten
    {Subtyp} - genauere Definition des EIS-Typs, z.Zt. nur bei EIS6 unterstützt, z.Zt. mögliche Werte: PERCENT oder DEGREE

    Beispiel: Winkel 357° an Adresse 15/1/80 (Adresse ist nicht in der knx.csv definiert):
    <KNX><SETVALUE=15/1/80,357,EIS6_DEGREE></KNX>
    Wenn die Adresse in der .csv definiert ist, lässt man den Datentyp weg:
    <KNX><SETVALUE=15/1/80,357></KNX>

    Beispiel: Eine komplette knx.csv mit allen z.Zt. unterstützten EIS-Typen:
    [CONFIG];
    ACTIVE;YES
    DEBUG;YES
    KNXADDR;15/7/99
    ADDRTYPE;3STEP

    [DATAPOINTS];
    15/1/99;ASCIISTRING;#;<SYS><SAY=\#></SYS>;EIS15
    15/1/98;2BYTEFLOAT;#;;EIS5
    15/1/97;BOOLEAN;#;;EIS1
    15/1/96;COUNTER;#;;EIS14
    15/1/95;ASCIICHAR;#;;EIS13
    15/1/93;32BITCOUNTER;#;;EIS11
    15/1/92;16BITCOUNTER;#;;EIS10
    15/1/91;DEGREE;#;;EIS6_DEGREE
    15/1/90;PERCENT;#;;EIS6_PERCENT


    ACTIVE - schaltet KNX/IP-Support ein und aus
    DEBUG - erzeugt erweiterte Logausgaben (Busmonitor)
    KNXADDR - lokale KNX-Adresse, die mmh verwendet (z. Zt. nur bei SETVALUE-Befehlen als Quelladresse)
    ADDRTYPE - wie in der hs.csv, Definiton des Adressformats für den Broadcast, Default: 3STEP

    die Bedeutung der Einträge der [DATAPOINTS]-Sektion entsprechen denen in der hs.csv, zzgl. des Datentyps (bzw. Subtyps) in einer zusätzlichen Spalte:
    {Adresse};{lokaler Name};{Match-Bedingung};{Action-Sequenz};{Datentyp}

    Version 1.0.85

    KNX:
    - knx.csv: KNXADDR;a/b/c in PHYSADDR;a.b.c umbenannt und Adressbereich erweitert, Default: 15.15.255
    - erweiterte Logausgaben im Debug-Modus (inkl. Source-Adresse)
    - Support für: EIS2-4,EIS7-9 und EIS12 (EIS12 nur Empfang)
    - Datentyp-Erkennung in der .csv entsprechend des .esf-Formats eingebaut, Typangabe nach alter Syntax weiterhin möglich, Typangabe per Kommando-Argument abgeschaltet.

    Logging:
    - Es können jetzt bis zu 16 Clients gleichzeitig auf den Logport (1039) connecten

    PrefPane:
    - mRemote UID-Anzeige und Lizenz-Request eingebaut. Hierfür mmh starten und anschließend das Lizenz-Sheet öffnen. In der mRemote-Subpage findet man unten die UID des letzten Clients, der zuletzt das gui-File vom mmh-Webserver heruntergeladen hat.
    Hinweis: Die Anzeige funktioniert nur, wenn das PrefPane zum Zeitpunkt des Herunterladens offen war.

    - Logging: Im Hauptfenster befindet sich unten rechts der Button "Show Log", der ein Logging-Sheet öffnet. Dort läßt sich das mmh-Log durchscrollen, löschen und abspeichern. Die Logeinträge entsprechen den Ausgaben auf Port 1039.
    Hinweis: Das Logging funktioniert nur, wenn das PrefPane geöffnet ist, das Logging-Sheet selbst muß nicht geöffnet bleiben.

    Version 1.0.86:

    - Bugfix: bei SYS-GET...INFOLDER wird jetzt eine alphabetisch sortierte Ausgabe erzwungen (Problem bei NAS-Laufwerken)
    - Bugfix: Sonderzeichen im Log-Output möglich
    - Bugfix: Absturz des Logging-Sheets behoben
    - Bugfix: langsame Ausgaben im Logging-Sheet behoben

    neue Features:

    Logging:
    - sämtliche Logausgaben wurden mit einem passenden Präfix versehen
    - der Logpuffer des Logging-Sheets ist 500KB groß
    - Im Logging-Sheet des PrefPanes lässt sich ein Filter setzen, entweder per Drop-Down-Menü oder per Eingabe von Freitext. Der Filter wirkt auch auf den Logpuffer.


    KNX:
    - erweiterte KNX-Debug Logausgaben (Routing-Counter,Priority,Repeat-Flag und interpretierter Wert, falls möglich)
    - erweitertes Logging bzgl. der Konfiguration

    .esf-Support:
    - per default wird im misc-Ordner eine Datei "knx.esf" gesucht. diese Voreinstellung lässt sich mit dem Eintrag
    ESF;{Dateiname inkl. Suffix}
    in der [CONFIG]-Sektion ändern.

    Durch die esf-Unterstützung hat sich das Format der [DATAPOINTS]-Sektion geändert:
    {Adresse};{Match};{Action}

    Pro Adresse lassen sich mehrere Actions definieren, wenn unterschiedliche Match-Bedingungen angegeben werden. Bei identischen Match-Bedingungen pro Adresse wird nur die erste gefundene Action ausgeführt.
    Beispiel:
    15/7/10;1;<sys><say=on></sys>
    15/7/10;0;<sys><say=off></sys>

    - manuelle Konfiguration der Multicast-Adresse:
    Das automatische Suchen des KNX-Routers lässt sich durch Definiton der Multicast-Adresse in der [CONFIG]-Sektion abschalten:
    MULTICAST_IP;{Multicast-Adresse}

    Version 1.0.87

    PrefPane:
    - Log-Filter "eventmanager"

    Version 1.0.88 mit folgenden Neuerungen:

    Neue fixed Sysvars:
    [TIME] und [DATE]: enthalten die aktuelle Uhrzeit bzw. das Datum. Das Format entspricht exakt den EIS3/EIS4-Typen, kann also ohne weitere Konvertierungen benutzt werden, um die Zeit auf den Bus zu senden.

    Ausserdem gibt es 2 dazu passende SYS-Befehle:
    GETTIME und GETDATE - liefern den Inhalt der jeweiligen Sysvar

    KNX:
    - neuer Befehl:
    GETVALUE={Gruppenadresse oder Name} - liest den Wert der angegebenen Gruppenadresse - das Rückgabeformat lautet: GETVALUE={GA}-{Name}={Wert}, also sehr ähnlich zu den Broadcast-Ausgaben. Es wird maximal eine Sekunde auf eine Antwort gewartet.

    Tunneling-Support:
    in der knx.csv können in der [CONFIG]-Sektion zwei neue Variablen definiert werden:
    CONNECTIONTYPE;{Typ} - legt den Verbindungstyp fest, mögliche Werte: TUNNELING oder ROUTING (default: ROUTING)
    DEVICE_IP;{Gateway IP} - legt die IP des KNX-Tunneling-Gerätes fest, mögliche Werte: {IP des Gerätes} oder AUTO für automatisches Suchen (default: AUTO)

    Entsprechend der CONNECTIONTYPE-Variablen wird entweder die Variable MULTICAST_IP (für Routing) oder DEVICE_IP (für Tunneling) gelesen. Es muß also nur das angegeben werden, was verwendet wird. Wenn die entsprechende Variable nicht definiert ist, wird AUTO angenommen.

    Der Bridge-Support Routing <-> Tunneling fehlt noch.


    KNX:
    - bei unbekannten Datentypen in der esf erfolgt ein Log-Eintrag und die entsprechende Definition wird ignoriert
    - Support für Uncertain-Typen (1,2,3,4,8 Bit und 1,2,3,4 Byte) - mehrere Bytes werden beim SETVALUE-Befehl durch Kommata getrennt
    - Broadcast: die KNX-Adresse wird jetzt mit ausgegeben
    - SETVALUE auf unbekannte Adressen wird ignoriert und es erfolgt ein Logeintrag
    - in der knx.csv erzwingt der Eintrag MULTICAST_IP;AUTO die automatische Routererkennung
    - Ausserdem: Verbesserung der Formatierung für EIS3 (füllende Nullen)


    Version 1.0.89:

    Bugfixes:
    - Das gui-Subdir wird nun automatisch angelegt.
    - Eine fehlende sysvars.csv verhindert den GUI-Start nicht mehr.
    - Die Verzeichnisstruktur wird nun automatisch beim Klick auf "Save & Restart" angelegt.

    KNX - Tunneling-Bridge:

    in der knx.csv
    CONNECTIONTYPE;TUNNELING_BRIDGE
    angeben.
    Ausserdem muß die MULTICAST_IP manuell gesetzt werden, damit andere KNX-Geräte den Mac finden können, z.B.:
    MULTICAST_IP;224.0.23.12

    Nach einem Neustart ist die Routing-Tunneling-Bridge aktiv, sobald ein Tunneling-Gateway gefunden wurde.
    Alle Geräte im Netz, die das Routing-Protokoll unterstützen, können über dieses eine Gateway gleichzeitig auf den KNX-Bus zugreifen.


    Eventserver - Erweiterungen:
    neue [CONFIG]-Option in der .csv:

    MATCHING;NORMAL oder FULL (Default: NORMAL)
    bei NORMAL verhält sich der Eventserver wie bisher, bei FULL so wie in der mremote.csv (\% und Mehrfach-Matches möglich)

    Außerdem sind mehrere .csv's pro Port möglich. Im Zuge dessen wurde das Logging erweitert: Bei einem gültigen Event wird die Zeilennummer des Matches und der Dateiname der .csv ausgegeben.

    - Vergleichendes Matching in der mremote.csv und im Eventserver:

    in der 2. Spalte der mremote.csv kann jetzt neben der Wildcard # und dem tatsächlichen Vergleichswert ein Vergleich vorgenommen werden:
    < kleiner
    > grösser
    = gleich (eigentlich überflüssig)
    Die Komparatoren müssen dem Vergleichswert voranstehen, es werden nur Zahlen interpretiert.
    Kombinationen der Komparatoren sind möglich.

    Beispiele:
    <=50 - kleiner oder gleich 50
    >=40 - größer oder gleich 40
    =>40 - größer oder gleich 40
    <>60 - ungleich 60
    =70 - gleich 70

    Gleiches gilt für die Eventserver-csv's, allerdings habe ich hier die Spalte für die Match-Bedingung zwecks Abwärtskompatibilität hinten angehängt. Da sich die mremote.csv und die Eventserver-csv's sowieso grundlegend unterscheiden hielt ich es für sinnvoll, diesen Weg zu gehen.
    Das Format einer Eventserver-Zeile lautet also:
    {Match-String};{Action oder Scriptname};{Optionen};{Match-Bedingung}

    {Optionen} und {Match-Bedingung} sind natürlich weiterhin optional.


    Dann habe ich noch 2 Goodies für Dich:

    a) neuer universeller Format-String %c - gibt bestimmte Zeichen eines Strings aus.
    Format: {%c{Index}{,Länge}}

    Beispiele:
    GETTITLE =>Cafe Del Mar -> Normalfall
    GETTITLE{%c5,3} =>Del -> gibt den String ab Position 5 in der Länge 3 aus
    GETTITLE{%c5,14} =>Del Mar * Cafe -> gibt den String ab Position 5 in der Länge 14 aus. Da die gewünschte Länge des Strings größer ist als der verbleibende Rest des Strings, wird " * " eingefügt und vom Beginn des Strings erneut gelesen, bis die 14 Zeichen erreicht sind.
    Wenn der {Index}-Wert größer als die Stringlänge ist, wird er automatisch heruntergerechnet. Ein "Hinauslaufen" bei hohen {Index}-Werten ist also nicht möglich.

    b) COUNTER-Support:
    Counter werden wie Sysvars behandelt, werden jedoch nie gespeichert. Mit jedem Auslesen eines Counters wird der vorherige Wert um einen einstellbaren Schrittweite verändert. Dazu gibt es die passenden SYS-Befehle:
    SETCOUNTER={Name}{,Startwert}{,Schrittweite} - initialisiert den Counter {Name}, {Startwert} und {Schrittweite} sind optional. Default ist 0 für {Startwert} und 1 für {Schrittweite}
    SETCOUNTERSTEP={Name}{,Schrittweite} - ändert die Schrittweite eines bestehenden Counters {Name}, 0 für {Schrittweite} hält den Counter an
    GETCOUNTER={Name} - liefert den aktuellen Wert des Counters {Name}, ohne sie zu verändern
    GETALLCOUNTERS - liefert die aktuellen Werte aller Counter, ohne diese zu verändern

    In Befehlssequenzen kann mit [{Name}] auf den Counterwert zurückgegriffen werden (exakt wie bei den Sysvars, jedoch wird hier im Anschluß daran der jeweilige Counterwert um die Schrittweite verändert.

    -> Warum das Ganze? Text-Scrolling per KNX! :-)

    in die init.myh kommt:
    <SYS><SETCOUNTER=ITC></SYS>

    in die timer.csv kommt:
    ITT;INTERVAL;1;<ITUNES><GETTITLE{%c[ITC],14}></ITUNES>;AUTOSTART

    in eine eventserver csv (mit INTERNAL,OUT,ASCII,FULL) kommt:
    GETTITLE{\%}=\*|;<KNX><SETVALUE=1/5/5,\#></KNX>

    ... Viel Spass :-)))
    Angehängte Dateien
Lädt...
X