Ankündigung

Einklappen
Keine Ankündigung bisher.

Automatische Visu-Generierung

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    Automatische Visu-Generierung

    Chris,
    danke wieder für deine Hilfe!

    Zitat von Chris M. Beitrag anzeigen
    Grundsätzlich sollte das gehen. Ich habe diese Kombination aber nie getestet...
    => Vermutlich ist's nur eine Kleinigkeit wenn das nicht mag.
    pagejump funktioniert bei mir NUR in der Navbar. Dort allerdings perfekt. Innerhalb der Seite - ob 2d oder normales Layout - funktioniert es nicht.
    Ich nutze die neueste SVN-Version und das metal-Design. Meine custom.css habe ich zum Testen wegverschoben, kann also keinen Einfluss haben.

    Zitat von Chris M. Beitrag anzeigen
    Ich kenne Deinen Ansatz nicht, aber evtl. könnte man daraus eine Art Tutorial / Best Practise machen, dem andere folgen könnten wenn sie wollen.
    Liebend gerne.

    Mein Schema für die Namenskürzel funktioniert so:
    (Beispiel Hauswirtschaftsraum)

    Licht schalten = LI_HW
    Schaltzustand = LS_HW
    Dimmwert setzen = LD_HW
    Dimmwert abfragen = LE_HW

    Diese Kürzel sind immer das jeweils erste Wort der GA-Bezeichnung. Meine eibga.conf sieht dann so aus (Ausschnitt):

    Code:
    [1/2/20]
    DPTId = 1
    DPTSubId = 1.001
    name = LI_HW Schalten (Dali G Kanal 2 324W) KG Hauswirtschaft
    ...
    Wie man erkennen kann, steht in der Langbezeichnung auch noch weitere Information: die Dali-Kabelbezeichnung, die Kanalnummer, die Wattzahl, der Ort. Warum das Ganze? Mein Perl-Skript liest das ein und generiert einen dimmbaren Lichtschalter auf der Visu-Seite des Hauswirtschaftsraums.

    Und noch was: der wiregate-Daemon liest die eibga.conf ebenfalls ein und speichert zB folgendes ab:

    Code:
    $eibgaconf{'1/2/20'}{short}='LI_HW';
    $eibgaconf{'1/2/20'}{name}='LI_HW Schalten (Dali G Kanal 2 324W) KG Hauswirtschaft';
    $eibgaconf{'LI_HW'}{ga}='1/2/20';
    $eibgaconf{'1/2/20'}{DPTSubId}='1.001';
    Das kann man wiederum in Logiken verwenden. Beispiel: der MDT-Dali-Gateway kann für Dali-Einzelkanäle nur Dimmwerte direkt setzen. Er kann weder relativ dimmen, noch Dimmwerte lesen, noch schalten usw. Das Problem gibt es natürlich bei allen Dali-Einzelkanälen, und dafür gibt es dann eine Gruppe von Logiken im Logikprozessor, die diese Funktionen alle ersetzen. Das liest sich zB folgendermaßen:

    Code:
    for my $LI (grep /^LI_\S*$/, keys %eibgaconf)
    {
        my $name=$eibgaconf{$LI}{name};
        my $licht=$LI; $licht=~s/^LI_//;
        my ($LS,$LD,$LE)=('LS_'.$licht,'LD_'.$licht,'LE_'.$licht);
    
        if($name=~/Dali.*Kanal/i)
        {
            # Auf einen Schaltbefehl auf einem Einzelkanal einen Wert senden
            $logic{$LI.'_LD'} = { receive=>$LI, transmit=>$LD,
                                  translate => sub {
                                      return 0 unless int($input)>0;
                                      return 80;
                                  },
            };
    
            # Auf einen Relativdimmbefehl hin den Absolutwert senden
            $logic{$LR.'_LD'} = { receive=>$LR, transmit=>$LD,
                                  translate => sub { $state=0 unless defined $state;
                                                     return limit(0,$state-int($input*3.125),100);
                                  },
            };
    
            # Auf einen Dimmbefehl die Rueckmeldung des Schaltzustandes und Dimmwertes senden (sendet das Gateway nicht selbst)
            $logic{$LD.'_LS'} = { receive=>$LD, transmit=>$LS,
                                  translate => sub { int($input)>0 } };
    
            $logic{$LD.'_LE'} = { receive=>$LD, transmit=>$LE,
                                  translate => sub { return $input; } };
    
            # Auf einen Anschaltbefehl eines Praesenzmelders nachts einen reduzierten Dimmwert hinterherschicken
            $logic{$LD.'_pm_dim'} = { receive=>$LD, transmit=>$LD,
                                      translate => sub {
                                          return undef unless $msg{sender}=~m/^P_/ && $night && int($input)>0;
                                          return undef if int($input)<=5;
                                          return 5;
                                      },
            };
    
        }
        elsif($name=~/Dali.*Gruppe/i)
       {
    ....
    }
    In der letzten Logik (Präsenzmelder) nutze ich noch eine weitere Datei: die eibpa.conf. Diese besteht aus einer Liste von physikalischen Adressen und Bezeichnungen:

    Code:
    ...
    A_MDT_J3 1.0.11
    A_MDT_HZ1 1.0.12
    A_MDT_HZ2 1.0.13
    S_Wetter 1.0.14
    B_Strom1 1.0.15
    P_E 1.0.27
    P_HW 1.0.28
    P_F1 1.0.29
    P_D1 1.0.30
    ...
    Auch hier steckt wieder ein Code drin: alle Präsenzmelder fangen mit "P_" an. Der Logikprozessor liest diese Datei ein und stellt den Logiken den Namen des Senders als Text in $msg{sender} zur Verfügung.

    Alles, um den Code lesbarer zu machen (und fehlerärmer, und leichter zu warten, ...).

    VG; Fry

    #2
    @Diego: hast recht. War im übrigen eine Ente - es funktioniert tadellos. Nun habe ich "nur noch" das Performanceproblem, an dessen Verbesserung ChrisM gerade arbeitet - das aber im anderen Thread.
    Danke nochmal an alle,
    VG,
    Fry

    PS. Habe nun grafische Seiten ergänzt. Statistik der Visu: 75 pages, davon 9 im 2D-Mode (grafisch). 1360 read-GAs, davon 719 unique. 10098 XML-Zeilen, 698K XML-Code (mit minimalem Whitespace). Ladezeit 19s, bis Werte angezeigt werden.

    Kommentar


      #3
      Wunderbar!

      Wir hätten dann gerne auch Bilder gesehen - oder noch besser - einen Live-Demozugang

      lg

      Stefan

      Kommentar


        #5
        Sehr schön!

        (Ich hab's mal vom Thread https://knx-user-forum.de/cometvisu/...nzahl-gas.html abgetrennt; das hier rechtfertigt ein eigenes Thema und der andere Thread hat ja einen anderen Fokus)
        TS2, B.IQ, DALI, WireGate für 1wire so wie Server für Logik und als KNX Visu die CometVisu auf HomeCockpit Minor. - Bitte keine PNs, Fragen gehören in das Forum, damit jeder was von den Antworten hat!

        Kommentar


          #6
          Hi,

          im Bereich Tür - Tueröffner gibt es einen Button für die Garage der aus drei Teilen besteht, ein Icon, eine Zustandsanzeige (offen/zu) und einen Button zum öffnen.

          Kannst du mir den Teil der xml zeigen, ich versuch mich da seit geraumer zeit dran mit Editor und gefährlichem Halbwissen, aber bekomme es nicht hin.

          Wäre toll wenn du mir helfen kannst

          Wanni

          Kommentar


            #7
            Code:
            <text align="right"><layout colspan="1" /><label><icon name="fts_garage_door_50" flavour="sodium" color="orange"/>Tor</label></text>
            <info mapping="Open_Closed_Transit" styling="Red_Green_Yellow" align="left"><layout colspan="1"/><address transform="DPT:5.008" mode="read">...</address></info>
            <trigger value="1" align="left" mapping="Do_Close_Open_Tor"><layout colspan="1"/><address transform="DPT:1.001" mode="write">...</address></trigger>
            <trigger value="0" align="left" mapping="Do_Close_Open_Tor"><layout colspan="1"/><address transform="DPT:1.001" mode="write">...</address></trigger>
            (an den Stellen mit "..." stehen die Gruppenadressen), und unter Mappings steht:

            Code:
                  <mapping name="Open_Closed_Transit">
                    <entry value="1">
                      <icon name="fts_garage_door_100" color="green"/>
                    </entry>
                    <entry value="0">
                      <icon name="fts_garage_door_10" color="orange"/>
                    </entry>
                    <entry value="2">
                      <icon name="fts_garage_door_50" color="red"/>
                    </entry>
                  </mapping>
            ...
                  <mapping name="Do_Close_Open_Tor">
                    <entry value="0">
                      <icon name="control_arrow_down" color="orange"/>
                    </entry>
                    <entry value="1">
                      <icon name="control_arrow_up" color="orange"/>
                    </entry>
                  </mapping>

            Kommentar


              #8
              So muss das, ich wünsche mir die "Auto-Visu" seit über 6J aber der Weihnachtsmann hat sie nie geliefert
              Mir ist egal wie sie aussieht (das findet man nur beim Hauskauf+3M wichtig, wegen dem NBF)
              (für ne Auto-Visu ist die aber schon fast zu hübsch, ober?)

              Also, ich hätte noch 100 Anregungen dazu; Weitermachen!!
              Automatisch aus der ETS

              Makki
              EIB/KNX & WireGate & HS3, Russound,mpd,vdr,DM8000, DALI, DMX
              -> Bitte KEINE PNs!

              Kommentar


                #9
                Naja, "Auto-Visu" ist auch übertrieben. Das Perl-Skript, das aus eibga.conf (und diversen anderen Configs) die Visu generiert - übrigens jede Nacht neu - ist alles andere als automatisch entstanden, und die Mühe im konsequenten Vergeben von Shortcuts für die GAs muss man ja auch aufwenden.

                Noch was zum Perl-Skript: dieses arbeitet massiv mit Perls regular expression. Vornehm könnte man sagen, Methoden der Computeralgebra. Ich starte mit einem XML-Text, der wie folgt aussieht:

                Code:
                <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
                
                <pages xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" lib_version="8" design="metal" xsi:noNamespaceSchemaLocation="../../visu_config.xsd" max_mobile_screen_widt\
                h="480" scroll_speed="0">
                  <meta>
                    --plugins--
                    --mappings--
                    --stylings--
                  </meta>
                
                  <page name="Root">
                    <navbar position="top" scope="0">
                      --navbar Root_top--
                    </navbar>
                
                    <navbar position="left" dynamic="true" width="60px" scope="0">
                      --navbar Root_left--
                    </navbar>
                
                  --header definitions Root--
                  --page definition Root--
                  --footer definitions Root--
                
                  --subpage definitions Root--
                  </page>
                
                </pages>
                Die Ausdrücke "--...--" haben Platzhalterfunktion und werden mittels Perls regexp-Replacefunktionen nach und nach erweitert. Dabei werden auch wieder neue Platzhalter reingetan usw. Am Ende werden dann die GA-Shortcuts durch numerische GAs ersetzt, die korrekten DPTs eingesetzt, utf-8-Sonderzeichen für Umlaute o.ä. eingesetzt und so weiter.

                Mit dieser "algebraischen" Art, die Visu zu erzeugen, ist es übrigens auch überhaupt kein Problem, verschiedene Versionen zu erzeugen. So habe ich eine mit ~1300 pagejumps ("Luxusversion" mit besserer Navigation) und eine mit nur ~150 pagejumps.

                VG, Fry

                Kommentar


                  #10
                  So, da ich hin und wieder gefragt werde: hier eine verkürzte "Demo", mit der die grafischen Visu-Seiten meiner Visu erzeugt werden.

                  Im Paket enthalten:
                  * die neun Hintergrundbilder
                  * ein Ausschnitt aus meiner eibga.conf, der alle benötigten GAs enthält
                  * das Skript mkvisu, das die Seiten erzeugt
                  * Installationsanweisungen:

                  Code:
                  Copy mkvisu somewhere and make it executable
                  Copy etc/wiregate/eibga.conf to /etc/wiregate/eibga.conf. BE SURE TO BACKUP YOUR ORIGINAL eibga.conf !
                  Copy var/www/visu/config/media/* to /var/www/visu/config/media
                  Run mkvisu. It will generate a file /var/www/visu/config/visu_config.xml
                  Enjoy the demo!
                  Ich schreib's nochmal: Die /etc/wiregate/eibga.conf sowie eure /var/www/visu/config/visu_config.xml vorher sichern! Beide werden überschrieben.

                  Natürlich werden bei euch die Taster nicht funktionieren, aber wen es interessiert, der kann im Skript mkvisu sicher Ideen für eine eigene Visu-Erzeugung sammeln.

                  Notabene: die nicht-grafischen Seiten meiner Visu werden ähnlich erzeugt, aber der Sourcecode ist deutlich komplexer.

                  Vorteil dieser Art der Visu-Erzeugung: das Skript sieht dem GA-Namen an, um was es sich handelt (Licht, Jalousie etc). Auch die DPTs müssen nicht angegeben werden, die holt es sich aus der eibga.conf.

                  Have fun,
                  Fry

                  PS. Musste die Hintergrundbilder auf vier ZIP-Dateien verteilen wegen Restriktionen der Plattform, sorry.
                  Angehängte Dateien

                  Kommentar

                  Lädt...
                  X