Ankündigung

Einklappen
Keine Ankündigung bisher.

[mmh] Rechenoperationen

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

    [mmh] Rechenoperationen

    Hallo,

    ich möchte einen KNX-Temperaturwert über einen Befehl um 0,5C° erhöhen.
    Über ein Event schreibe ich die Temperatur in eine Variable
    <KNX><3/1/2\%=\*></KNX>;<SYS><SETVAR=STEMPWOH,\#></SYS>
    das macht er brav.

    Über den Join soll der Wert gesendet werden
    460;1;<KNX><SETVALUE=3/1/3,[STEMPWOH]></KNX>

    Aber da muss ja noch was rechnen!

    Ich hatte mit Sascha schon einmal darüber getipselt aber das will nicht.

    <SYS><GETVAR{%+0.5}=STEMPWOH></SYS> liefert mir:
    <SYS>GETVAR{%+0.5}=0.5|OK></SYS>
    Man könnte meinen, kein Wert da der mit 0.5 addiert werden soll?

    Aber sende ich jetzt SYS><GETVAR=STEMPWOH></SYS> kommt das so zurück:
    <SYS>GETVAR=21.00|OK></SYS>

    <SYS><SETVAR=[STEMPWOH]{%+0.50}></SYS liefert mir:
    Parser:command: SYS – SETVAR=21.50

    Aber wie diesen WERT wieder in die Systemvariable schreiben.
    Über ein weiteres EVENT das auf LOG hört will das nicht.

    @ Sascha SOS
    Gruß

    Olli

    #2
    Magst das nicht lieber über einen Slider lösen? und die Sollwertverschiebung 1:1 übertragen...

    So wird einem ja schon vom mitlesen schwindelig....

    LG

    Kommentar


      #3
      Mit dem Slider… werde ich mal testen. Aber der o.g. Ansatz muss auch lösbar sein?
      Gruß

      Olli

      Kommentar


        #4
        Hallo Olli,

        grundsätzlich sollte das eigentlich möglich sein, wenn es nicht folgendes Problem gäbe: die Rechenoperation in {} beziehen sich immer auf das gesamte Argument. Das beißt sich leider mit der Tatsache, daß viele Befehle mehrere Argumente erwarten, die mit "," getrennt werden. Da mmh nicht mit Buchstaben rechnen kann, läuft die Argumentberechnung bei solchen Befehlen leider ins Leere. Der GETVALUE-Befehle liefert seit einigen Versionen immer den Namen der Variable mit, deshalb funktioniert die von mir genannte Lösung nicht (mehr), sorry dafür!

        Es gibt allerdings einen Workaround mit Hilfe eines Commandservers. Falls Du unbedingt darauf bestehst , stelle ich es gerne als Beispiel ein.

        PS: Ich habe Dich nicht vergessen! Sobald es irgendwie geht, melde ich mich!
        Gruß

        Sascha

        Kommentar


          #5
          Also ich mache das über einen Commandserver, da ich die Werte dort besser manipulieren kann. Ziel über einen Slider die Basissollwert - Verschiebung zwischen 17-27° zu verschieben.

          temp.csv

          Code:
          [CONFIG];
          SERVERIP;192.168.0.6
          SERVERPORT;1037
          SERVERMODE;ASCII
          SERVERTIMEOUT;0
          SERVERPROTOCOL;UDP
          
          [COMMANDS];
          WOHNEN;<KNX><SETVALUE=4/0/44,\#></KNX>;;{%+17}
          SCHLAFEN;<KNX><SETVALUE=4/0/34,\#></KNX>;;{%+17}
          ESSEN;<KNX><SETVALUE=4/0/64,\#></KNX>;;{%+17}
          KAMIN;<KNX><SETVALUE=4/0/94,\#></KNX>;;{%+17}
          Hier sind die diversen Objekte für die Temperaturen vordefiniert und erwarten beim Aufruf entsprechenden Value "/#" dieser Value wird dann um "10" erhöht.

          die Definition in der mremote.csv dann wie folgt:

          [ANALOG]
          2541;#;10;<TEMP><KAMIN=\#></TEMP>;


          Der Slider wird auf den Wert 10 skaliert, sendet also 0-10. Die Addition in der Commandserver Definition wirkt also wie ein Offset, so das real der Wert 17-27 geschrieben wird.

          LG

          Kommentar


            #6
            @Mike
            Danke für das Beispiel werde ich ausprobieren…

            @Sascha
            Bin für jedes Beispiel dankbar...

            Zitat von no sleep Beitrag anzeigen
            PS: Ich habe Dich nicht vergessen! Sobald es irgendwie geht, melde ich mich!
            kein Problem lass dir Zeit die Familie geht vor.
            Gruß

            Olli

            Kommentar


              #7
              Zitat von Olli.O Beitrag anzeigen
              @Sascha
              Bin für jedes Beispiel dankbar...
              OK, dann kommt hier meine temp.csv (aus dem addons-Ordner):
              Code:
              [CONFIG];
              SERVERIP;127.0.0.1
              SERVERPORT;1037
              SERVERMODE;ASCII
              SERVERTIMEOUT;0
              SERVERPROTOCOL;UDP
              
              [COMMANDS];
              SET;<SYS><SETVAR=STEMPWOH,\#></SYS>;;
              SET_HIGH;<SYS><SETVAR=STEMPWOH_HIGH,\#></SYS>;;{%+0.5}
              SET_LOW;<SYS><SETVAR=STEMPWOH_LOW,\#></SYS>;;{%-0.5}
              Anhand der [CONFIG]-Sektion sieht man, daß mmh über diesen Commandserver mit sich selbst spricht.
              Es werden 3 Kommandos definiert:
              <TEMP><SET={Wert}></TEMP> setzt die Systemvariable STEMPWOH auf {Wert}
              <TEMP><SET_HIGH={Wert}></TEMP> setzt die Systemvariable STEMPWOH_HIGH auf {Wert}+0.5
              <TEMP><SET_LOW={Wert}></TEMP> setzt die Systemvariable STEMPWOH_LOW auf {Wert}-0.5

              Je nach Anwendungsfall benutzt Du dann in Deiner Kommandosequenz entweder STEMPWOH_HIGH oder STEMPWOH_LOW und bist fertig.

              Um die Variablen automatisch gesetzt zu bekommen, verwendest Du folgende Sequenz:
              <TEMP><SET=\#><SET_HIGH=\#><SET_LOW=\#></TEMP>
              (statt Deines <SYS><SETVAR=STEMPWOH,\#></SYS>)
              Gruß

              Sascha

              Kommentar


                #8
                Wie sagt man doch gleich ...

                Entdecke die Möglichkeiten

                LG

                Kommentar


                  #9
                  Sascha, Besten Dank....
                  Gruß

                  Olli

                  Kommentar


                    #10
                    @Olli: Gern geschehen!
                    Gruß

                    Sascha

                    Kommentar

                    Lädt...
                    X