Ankündigung

Einklappen
Keine Ankündigung bisher.

EibPC und web Oberfläche

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

    #16
    Zitat von stromer64 Beitrag anzeigen
    Hm, vielleicht habe ich es schlecht beschrieben.
    Also: Ich nutze 4 Ausgänge einer Universal-Tasterschnittstelle.
    Du brauchst also eine Dekodierung von einem Wert 0 ... 15 auf Einzelbits.

    Vielleicht macht der Code unten in etwa das, was Du möchtest:

    Code:
    /* Variable für die Lautstärke dem EibPC bekanntmachen */
    AudioVolume = 0u08; /* 0 ... 15 */
    
    /* systemstart() geht beim Starten des EibPC-Programms auf EIN. Es wird dann die Lautstärke auf 0100 = 4 unsigned byte gesetzt */
    if systemstart() then AudioVolume = 4u08 endif
    
    /* Aus AudioVolume werden jeweils Bits 1...4 isoliert und dann als Variable mit EIN bzw. AUS belegt. */
    /* Es wird bei Änderung von AudioVolumen dann immer gleich neu berechnet, ob sich das Bit geändert hat */
    GABit1 = convert( mod( AudioVolume, 2u08 ), 0b01)
    GABit2 = convert( mod (div( AudioVolume, 2u08 ),2), 0b01)
    GABit3 = convert( mod (div( AudioVolume, 4u08 ),2), 0b01)
    GABit4 = convert( mod (div( AudioVolume, 8u08 ),2), 0b01)
    
    /* sollte sich im vorigen Programmlauf eine Variable geändert haben, so schreiben wir deren Wert auf die passende Gruppenadresse deines LED-Aktors */
    /* Du mußt natürlich statt '9/9/1'b01 die jeweils korrekte Gruppenadresse im Programm eintragen */
    if change( GABit1 ) then write( '9/9/1'b01, GABit1 ) endif
    if change( GABit2 ) then write( '9/9/2'b01, GABit2 ) endif
    if change( GABit3 ) then write( '9/9/3'b01, GABit3 ) endif
    if change( GABit4 ) then write( '9/9/4'b01, GABit4 ) endif
    Der Code sollte also sicherstellen, das bei Änderung der Variable AudioVolume auch deine LED-Aktoren mit den richtigen Einstellungen versorgt werden. Aber Achtung: Es wird keine Rücksicht auf Spikes genommen die durch Änderung der Bitmuster vorkommen könnten.
    Wenn das wichtig wird, müßte man sich eine andere Lösung überlegen.

    Ich hoffe, jetzt wird's klarer.

    Gruß,
    Bernd

    Kommentar


      #17
      Hallo Bernd,
      danke für den Lösungsvorschlag.
      Aber: Um was gehts da eigentlich ?
      Auf Grund meiner minimalerfahrung tapp ich da voll im Dunkeln und find den Lichtschalter nicht.
      Kanns Du mir das bitte ein wenig beleuchten ?
      Gruß Stefan L.

      Kommentar


        #18
        Zitat von enertegus Beitrag anzeigen
        Das wäre etwa so;
        [highlight=epc]
        Lautstaerke=0
        // "Lauter-1/2/3": GA für lauter
        // "Leiser-1/2/4": GA für leiser
        // "Lautstaerke-1/2/5": GA für die Lautstärke
        if "Lauter-1/2/3" then {
        Lautstaerke=Lautstaerke+1;
        if Lautstaerke=0 then Lautstaerke=255 endif;
        write("Lautstaerke-1/2/5",Lautstaerke)
        } endif
        if "Leiser-1/2/4" then {
        Lautstaerke=Lautstaerke-1;
        if Lautstaerke=255 then Lautstaerke=0 endif;
        write("Lautstaerke-1/2/5",Lautstaerke)
        } endif
        // Klingel geht
        if "Klingel-1/2/5" and Lautstaerke>0 then {
        write("Lautstaerke-1/2/5", 30)
        }endif
        // Nach 10 Sekunden wiederherstellen
        if delay("Klingel-1/2/5" and Lautstaerke>0,10000u64) then {
        write("Lautstaerke-1/2/5",Lautstaerke)
        }endif
        [/highlight]
        Und immer wieder bringt er einen Kompilierungsfehler bei Zeile 5 .. gruml
        Was könnt ich bloß falsch machen ????
        Gruß Stefan

        Kommentar


          #19
          Du machst nix falsch, es gibt einmal if und 2 mal endif da stimmt der Code nicht. Leider lässt der Alkoholpegel ein debuggen im Moment nicht zu ;(


          Sent from my iPhone using Tapatalk

          Kommentar


            #20
            Zitat von stromer64 Beitrag anzeigen
            Und immer wieder bringt er einen Kompilierungsfehler bei Zeile 5.
            Was könnt ich bloß falsch machen ????
            Den Vergleich beim "if Lautstaerke == 0u08 then Lautstaerke=255u08 endif;"

            mit zwei Gleichheitszeichen schreiben.

            Und so, wie Dein Code da derzeit steht, wird er nicht so funktionieren wie Du ihn Dir vorstellst. Die If-Abfragen werden nur einmal funktionieren aufgrund des Validierungsschemas (Siehe Handbuch).
            In diesem Falle ist die Funktion event() Dein Freund.
            Wenn ein Event auftritt und eine bestimmte Bedingung zutrifft, dann mache Inhalt der If-Schleife.

            Gruß,
            Bernd

            Kommentar


              #21
              Zitat von stromer64 Beitrag anzeigen
              Und immer wieder bringt er einen Kompilierungsfehler bei Zeile 5 .. gruml
              Was könnt ich bloß falsch machen ????
              Gruß Stefan
              Die Gruppenadressen sind natürlich auch nicht die richtigen, das alleine wird schon ein Problem sein, neben dem Copy und Paste Fehler und meinen peinlichen "=" Fehler (Vergleich mit "==").
              [highlight=epc]
              Lautstaerke=0
              // "Lauter-1/2/3": GA für lauter
              // "Leiser-1/2/4": GA für leiser
              // "Lautstaerke-1/2/5": GA für die Lautstärke
              if "Lauter-1/2/3" then {
              Lautstaerke=Lautstaerke+1;
              if Lautstaerke==0 then Lautstaerke=255 endif;
              write("Lautstaerke-1/2/5",Lautstaerke)
              } endif
              if "Leiser-1/2/4" then {
              Lautstaerke=Lautstaerke-1;
              if Lautstaerke==255 then Lautstaerke=0;
              write("Lautstaerke-1/2/5",Lautstaerke)
              } endif
              // Klingel geht
              if "Klingel-1/2/5" and Lautstaerke>0 then {
              write("Lautstaerke-1/2/5", 30)
              }endif
              // Nach 10 Sekunden wiederherstellen
              if delay("Klingel-1/2/5" and Lautstaerke>0,10000u64) then {
              write("Lautstaerke-1/2/5",Lautstaerke)
              }endif
              [/highlight]
              offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
              Enertex Produkte kaufen

              Kommentar


                #22
                Hallo Bernd,
                stimmt, ohne die event Funktion zählt er nicht richtig.
                Das trifft auch auf das Klingeln zu.
                Ich habe probehalber den Wert auf einen Dimmer gelegt.
                Ich kann den Wert z.B 200 nur einmal vorgeben.
                Mit event Taster and Taster==EIN geht es.
                Problem: Steht der Zähler auf Null und ich drücke rückwärts, fängt
                er bei 255 an, obwohl ich als Obergrenze beim Auf- und Abzählen
                17 (bis 16 soll er zählen) vorgegeben habe.
                Wobei das auch nicht ideal ist, da er dann von Lautstärke Null, voll auf 16 zählt.
                Das weitere Problem ist, dass die LED's nicht auf einmal schalten, sondern man sieht die nacheinander Abarbeitung der Zeile. Somit überlappt sich das Leuchten der LED's bei manchen Zahlen.
                Übrigens, Dank an Enertegus, das mit dem == war der Hänger.
                Gruß Stefan L.

                Kommentar


                  #23
                  Zitat von stromer64 Beitrag anzeigen
                  Hallo Bernd,
                  Problem: Steht der Zähler auf Null und ich drücke rückwärts, fängt
                  er bei 255 an, obwohl ich als Obergrenze beim Auf- und Abzählen
                  Das ist völlig "normal":8 Bit sind ohne Vorzeichen Zahlen zwischen 0 und 255. Wenn Du von 0 die 1 abziehst, kommt man automatisch auf 255.
                  offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
                  Enertex Produkte kaufen

                  Kommentar


                    #24
                    Moin Stefan,

                    Du kannst ja mal Deinen aktuellen Source posten ...

                    Das weitere Problem ist, dass die LED's nicht auf einmal schalten, sondern man sieht die nacheinander Abarbeitung der Zeile.
                    Ja, das ist die Geschichte mit den Spikes bzw. Jitter. In der Digitaltechnik werden die einzelnen Schaltfunktionen zusammengefasst um diese (temporären) Fehlschaltungen zu verhindern. Das kann tatsächlich nur durch Lookup-Tabellen reduziert werden. Übrigens ein Grund warum der Gray Code erfunden wurde. Dann ändert sich nur jeweils genau ein Bit vom vorigen zu nächsten Zustand. Aber aufgrund der komplexität würde ich es einfach so lassen.

                    Gruß,
                    Bernd

                    Kommentar


                      #25
                      Hallo Bernd,

                      sorry, ist ein wenig unübersichtlich.
                      Wie bekomme ich die Zeilen farbig markiert ?

                      Naja, Ihr Profis werdet drüber lächeln , aber Wernher von Braun ist auch sitzengebleiben:
                      [highlight=epc]Lautstaerke=4
                      // "Taster A-12/2/8": GA für lauter
                      // "Taster B-12/2/9": GA für leiser
                      // "Hobby Deckenl. Wert-1/0/20": Wert für die Lautstärke
                      if event ("Taster A-12/2/8") and ("Taster A-12/2/8"==EIN) then { Lautstaerke=Lautstaerke+1; if Lautstaerke==17 then Lautstaerke=0 endif; write("Hobby Deckenl. Wert-1/0/20",Lautstaerke) } endif
                      if event ("Taster B-12/2/9") and ("Taster B-12/2/9"==EIN) then { Lautstaerke=Lautstaerke-1; if Lautstaerke==0 then Lautstaerke=17 endif; write("Hobby Deckenl. Wert-1/0/20",Lautstaerke) } endif
                      // Klingel geht
                      if event ("Taster C-12/2/10") and ("Taster C-12/2/10"==EIN) and Lautstaerke>0 then {write("Hobby Deckenl. Wert-1/0/20",200) }endif
                      // Nach 5 Sekunden wiederherstellen
                      if delay((event ("Taster C-12/2/10") and ("Taster C-12/2/10"==EIN)) and Lautstaerke>0,5000u64) then {write("Hobby Deckenl. Wert-1/0/20",Lautstaerke) }endif
                      //Definition der LED Zuweisung
                      // Laut 0
                      if Lautstaerke==0 then write ("LED 5-12/2/4",AUS); write ("LED 6-12/2/5",AUS); write ("LED 7-12/2/6",AUS); write ("LED 8-12/2/7",AUS) endif
                      // Laut 1
                      if Lautstaerke==1 then write ("LED 5-12/2/4",EIN); write ("LED 6-12/2/5",AUS); write ("LED 7-12/2/6",AUS); write ("LED 8-12/2/7",AUS) endif
                      // Laut 2
                      if Lautstaerke==2 then write ("LED 5-12/2/4",AUS); write ("LED 6-12/2/5",EIN); write ("LED 7-12/2/6",AUS); write ("LED 8-12/2/7",AUS) endif
                      // Laut 3
                      if Lautstaerke==3 then write ("LED 5-12/2/4",EIN); write ("LED 6-12/2/5",EIN); write ("LED 7-12/2/6",AUS); write ("LED 8-12/2/7",AUS) endif
                      // Laut 4
                      if Lautstaerke==4 then write ("LED 5-12/2/4",AUS); write ("LED 6-12/2/5",AUS); write ("LED 7-12/2/6",EIN); write ("LED 8-12/2/7",AUS) endif
                      // Laut 5
                      if Lautstaerke==5 then write ("LED 5-12/2/4",EIN); write ("LED 6-12/2/5",AUS); write ("LED 7-12/2/6",EIN); write ("LED 8-12/2/7",AUS) endif
                      // Laut 6
                      if Lautstaerke==6 then write ("LED 5-12/2/4",AUS); write ("LED 6-12/2/5",EIN); write ("LED 7-12/2/6",EIN); write ("LED 8-12/2/7",AUS) endif
                      // Laut 7
                      if Lautstaerke==7 then write ("LED 5-12/2/4",EIN); write ("LED 6-12/2/5",EIN); write ("LED 7-12/2/6",EIN); write ("LED 8-12/2/7",AUS) endif
                      // Laut 8
                      if Lautstaerke==8 then write ("LED 5-12/2/4",AUS); write ("LED 6-12/2/5",AUS); write ("LED 7-12/2/6",AUS); write ("LED 8-12/2/7",EIN) endif
                      // Laut 9
                      if Lautstaerke==9 then write ("LED 5-12/2/4",EIN); write ("LED 6-12/2/5",AUS); write ("LED 7-12/2/6",AUS); write ("LED 8-12/2/7",EIN) endif
                      // Laut 10
                      if Lautstaerke==10 then write ("LED 5-12/2/4",AUS); write ("LED 6-12/2/5",EIN); write ("LED 7-12/2/6",AUS); write ("LED 8-12/2/7",EIN) endif
                      // Laut 11
                      if Lautstaerke==11 then write ("LED 5-12/2/4",EIN); write ("LED 6-12/2/5",AUS); write ("LED 7-12/2/6",AUS); write ("LED 8-12/2/7",EIN) endif
                      // Laut 12
                      if Lautstaerke==12 then write ("LED 5-12/2/4",EIN); write ("LED 6-12/2/5",EIN); write ("LED 7-12/2/6",AUS); write ("LED 8-12/2/7",EIN) endif
                      // Laut 13
                      if Lautstaerke==13 then write ("LED 5-12/2/4",AUS); write ("LED 6-12/2/5",AUS); write ("LED 7-12/2/6",EIN); write ("LED 8-12/2/7",EIN) endif
                      // Laut 14
                      if Lautstaerke==14 then write ("LED 5-12/2/4",EIN); write ("LED 6-12/2/5",AUS); write ("LED 7-12/2/6",EIN); write ("LED 8-12/2/7",EIN) endif
                      // Laut 15
                      if Lautstaerke==15 then write ("LED 5-12/2/4",AUS); write ("LED 6-12/2/5",EIN); write ("LED 7-12/2/6",EIN); write ("LED 8-12/2/7",EIN) endif
                      // Laut 16
                      if Lautstaerke==16 then write ("LED 5-12/2/4",EIN); write ("LED 6-12/2/5",EIN); write ("LED 7-12/2/6",EIN); write ("LED 8-12/2/7",EIN) endif[/highlight]
                      Wie kann ich beim rückwärts Zählen den Sprung nach 255 vermeiden ?

                      Über Sonos habe ich hier auch schon gelesen.
                      Kennst Du, oder ein mitlesender, einen aktuelleren Stand?

                      Gruß Stefan L.

                      Kommentar


                        #26
                        Zitat von stromer64 Beitrag anzeigen
                        sorry, ist ein wenig unübersichtlich.
                        Wie bekomme ich die Zeilen farbig markiert ?
                        Hoi Stefan

                        In dem Du den Code in "["highlight=epc"] ["/highlight"]" steckst...
                        Ohne die Anführungszeichen
                        Grüsse Bodo
                        Fragen gehören ins Forum, und nicht in mein Postfach;
                        EibPC-Fan; Wiregate-Fan; Timberwolf-Fan mit 30x 1-Wire Sensoren;

                        Kommentar


                          #27
                          Zitat von bmx Beitrag anzeigen
                          Moin Stefan,
                          Wenn Du den Code in "["highlight=epc"] ["/highlight"]" steckst...
                          Ohne die Anführungszeichen
                          Hab ich mir mal eben erlaubt zu ändern...
                          offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
                          Enertex Produkte kaufen

                          Kommentar


                            #28
                            Zitat von stromer64 Beitrag anzeigen
                            Hallo Bernd,
                            Wie kann ich beim rückwärts Zählen den Sprung nach 255 vermeiden ?
                            [highlight=epc]
                            // Lautstärke >16 fängt alle unerlaubten Werte ab
                            if event ("Taster A-12/2/8") and ("Taster A-12/2/8"==EIN) then {
                            Lautstaerke=Lautstaerke+1;
                            if Lautstaerke>16 then Lautstaerke=0 endif;
                            write("Hobby Deckenl. Wert-1/0/20",Lautstaerke)
                            } endif
                            // Lautstärke =255 fängt den Überlauf ab.
                            if event ("Taster B-12/2/9") and ("Taster B-12/2/9"==EIN) then {
                            Lautstaerke=Lautstaerke-1;
                            if Lautstaerke==255 then Lautstaerke=0 endif;
                            write("Hobby Deckenl. Wert-1/0/20",Lautstaerke)
                            } endif
                            [/highlight]
                            alternativ zur 2. If-abfrage
                            [highlight=epc]
                            if event ("Taster B-12/2/9") and ("Taster B-12/2/9"==EIN) then {
                            if Lautstaerke>0 then Lautstaerke=Lautstaerke-1 endif;
                            write("Hobby Deckenl. Wert-1/0/20",Lautstaerke)
                            } endif
                            [/highlight]
                            offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
                            Enertex Produkte kaufen

                            Kommentar


                              #29
                              Na Prima.
                              Wenn man weiß wie, eigentlich ganz einfach.......
                              Dank

                              Kommentar


                                #30
                                Zitat von stromer64 Beitrag anzeigen
                                Na Prima.
                                Wenn man weiß wie, eigentlich ganz einfach.......
                                Dafür sind wir ja da...
                                offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
                                Enertex Produkte kaufen

                                Kommentar

                                Lädt...
                                X