Ankündigung

Einklappen
Keine Ankündigung bisher.

Größe der KNX-GA Queue auslesen

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

    #16
    Zitat von tobo Beitrag anzeigen
    Hi Steffen,

    die Anzahl der Telegramme auf dem Bus und in Edomi-KO kann ich mittels Elasticsearch nachvollziehen, das befülle ich mit den Daten aus dem MONLOG.

    Bildschirmfoto 2017-09-13 um 12.56.41.png

    Das gibt mir aber keinen Aufschluss darüber wann die Edomi-interne Queue ansteigt. Das erste sichtbare Peak zwischen 5 und 8 Uhr, da sind wir aufgestanden. Die Queue war da aber schon wieder bei knapp 5000 - in der Nacht vorher ist nicht zu sehen dass die Buslast steigt.
    Hi Tobo.

    Ein wenig OT.
    wie überträgst du die logs zu elastic?
    Lg
    Jean-Luc Picard: "Things are only impossible until they are not."

    Kommentar


      #17
      Zitat von gaert Beitrag anzeigen
      Du kannst Dir einen LBS basteln und die Anzahl in der Queue sodann auslesen:

      Code:
      select s0 from edomiLive.RAMsysProc where id=3
      liefert den aktuellen Wert der Spalte "s0" (dort wird die Anzahl abgelegt).
      Danke! LBS bauen wird mangels Programmierfähigkeit nichts, aber versuche mal die DB extern abzufragen.

      Kommentar


        #18
        Zitat von trollmar Beitrag anzeigen
        wie überträgst du die logs zu elastic?
        Hi Trollmar,

        Filebeat auf dem Edomi Server an Logstash, also ganz klassisch.

        EDIT: Lass mich wissen wenn Du es genauer brauchst, dann versuche ich das heute Abend mal detaillierter zu beschreiben.

        Gruß
        Zuletzt geändert von tobo; 14.09.2017, 16:10.

        Kommentar


          #19
          Zitat von tobo Beitrag anzeigen
          LBS bauen wird mangels Programmierfähigkeit nichts, aber versuche mal die DB extern abzufragen.
          Das hier muesste klappen (habs aber nicht ausprobiert):
          PHP-Code:
          ###[DEF]###
          [name        = GA-Queue ]

          [e#1  = Trigger    ]
          [e#2  = LogLevel]
          [a#1  = Groesse    ]

          ###[/DEF]###


          ###[HELP]###
          ###[/HELP]###


          ###[LBS]###
          <?
          function LB_LBSID($id) {
              if ($E=logic_getInputs($id)) {
                  if ($E[1]['refresh'] && $E[1]['value']) {
                      LB_LBSID_debug($id,"Starte LBS-Teil",7);
                      $mysqli=new mysqli("localhost","root","","edomiLive");
                      if ($mysqli->connect_errno) {
                          LB_LBSID_debug($id,"Fehler bei der MySQL Verbindung (".$mysqli->connect_errno."): ".$mysqli->connect_error,0);
                      } else {
                          $q="select s0 from RAMsysProc where id=3";
                          $res=$mysqli->query($q);
                          $v=array();
                          if ($mysqli->errno) {
                              LB_LBSID_debug($id,"Query nicht erfolgreich, Abbruch (".$mysqli->errno."): ".$mysqli->error,0);
                          } else {
                              if ($res->num_rows && $v=$res->fetch_row()) {
                                  logic_setOutput($id,1,$v[0]);
                              } else {
                                  LB_LBSID_debug($id,"Keinen Wert gefunden",5);
                              }
                              $res->close();
                          }
                          $mysqli->close();
                      }
                  }
              }
          }

          function LB_LBSID_debug($id,$s,$l=6) {
                  $a=array("Emergency","Alert","Critical","Error","Warning","Notice","Informational","Debug");
                  $E=logic_getInputs($id);
                  $DEBUG=$E[2]['value'];
                  $l<$DEBUG && writeToCustomLog("LBSLBSID",$l,"(ID$id) ".$a[$l].": ".$s);
          }
          ?>
          ###[/LBS]###

          ###[EXEC]###
          ###[/EXEC]###

          Kommentar


            #20
            tobo pack das al LBS in dein Edomi. E1 triggert die Abfrage.
            PHP-Code:
            ###[DEF]###
            [name    =  max KNX Queue]

            [e#1    trigger = Trigger                ]
            [a#1    = Max Queue                    ]


            ###[/DEF]###
            ###[HELP]###

            ###[/HELP]###
            ###[LBS]###
            <?
            function LB_LBSID($id) {

                if ($E=getLogicEingangDataAll($id)) {
                    if ($E[1]['refresh']==1){callLogicFunctionExec(LBSID,$id);}
                }
            }
            ?>
            ###[/LBS]###


            ###[EXEC]###
            <?
            require(dirname(__FILE__)."/../../../../main/include/php/incl_lbsexec.php");
            sql_connect();
            $file='/var/tmp/EDOMI_LBSID_'.$id.'.json';    
            if ($E=getLogicEingangDataAll($id)) {
                setLogicElementVar($id, 1,1);

                    mysql_connect("localhost","root","");
                        mysql_select_db('edomiLive');
                        $q = "select s0 from edomiLive.RAMsysProc where id=3";
                        $result = mysql_query($q);
                        $data = mysql_fetch_array($result);
                        $max =$data[0];
                        setLogicLinkAusgang($id, 1,$max);


            }
            ?>
            ###[/EXEC]###
            Zuletzt geändert von vento66; 14.09.2017, 23:34.

            Kommentar


              #21
              Danke euch beiden!

              Kommentar


                #22
                EXEC muss zwar nicht unbedingt sein in diesem Fall, aber schadet ja auch nicht

                Die Spalte ist übrigens s0 - nicht s3.

                Vielleicht noch ein Tipp am Rande: Für die mySQL-Abfragen gibt's entsprechende (undokumentierte) EDOMI-Funktionen - das Beispiel sähe dann so aus:

                PHP-Code:
                ...
                $table=sql_call("SELECT s0 FROM edomiLive.RAMsysProc WHERE id=3");
                if (
                $n=sql_result($table)) {
                    
                setLogicLinkAusgang($id,1,$n['s0']);
                }
                sql_close($table);
                ... 

                Oder als LBS (ohne EXEC) - ungetestet aus dem Ärmel:

                PHP-Code:
                ###[DEF]###
                [name        =s0-Abfrage        ]

                [e#1        =Trigger     ]

                [a#1        =s0            ]
                ###[/DEF]###


                ###[HELP]###
                ...
                ###[/HELP]###


                ###[LBS]###
                <?
                function LB_LBSID($id) {
                    if ($E=logic_getInputs($id)) {

                        if ($E[1]['value']!=0 && $E[1]['refresh']==1) {
                            $table=sql_call("SELECT s0 FROM edomiLive.RAMsysProc WHERE id=3");
                            if ($n=sql_result($table)) {
                                setLogicLinkAusgang($id,1,$n['s0']);
                            }
                            sql_close($table);
                        }

                    }
                }
                ?>
                ###[/LBS]###


                ###[EXEC]###
                <?

                ?>
                ###[/EXEC]###
                Zuletzt geändert von gaert; 14.09.2017, 21:28.
                EDOMI - Intelligente Steuerung und Visualisierung KNX-basierter Elektro-Installationen (http://www.edomi.de)

                Kommentar


                  #23
                  Zitat von gaert Beitrag anzeigen
                  Vielleicht noch ein Tipp am Rande: Für die mySQL-Abfragen gibt's entsprechende (undokumentierte) EDOMI-Funktionen
                  Hach, wie praktisch

                  Kommentar


                    #24
                    Oder?! Kann man auch aus diversen Werks-LBS abschauen...
                    EDOMI - Intelligente Steuerung und Visualisierung KNX-basierter Elektro-Installationen (http://www.edomi.de)

                    Kommentar


                      #25
                      Ja, koennte man
                      Aus rein akademischer Neugier: sind das intern keine persistenten Connections oder wieso ist da ein close bei?

                      Kommentar


                        #26
                        Das close ist eigentlich überflüssig. Aber ich habe dies konsequent (er war stets bemüht...) bei jeder Abfrage mit dabei für den Fall, dass sich bei PHP 10 oder so mal irgendwas ändert bezüglich mySQL-Implementierung. Spart dann ggf. ne Menge Arbeit, da man ja nur die entsprechende Funktion anpassen müsste.
                        EDOMI - Intelligente Steuerung und Visualisierung KNX-basierter Elektro-Installationen (http://www.edomi.de)

                        Kommentar


                          #27
                          Zitat von gaert Beitrag anzeigen
                          EXEC muss zwar nicht unbedingt sein in diesem Fall, aber schadet ja auch nicht

                          Die Spalte ist übrigens s0 - nicht s3.

                          Vielleicht noch ein Tipp am Rande: Für die mySQL-Abfragen gibt's entsprechende (undokumentierte) EDOMI-Funktionen - das Beispiel sähe dann so aus:

                          PHP-Code:
                          ...
                          $table=sql_call("SELECT s0 FROM edomiLive.RAMsysProc WHERE id=3");
                          if (
                          $n=sql_result($table)) {
                          setLogicLinkAusgang($id,1,$n['s0']);
                          }
                          sql_close($table);
                          ... 

                          Oder als LBS (ohne EXEC) - ungetestet aus dem Ärmel:

                          PHP-Code:
                          ###[DEF]###
                          [name =s0-Abfrage ]

                          [e#1 =Trigger ]

                          [a#1 =s0 ]
                          ###[/DEF]###


                          ###[HELP]###
                          ...
                          ###[/HELP]###


                          ###[LBS]###
                          <?
                          function LB_LBSID($id) {
                          if ($E=logic_getInputs($id)) {

                          if ($E[1]['value']!=0 && $E[1]['refresh']==1) {
                          $table=sql_call("SELECT s0 FROM edomiLive.RAMsysProc WHERE id=3");
                          if ($n=sql_result($table)) {
                          setLogicLinkAusgang($id,1,$n['s0']);
                          }
                          sql_close($table);
                          }

                          }
                          }
                          ?>
                          ###[/LBS]###


                          ###[EXEC]###
                          <?

                          ?>
                          ###[/EXEC]###
                          Hi,

                          Ich probiere das gerade mal aus.

                          Hatte letzten auch den Fall das sich die Queue erst über Nacht gefüllt hat.
                          Bin dann morgens aus dem Haus ..da check ich nicht die Queue.
                          Am Abend ging keine Szene am Taster mehr weil die Queue bei 2000+ war.

                          Würde vorschlagen das ggf. mit in die WerksLBS zu übernehmen.
                          Der passt doch hervorragend in die Logikseite "Edomi Watchdog"

                          LG
                          Jean-Luc Picard: "Things are only impossible until they are not."

                          Kommentar

                          Lädt...
                          X