Ankündigung

Einklappen
Keine Ankündigung bisher.

Anrufername in Anruferliste von Fritzbox (LBS19000454/455/...)

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

    #91
    Die mysqli Umstellung ist wohl beim Anlegen der Datenbanken nicht fehlerfrei, stelle im hoffentlich Laufe der nächsten Minuten eine neue Version ein. Muss aber bald weg, mal sehen......

    Hochgeladen, keine Zeit zum Testen mehr...
    Zuletzt geändert von Winni; 29.11.2019, 18:29.

    Kommentar


      #92
      Habs gerade probiert, funktioniert aber noch nicht

      Hier der Log aus dem aktuellen Baustein.

      Code:
       
      2019-11-29 20:08:39 758039 20737 1 Unknown database 'LBS_19000455_Fritz_Anrufliste' SELECT
      2019-11-29 20:08:39 758347 20737 1 No database selected NOT SELECTED
      2019-11-29 20:08:39 778532 20737 1 CREATE DATABASE IF NOT EXISTS LBS_19000455_Fritz_Anrufliste
      2019-11-29 20:08:39 907807 20737 1 CREATE TABLE IF NOT EXISTS anrufe ([LF] `Id` bigint NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT 'Unique ID per call',[LF] `Date` INT(11) DEFAULT 0 COMMENT 'Unix Timestamp',[LF] `Type` INT(2) NOT NULL DEFAULT 0 COMMENT 'Type Integer',[LF] `TypeText` CHAR(25) NOT NULL DEFAULT '' COMMENT 'Name des Anruftyps',[LF] `TypeIcon` CHAR(15) NOT NULL DEFAULT '' COMMENT 'EDOMI-Nummer für Icon',[LF] `OwnNumber` CHAR(25) NOT NULL DEFAULT '' COMMENT 'Telefonnummer',[LF] `OwnName` CHAR(25) NOT NULL DEFAULT '' COMMENT 'Name des Telefonnummer',[LF] `OwnIcon` CHAR(15) NOT NULL DEFAULT '' COMMENT 'EDOMI-Nummer für Icon',[LF] `ExtNumber` CHAR(25) NOT NULL DEFAULT '' COMMENT 'Telefonnummer',[LF] `ExtName` CHAR(255) NOT NULL DEFAULT '' COMMENT 'Name des Telefonnummer',[LF] `Device` INT(2) NOT NULL DEFAULT 0 COMMENT 'Device Nr',[LF] `DeviceName` CHAR(25) NOT NULL DEFAULT '' COMMENT 'Name des Telefons',[LF] `DeviceIcon` CHAR(15) NOT NULL DEFAULT '' COMMENT 'EDOMI-Nummer für Icon',[LF] `Duration` CHAR(5) DEFAULT '' COMMENT 'Seconds',[LF] `Port` CHAR(5) DEFAULT '' COMMENT 'Port',[LF] KEY `Id` (`Id`)[LF] ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci
      2019-11-29 20:08:39 909132 20737 1 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1 DELETE: DELETE FROM anrufe WHERE ID <

      Kommentar


        #93
        Die Infos kann man meiner Meinung nach ignorieren, kommen auch nur bei Debug = 1, oder?
        Die Tabelle sollte generiert worden sein.

        Kommentar


          #94
          Ich kann den Baustein gar nicht mehr aktivieren.
          Beim Start von Edomi braucht es ca. 5 Minuten bis initialisiert ist, aber die Logigen funktionieren dann alle nicht mehr.
          Hab mal Debug im Baustein eingeschaltet und neu starten lassen, da haut er mir auf die 5 Minuten Start ca. 500MB ins Log und füllt sich ständig weiter.

          Hier mal ein Auszug der ersten Zeilen vom Log, die nächsten Zeilen sind immer das selbe (ca. 2500 Zeile/sekunde):

          Code:
          <html><head><style>body {background:#ffffff;} .log {background:#ffffff; font-family:EDOMIfontMono,Menlo,Courier,monospace; line-height:12px; font-size:10px; color:#393930; margin:0; padding:0;} .log td {padding:1px 5px 1px 5px; border-right:1px solid #a9a9a0;}</style></head><body><table class="log" border="0" cellspacing="0" cellpadding="0" style="border-left:1px solid #a9a9a0; border-bottom:1px solid #a9a9a0; white-space:nowrap;"><tr><td colspan="5" style="color:#ffffff; background:#393930; padding:5px;">{EDOMI,CUSTOMLOG_LBS19000455_Fritz_Anrufliste_348.htm,30.11.2019,15:02:29,685755,3695}</td></tr><tr style="background:#c9c9c0;"><td>Zeitstempel</td><td>ms</td><td>PID</td><td>LogLevel</td><td>Meldung</td></tr>
          <tr><td>2019-11-30 15:02:29</td><td>685688</td><td>3695</td><td>1</td><td>   SELECT</td></tr>
          <tr><td>2019-11-30 15:02:29</td><td>686512</td><td>3695</td><td>1</td><td>   SELECT * FROM anrufe where id &gt;= 1 order by id asc</td></tr>
          <tr><td>2019-11-30 15:02:29</td><td>686731</td><td>3695</td><td>1</td><td>You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1UPDATE anrufe SET Date = '' WHERE ID = </td></tr>
          <tr><td>2019-11-30 15:02:29</td><td>686865</td><td>3695</td><td>1</td><td>   SELECT * FROM anrufe where id &gt;= 1 order by id asc</td></tr>
          <tr><td>2019-11-30 15:02:29</td><td>686999</td><td>3695</td><td>1</td><td>You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1UPDATE anrufe SET Date = '' WHERE ID = </td></tr>

          Kommentar


            #95
            Ich hab bei mir nun mehrmals neue Datenbanken angelegt, auch neu gestartet, funktioniert bei mir Ich denke da ist in der Logik eine Schleife. Die Generierungsfehler sind weg, der SQL-Syntax-Fehler bein Löschen ist zwar nicht schön, beeinflusst aber die Funktion nicht. Dieser Löschbefehl wird bei jeder Triggerung durchlaufen, deshalb tendiere ich zur Aussage -> Schleife.

            Kommentar


              #96
              Hab den Baustein und die Logik jetz einmal aus Edomi gelöscht, neu runtergeladen und eingefügt.
              Eine neue Logik erstellt wo nur der eine Baustein ohne Verknüpfungen drin ist, aber es ist der selbe.
              Also denk ich das es keine Schleife ist, sondern wo anders der Fehler liegt.
              Zum testen hab ich auch andere Namen im Eingang Schema vergeben.

              Er haut mir jetzt auch den Fehler Log voll:

              Code:
               
              2019-11-30 17:25:51 751004 ? 5453 Datei: /usr/local/edomi/www/data/liveproject/lbs/LBS19000455.php | Fehlercode: 2 | Zeile: 28 | mysqli_fetch_row() expects parameter 1 to be mysqli_result, boolean given ERROR
              Zuletzt geändert von Blaky1612; 30.11.2019, 17:31.

              Kommentar


                #97
                Bei mir ist es das gleiche, neu geladen und nur das nötigste Verknüpft. Der Start dauert mehrere Minuten und haut Fehler raus am laufenden Band.

                LBS 19000455 liefert folgendes:
                Code:
                 
                2019-12-01 16:17:50 032736 9898 1 SELECT * FROM anrufe where id >= 1 order by id asc
                2019-12-01 16:17:50 033461 9898 1 UPDATE anrufe SET Date = '' WHERE ID = 1
                2019-12-01 16:17:50 033890 9898 1 SELECT * FROM anrufe where id >= 2 order by id asc
                2019-12-01 16:17:50 034809 9898 1 UPDATE anrufe SET Date = '' WHERE ID = 2
                2019-12-01 16:17:50 035240 9898 1 SELECT * FROM anrufe where id >= 3 order by id asc
                2019-12-01 16:17:50 035938 9898 1 UPDATE anrufe SET Date = '' WHERE ID = 3
                2019-12-01 16:17:50 036365 9898 1 SELECT * FROM anrufe where id >= 4 order by id asc
                2019-12-01 16:17:50 036912 9898 1 UPDATE anrufe SET Date = '' WHERE ID = 4
                2019-12-01 16:17:50 037298 9898 1 SELECT * FROM anrufe where id >= 5 order by id asc
                2019-12-01 16:17:50 037868 9898 1 UPDATE anrufe SET Date = '' WHERE ID = 5
                2019-12-01 16:17:50 038294 9898 1 SELECT * FROM anrufe where id >= 6 order by id asc
                2019-12-01 16:17:50 038856 9898 1 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1UPDATE anrufe SET Date = '' WHERE ID =
                und Fehlerlog meldet:

                Code:
                 
                2019-12-01 16:18:28 914602 MAIN 9761 Prozess LOGIC (PID=9898) beenden ERROR
                Ich möchte aber nicht ausschliessen das der Fehler bei mir liegt, hier meine einfache Logik:
                Anmerkung 2019-12-01 163042.png

                ausgefüllt habe ich nur die IP-Adresse und den CallMonitor der Fritzbox eingeschaltet
                ------------
                Dieter

                Kommentar


                  #98
                  In 0.5 hat sich ein Fehler eingeschlichen.... Ich hab's bemerkt als ich bei mir heute CentOS7 neu aufgesetzt habe.
                  Bitte um etwas Geduld, da läuft jetzt leider einiges nicht mehr :-((
                  Es wird eine neue Version geben. Wenn noch jemand eine alte ohne sqli hat, die sollte funktionieren. Ich hab leider keine alten Versionen mehr hier.

                  Kommentar


                    #99
                    Zitat von Winni Beitrag anzeigen
                    Wenn noch jemand eine alte ohne sqli hat,...
                    Woran kann ich das erkennen? Bei mir (EDOMI 2.0 unter CentOS6.5) läuft der LBS seit langem problemlos.

                    Falls es weiterhilft:

                    PHP-Code:
                    ###[DEF]###
                    [name        = Fritzbox CallMonitor    ]

                    [e#1    trigger        = Starten #init=0]
                    [e#2    important    = IP-Adresse #init=192.168.5.99]
                    [e#3    important    = Port #init=1012]
                    [e#4    optional    = Nutzung System-KO 15]
                    [e#10    optional    = Debugging #init=0]

                    [v#1        =     ]
                    [v#2        =     ]
                    [v#3        =     ]
                    [v#10       =     ]

                    [a#1        = Baustein läuft]
                    [a#2        = RAW-Daten]
                    [a#3        = Datum]
                    [a#4        = Ruf-Kennung]
                    [a#5        = Connection ID]
                    [a#6        = Nebenstelle]
                    [a#7        = genutzte Nummer]
                    [a#8        = angerufene Nummer ]
                    [a#9        = Anrufer-Nr ]
                    [a#10       = Nummer ]
                    [a#11       = Dauer ]
                    [a#12       = Port ]
                    [a#13       = Tel.-Nr.]




                    ###[/DEF]###


                    ###[HELP]###

                    Baustein zum Lesen der CALLMON Daten einer Fritzbox
                    Eingang 1 Starten den Baustein im Hintergrund
                    Eingang 2 IP-Adresse der Fritzbox
                    Eingang 3 Port des CALLMON
                    Eingang 4 Verwendung des System KOs 15 (Eingang 1 auf 0 belassen!)
                    Eingang 10 Möglichkeit die LOG-Ausgaben zu steuern

                    Der Ausgang 1 gibt 1 zurück, sobald der Baustein im Hintergrund läuft.
                    Der Ausgang 2 gibt die RAW-Daten des CALLMON zurück (wird für LBS19000455 verwendet)
                    Der Ausgang 3-12 gibt die empfangenen Daten entsprechend der CALLMON-Info einzeln zurück.

                    A4 =  CALL RING CONNECT DISCONNET
                    A13 = Tel.-Nr. für Rückwärtssuche
                    ###[/HELP]###


                    ###[LBS]###
                    <?
                    function LB_LBSID($id) {
                        if ($E=logic_getInputs($id)) {
                            if ($E[1]['value']!=0 && $E[1]['refresh']==1) {
                                if (logic_getVar($id,1)!=1) {    //dieses Konstrukt stellt sicher, dass das EXEC-Script nur einmal gestartet wird
                                    logic_setVar($id,1,1);
                                    logic_setVar($id,2,$E[2]['value']);
                                    logic_setVar($id,3,$E[3]['value']);
                                    logic_setVar($id,10,$E[10]['value']);
                                    logic_callExec(LBSID,$id);
                                }
                            };
                            if ( (strlen($E[4]['value']) > 10) && ($E[4]['refresh']==1) && ($E[1]['value']==0) ) {
                    // System-KO15 auf CallMon Format umformatieren
                                $callmon = explode(';',$E[4]['value']);
                                $temp = substr($callmon[0],0,6).substr($callmon[0],8,2).' '.$callmon[1];
                                $callmon[0] = $temp;
                                array_splice($callmon, 1, 2);
                                switch($callmon[1]) {    
                                case 1:
                                    $callmon[1] = 'RING';
                                    break;
                                case 2:
                                    $callmon[1] = 'CALL';
                                    break;
                                case 3:
                                    $callmon[1] = 'CONNECT';
                                    break;
                                case 4:
                                    $callmon[1] = 'DISCONNECT';
                                    break;
                                };
                            $line = implode(';',$callmon);
                            logic_setOutput($id,2,$line);
                            $info = explode(';',$line);
                            $datum = $info[0];
                            $kennung = $info[1];
                            $Id = $info[2];
                            $neben = '';
                            $genutzt = '';
                            $angerufene = '';
                            $anrufer = '';
                            $nummer = '';
                            $dauer = 0;
                            $port = '';
                            switch ($kennung) {
                            case 'CALL':
                                $neben = $info[3];
                                $genutzt = $info[4];
                                $angerufene = $info[5];
                                $port = $info[6];
                                $rueck = $angerufene;
                                break;
                            case 'RING':
                                $angerufene = $info[4];
                                $anrufer = $info[3];
                                $port = $info[5];
                                $rueck = $anrufer;
                                break;
                            case 'CONNECT':
                                $neben = $info[3];
                                if (count($info) < 5) $info[4] = '';
                                $nummer = $info[4];
                                break;
                            case 'DISCONNECT':
                                $dauer = $info[3];
                                break;
                            };
                            logic_setOutput($id,3,$datum);
                            logic_setOutput($id,4,$kennung);
                            logic_setOutput($id,5,$Id);
                            logic_setOutput($id,6,$neben);
                            logic_setOutput($id,7,$genutzt);
                            logic_setOutput($id,8,$angerufene);
                            logic_setOutput($id,9,$anrufer);
                            logic_setOutput($id,10,$nummer);
                            logic_setOutput($id,11,$dauer);
                            logic_setOutput($id,12,$port);
                            logic_setOutput($id,13,$rueck);
                            if ($debug) {
                                writeToCustomLog('LBS19000456 Fritzbox CallMonitor',1,'SystemKO15 '.$line);
                            }
                            };
                        }
                    };
                    ?>
                    ###[/LBS]###


                    ###[EXEC]###
                    <?
                    require(dirname(__FILE__)."/../../../../main/include/php/incl_lbsexec.php");
                    set_time_limit(0);
                    sql_connect();
                    $v2 = logic_getVar($id,2);
                    $v3 = logic_getVar($id,3);
                    $debug = logic_getVar($id,10);
                    if ($debug) writeToCustomLog('LBS19000456 Fritzbox CallMonitor',1,'IP '.$v2.' Port '.$v3);
                    $client=stream_socket_client("tcp://".$v2.":".$v3, $errno, $errorMessage);
                    if ($client === false) {
                        writeToCustomLog('LBS19000456 Fritzbox CallMonitor',1,$errorMessage);
                    };
                    if ($debug) writeToCustomLog('LBS19000456 Fritzbox CallMonitor',1,'gestartet');
                    logic_setOutput($id,1,1);
                    while(!feof($client)) {
                        $line=fgets($client);
                        logic_dbKeepalive();
                        if (strlen($line) > 10) {
                            logic_setOutput($id,2,$line);
                            $info = explode(';',$line);
                            $datum = $info[0];
                            $kennung = $info[1];
                            $Id = $info[2];
                            $neben = '';
                            $genutzt = '';
                            $angerufene = '';
                            $anrufer = '';
                            $nummer = '';
                            $dauer = 0;
                            $port = '';
                            switch ($kennung) {
                            case 'CALL':
                                $neben = $info[3];
                                $genutzt = $info[4];
                                $angerufene = $info[5];
                                $port = $info[6];
                                $rueck = $angerufene;
                                break;
                            case 'RING':
                                $angerufene = $info[4];
                                $anrufer = $info[3];
                                $port = $info[5];
                                $rueck = $anrufer;
                                break;
                            case 'CONNECT':
                                $neben = $info[3];
                                $nummer = $info[4];
                                break;
                            case 'DISCONNECT':
                                $dauer = $info[3];
                                break;
                            };
                            logic_setOutput($id,3,$datum);
                            logic_setOutput($id,4,$kennung);
                            logic_setOutput($id,5,$Id);
                            logic_setOutput($id,6,$neben);
                            logic_setOutput($id,7,$genutzt);
                            logic_setOutput($id,8,$angerufene);
                            logic_setOutput($id,9,$anrufer);
                            logic_setOutput($id,10,$nummer);
                            logic_setOutput($id,11,$dauer);
                            logic_setOutput($id,12,$port);
                            logic_setOutput($id,13,$rueck);
                            if ($debug) writeToCustomLog('LBS19000456 Fritzbox CallMonitor',1,'Event '.$line);
                        };
                        usleep(1000*25);        //CPU-Last verteilen (die Länge der Pause sollte je nach Bedarf angepasst werden - je länger, desto ressourcenschonender)
                    }
                    fclose($client);
                    logic_setOutput($id,1,0);
                    sql_disconnect();
                    ?>
                    ###[/EXEC]###

                    Kommentar


                      nicht der CallMonitor, sondern LBS19000455 ist das Problem... Ich hab wahrscheinlich eine Lösung, aber kämpfe noch mit meinen anderen Fritzbox Bausteinen unter CentOS7....

                      Kommentar


                        Hier der LBS 19000455 in der version 0.2


                        Code:
                        ###[DEF]###
                        [name        =    FRITZ!Box Anrufliste Eintrag Lesen / Einfügen / Updaten (0.2)]
                        
                        [e#1 trigger        = Trigger aus CALLMONITOR Baustein LBS19000456 oder System-KO 15 (selbsterkennend)]
                        [e#2 trigger        = Id zum Lesen]
                        [e#3 trigger        = Id zum Löschen]
                        [e#4 trigger        = Ergebnis Rückwärtssuche (erweitert) ]
                        [e#5 option         = Device Übersetzung Text / Icon #init=NULL|undefined|0]
                        [e#6 option         = eigene Nummer Übersetzung Text / Icon #init=NULL|undefined|0]
                        [e#7 option         = Anruftyp Übersetzung Text / Icon #init=10|calling|0|20|ringing|0|15|out connected|0|25|in connected|0|16|out missed|0|26|in missed|0|17|outgoing closed|0|27|incoming closed|0|NULL|undefined|0]
                        [e#10 option        = Debugging aktivieren]
                        
                        [a#1        =    Ausgabe aktuelle Daten JSON-Format ]
                        [a#2        =    Id ]
                        [a#3        =    Date ]
                        [a#4        =    Type ]
                        [a#5        =    TypeText ]
                        [a#6        =    TypeIcon ]
                        [a#7        =    Device ]
                        [a#8        =    DeviceName ]
                        [a#9        =    DeviceIcon ]
                        [a#10        =    OwnNumber ]
                        [a#11        =    OwnName ]
                        [a#12        =    OwnIcon ]
                        [a#13        =    ExtNumber ]
                        [a#14        =    ExtName ]
                        [a#15        =    Duration in seconds ]
                        [a#16        =    Port ]
                        
                        [v#1        =    ] Speichern der Daten 
                        [v#2        =    ] Initialisierung nur einmal 
                        
                        Versionshistorie:
                        0.1        initiale Version
                        0.2        Umstellung auf neue Funktionsaufrufe, stabilere Objektprüfungen
                        
                        ###[/DEF]###
                        
                        
                        ###[HELP]###
                        
                        
                        Eingang 1: Daten aus LBS1900456, ein neuer Eintrag führt hier zum Insert. Falls Datensatz bereits vorhanden werden bestimmte Felder upgedated
                        Eingang 2: ID zum Lesen,  die Daten dieser ID werden an den Ausgängen bereitgestellt.
                        Eingang 3: ID zum Löschen, die Daten dieser ID werden an den Ausgängen bereitgestellt.
                        Eingang 4: Daten aus Rückwärtssuche, werden der entsprechenden Nummer im Speicher und Datenbank zugeordnet, sofern Daten gefunden wurden
                        Eingang 5: Daten um Device-Nummer in Text bzw. Icon (EDOMI-Nr) umzusetzen (Nr|Text|Icon|Nr|Text|Icon) NR='NULL' wird bei unbekannten Werten verwendet
                        Eingang 6: Daten um eigene Rufnummer in Text bzw. Icon (EDOMI-Nr) umzusetzen (Nr|Text|Icon|Nr|Text|Icon) NR='NULL' wird bei unbekannten Werten verwendet
                        Eingang 7: Daten um Status in Text bzw. Icon (EDOMI-Nr) umzusetzen (Nr|Text|Icon|Nr|Text|Icon) NR='NULL' wird bei unbekannten Werten verwendet
                        Eingang 10: Debugging aktivieren !
                        
                        ###[/HELP]###
                        
                        
                        ###[LBS]###
                        <?
                        function LB_LBSID($id) {
                            if (($E = logic_getInputs($id)) && !logic_getvar($id,2)) {
                                $debug = $E[10]['value'];
                        // Evtl. Datenbank initialisieren
                                $con = mysql_connect("localhost","root","");
                                if ($debug) writeToCustomLog('LBS19000455 Fritz Anrufliste',1,mysql_error().'   CONNECT');
                        // select database
                                $db_selected = mysql_select_db("LBS_19000455_Fritz_Anrufliste",$con);
                                if ($debug) writeToCustomLog('LBS19000455 Fritz Anrufliste',1,mysql_error().'   SELECT');
                                if (!$db_selected) {
                                    if ($debug) writeToCustomLog('LBS19000455 Fritz Anrufliste',1,mysql_error().'   NOT SELECTED');
                                    $query = "CREATE DATABASE IF NOT EXISTS LBS_19000455_Fritz_Anrufliste";
                                    mysql_query($query,$con);
                                    if ($debug) writeToCustomLog('LBS19000455 Fritz Anrufliste',1,mysql_error().'   '.$query);
                                    mysql_select_db("LBS_19000455_Fritz_Anrufliste",$con);
                        // create database tables
                                    $query = "CREATE TABLE IF NOT EXISTS anrufe (
                                        `Id` bigint NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT 'Unique ID per call',
                                        `Date` CHAR(14) DEFAULT '' COMMENT '31.07.12 12:03',
                                        `Type` INT(2) NOT NULL DEFAULT 0 COMMENT 'Type Integer',
                                        `TypeText` CHAR(25) NOT NULL DEFAULT '' COMMENT 'Name des Anruftyps',
                                        `TypeIcon` CHAR(15) NOT NULL DEFAULT '' COMMENT 'EDOMI-Nummer für Icon',
                                        `OwnNumber` CHAR(25) NOT NULL DEFAULT '' COMMENT 'Telefonnummer',
                                        `OwnName` CHAR(25) NOT NULL DEFAULT '' COMMENT 'Name des Telefonnummer',
                                        `OwnIcon` CHAR(15) NOT NULL DEFAULT '' COMMENT 'EDOMI-Nummer für Icon',
                                        `ExtNumber` CHAR(25) NOT NULL DEFAULT '' COMMENT 'Telefonnummer',
                                        `ExtName` CHAR(255) NOT NULL DEFAULT '' COMMENT 'Name des Telefonnummer',
                                        `Device` INT(2) NOT NULL DEFAULT 0 COMMENT 'Device Nr',
                                        `DeviceName` CHAR(25) NOT NULL DEFAULT '' COMMENT 'Name des Telefons',
                                        `DeviceIcon` CHAR(15) NOT NULL DEFAULT '' COMMENT 'EDOMI-Nummer für Icon',
                                        `Duration` CHAR(5) DEFAULT '' COMMENT 'Seconds',
                                        `Port` CHAR(5) DEFAULT '' COMMENT 'Port',
                                        KEY `Id` (`Id`)
                                        ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci";
                                        mysql_query($query,$con);
                                    if ($debug) writeToCustomLog('LBS19000455 Fritz Anrufliste',1,mysql_error().'   '.$query);
                                    logic_setVar($id,2,1);
                                };
                        // Datenbank existiert nun und ist geöffnet
                        
                        // Ergebnis der Rückwärtssuche zordnen !
                                if ( $E[4]['refresh'] ) { 
                                    $calls = json_decode(logic_getVar($id,1));
                                    if (!is_object($calls)) return;
                                    $temp = explode('|',$E[4]['value']);
                                    foreach ($calls as $call) {
                                        if ($call->ExtNumber == $temp[0]) {
                                            $call->ExtName = $temp[1];
                        //-> Update Datenbank
                        //                      $query = "UPDATE anrufe SET ExtName = '".$call->ExtName."' WHERE ID = ".$call->Id;
                                              $query = "UPDATE anrufe SET ExtName = '".$call->ExtName."' WHERE ExtNumber = ".$temp[0];
                                              $result = mysql_query($query,$con);
                                            if ($debug) writeToCustomLog('LBS19000455 Fritz Anrufliste',1,mysql_error().'   UPDATE: '.$query);
                                            logic_setOutput($id,1,json_encode($call));
                                            logic_setOutput($id,14,$call->ExtName);
                                            if ($debug) writeToCustomLog('LBS19000455 Fritz Anrufliste',1,'Update Output:'.json_encode($call));
                                            logic_setVar($id,1,json_encode($calls));
                                            if ($debug) writeToCustomLog('LBS19000455 Fritz Anrufliste',1,'   speichern: '.json_encode($calls));
                                        };
                                    };
                                };
                        
                        
                        // Lesen - Löschen eines speziellen Anrufs
                                if ( $E[2]['refresh'] || $E[3]['refresh'] ) { 
                                    if ($E[2]['refresh']) $query = "SELECT * FROM anrufe WHERE Id = ".$E[2]['value'];
                                    if ($E[3]['refresh']) $query = "SELECT * FROM anrufe WHERE Id = ".$E[3]['value'];
                                    $result = mysql_query($query,$con);
                                    if (!$result) {
                        // Wenn Fehler
                                        writeToCustomLog('LBS19000455 Fritz Anrufliste',1,mysql_error().'   '.$query);
                                        return;
                                    };
                                    $row = mysql_fetch_row($result);
                                    if ($row === false) {
                        // Wenn Fehler
                                        writeToCustomLog('LBS19000455 Fritz Anrufliste',1,'Datensatz nicht vorhanden: '.$query);
                                        return;
                                    };
                        
                                    $call = (object) array();
                                    $call->Id = $row[0];
                                    $call->Date = $row[1];
                                    $call->Type = $row[2];
                                    $call->OwnNumber = $row[3];
                                    $call->OwnName = $row[4];
                                    $call->OwnIcon = $row[5];
                                    $call->ExtNumber = $row[6];
                                    $call->ExtName = $row[7];
                                    $call->TypeText = $row[8];
                                    $call->TypeIcon = $row[9];
                                    $call->Device = $row[10];
                                    $call->DeviceName = $row[11];
                                    $call->DeviceIcon = $row[12];
                                    $call->Duration = $row[13];
                                    $call->Port = $row[14];
                                    logic_setOutput($id,1,json_encode($call));
                                    logic_setOutput($id,2,$call->Id);
                                    logic_setOutput($id,3,$call->Date);
                                    logic_setOutput($id,4,$call->Type);
                                    logic_setOutput($id,5,$call->TypeText);
                                    logic_setOutput($id,6,$call->TypeIcon);
                                    logic_setOutput($id,7,$call->Device);
                                    logic_setOutput($id,8,$call->DeviceName);
                                    logic_setOutput($id,9,$call->DeviceIcon);
                                    logic_setOutput($id,10,$call->OwnNumber);
                                    logic_setOutput($id,11,$call->OwnName);
                                    logic_setOutput($id,12,$call->OwnIcon);
                                    logic_setOutput($id,13,$call->ExtNumber);
                                    logic_setOutput($id,14,$call->ExtName);
                                    logic_setOutput($id,15,$call->Duration);
                                    logic_setOutput($id,16,$call->Port);
                                    if ($debug) writeToCustomLog('LBS19000455 Fritz Anrufliste',1,'Update Output:'.json_encode($call));
                                    if ($E[3]['refresh']) $query = "DELETE anrufe WHERE Id = ".$E[3]['value'];
                                    $result = mysql_query($query,$con);
                                    if (!$result) {
                        // Wenn Fehler
                                        writeToCustomLog('LBS19000455 Fritz Anrufliste',1,mysql_error().'   '.$query);
                                        return;
                                    };
                                };
                        
                        // Lesen des aktuellen Anrufs
                                if ( $E[1]['refresh'] &&  (strlen($E[1]['value'])>10)) {
                         //aktuellen Zustand holen (auf Remanenz wurde verzichtet !)
                                    if ($debug) writeToCustomLog('LBS19000455 Fritz Anrufliste',1,'   gespeichert: '.logic_getVar($id,1));
                                    $calls = json_decode(logic_getVar($id,1));
                                    if ($calls == '') $calls = (object) array();
                                    $callmon = explode(';',$E[1]['value']);
                                    if ($debug) writeToCustomLog('LBS19000455 Fritz Anrufliste',1,'   CALLMON: '.$callmon[1]);
                        
                                    switch ($callmon[1]) {
                                    case 'CALL':
                                    case 'RING':
                        //CALL RING bedeutet neuer Call mit neuer Call-ID
                        //-> Status 10/20 
                                        $call = (object) array();
                                        $calls->{$callmon[2]} =& $call;  //Eintrag löschen/generieren
                                        if ($callmon[1] == 'CALL') {
                                            $call->Type = 10;
                                            $call->OwnNumber = $callmon[4];
                                            $call->ExtNumber = $callmon[5];
                                            $call->Port = $callmon[6];
                                            $call->Device = $callmon[3];
                                        } else {
                                            $call->Type = 20;
                                            $call->OwnNumber = $callmon[4];
                                            $call->ExtNumber = $callmon[3];
                                            $call->Port = $callmon[5];
                                            $call->Device = 0;
                                        };
                                        $call->ExtName = 'unknown';
                                        $call->Duration = 0;
                                        $call->Date = $callmon[0];
                        //-> Insert Datenbank
                                          $query = "INSERT INTO anrufe (Date,Type,OwnNumber,ExtNumber,Device) VALUES('".
                                                $call->Date."',".$call->Type.",'".$call->OwnNumber."','".$call->ExtNumber."',".$call->Device.")";
                                          $result = mysql_query($query,$con);
                                        if ($debug) writeToCustomLog('LBS19000455 Fritz Anrufliste',1,mysql_error().'   INSERT: '.$query);
                                        $call->Id = mysql_insert_id();
                                        break;
                                    case 'CONNECT':
                        //CONNECT bedeutet es wurde eine Verbindung aufgebaut
                        //Ermitteln des richtigen Calls anhand der ID
                                        $call =& $calls->{$callmon[2]};
                        //-> Status 15/25
                                        if ($call->Type == 10) {
                                            $call->Type = 15;
                                        } else {
                                            $call->Type = 25;
                                        };
                                        $call->Date = $callmon[0];
                                        $call->Device = $callmon[3];
                        //-> Update Datenbank
                                          $query = "UPDATE anrufe SET Type = ".$call->Type.", Date = '".$call->Date."', Device = ".$call->Device." WHERE ID = ".$call->Id;
                                          $result = mysql_query($query,$con);
                                        if ($debug) writeToCustomLog('LBS19000455 Fritz Anrufliste',1,mysql_error().'   UPDATE: '.$query);
                                        break;
                                    case 'DISCONNECT':
                        //DISCONNECT bedeutet es wurde eine Verbindung abgebaut
                        //Ermitteln des richtigen Calls anhand der ID
                                        $call =& $calls->{$callmon[2]};
                        //-> Status 16/26 wenn vorher CONNECTED
                        //-> Status 17/27 wenn vorher nicht CONNECTED (missed)
                                        switch ($call->Type) {
                                        case 10:
                                            $call->Type = 16;
                                            break;
                                        case 20:
                                            $call->Type = 26;
                                            break;
                                        case 15:
                                            $call->Type = 17;
                                            break;
                                        case 25:
                                            $call->Type = 27;
                                            break;
                                        };
                                        $call->Duration = $callmon[3];
                        //-> Update Datenbank
                                          $query = "UPDATE anrufe SET Type = ".$call->Type.", Duration = ".$call->Duration." WHERE ID = ".$call->Id;
                                          $result = mysql_query($query,$con);
                                        if ($debug) writeToCustomLog('LBS19000455 Fritz Anrufliste',1,mysql_error().'   UPDATE: '.$query);
                                        break;
                                    };
                        // abhängige Texte / Icons ergänzen
                        // Device
                                    $liste = explode('|',$E[5]['value']);
                                    $index = array_search($call->Device,$liste);
                                    if (!is_numeric($index)) $index = array_search('NULL',$liste);
                                    if (is_numeric($index)) {
                                        $call->DeviceName = $liste[$index+1];
                                        if     (!property_exists($call,'DeviceIcon') || !(strpos($liste[$index+2],$call->DeviceIcon) === 0)) {
                                            $query = "SELECT suffix FROM edomiProject.editVisuImg where id =".$liste[$index+2];
                                            $result = mysql_query($query,$con);
                                            $ext = mysql_fetch_row($result);
                                            $call->DeviceIcon = $liste[$index+2].'.'.$ext[0];
                                        };
                                    };
                        // eigene Nummer
                                    $liste = explode('|',$E[6]['value']);
                                    $index = array_search($call->OwnNumber,$liste);
                                    if (!is_numeric($index)) $index = array_search('NULL',$liste);
                                    if (is_numeric($index)) {
                                        $call->OwnName = $liste[$index+1];
                                        if     (!property_exists($call,'OwnIcon') || !(strpos($liste[$index+2],$call->OwnIcon) === 0)) {
                                            $query = "SELECT suffix FROM edomiProject.editVisuImg where id =".$liste[$index+2];
                                            $result = mysql_query($query,$con);
                                            $ext = mysql_fetch_row($result);
                                            $call->OwnIcon = $liste[$index+2].'.'.$ext[0];
                                        };
                                    };
                        // Anruftyp            
                                    $liste = explode('|',$E[7]['value']);
                                    $index = array_search($call->Type,$liste);
                                    if (!is_numeric($index)) $index = array_search('NULL',$liste);
                                    if (is_numeric($index)) {
                                        $call->TypeText = $liste[$index+1];
                                        if     (!property_exists($call,'TypeIcon') ||!(strpos($liste[$index+2],$call->TypeIcon) === 0)) {
                                            $query = "SELECT suffix FROM edomiProject.editVisuImg where id =".$liste[$index+2];
                                            $result = mysql_query($query,$con);
                                            $ext = mysql_fetch_row($result);
                                            $call->TypeIcon = $liste[$index+2].'.'.$ext[0];
                                        };
                                    };
                        //-> Update Datenbank
                                      $query = "UPDATE anrufe SET TypeText = '".$call->TypeText."', TypeIcon = '".$call->TypeIcon.
                                        "', DeviceName = '".$call->DeviceName."', DeviceIcon = '".$call->DeviceIcon.
                                        "', OwnName = '".$call->OwnName."', OwnIcon = '".$call->OwnIcon."' WHERE ID = ".$call->Id;
                                      $result = mysql_query($query,$con);
                                    if ($debug) writeToCustomLog('LBS19000455 Fritz Anrufliste',1,mysql_error().'   UPDATE: '.$query);
                                    logic_setOutput($id,1,json_encode($call));
                                    logic_setOutput($id,2,$call->Id);
                                    logic_setOutput($id,3,$call->Date);
                                    logic_setOutput($id,4,$call->Type);
                                    logic_setOutput($id,5,$call->TypeText);
                                    logic_setOutput($id,6,$call->TypeIcon);
                                    logic_setOutput($id,7,$call->Device);
                                    logic_setOutput($id,8,$call->DeviceName);
                                    logic_setOutput($id,9,$call->DeviceIcon);
                                    logic_setOutput($id,10,$call->OwnNumber);
                                    logic_setOutput($id,11,$call->OwnName);
                                    logic_setOutput($id,12,$call->OwnIcon);
                                    logic_setOutput($id,13,$call->ExtNumber);
                                    logic_setOutput($id,14,$call->ExtName);
                                    logic_setOutput($id,15,$call->Duration);
                                    logic_setOutput($id,16,$call->Port);
                                    if ($debug) writeToCustomLog('LBS19000455 Fritz Anrufliste',1,'Update Output:'.json_encode($call));
                                    logic_setVar($id,1,json_encode($calls));
                                    if ($debug) writeToCustomLog('LBS19000455 Fritz Anrufliste',1,'   speichern: '.json_encode($calls));
                                };
                                mysql_close($con);    
                            }
                        }
                        ?>
                        ###[/LBS]###
                        
                        
                        ###[EXEC]###
                        <?
                        ?>
                        ###[/EXEC]###

                        Kommentar


                          Version 0.5 sollte nun bei Neuinstallation funktionieren. Habe einen Bereich entfernt, der ein DB-Struktur-Update gemacht hat. Wer noch eine Version vor 0.3 am Laufen hat müsste die entsprechende Datenbank löschen und neu anfangen.
                          vtl. kann auch die Structur mit SQL korrigiert werden: Die Spalte Date ist in der aktuellen Version im Format INT(11), also groben Anhaltspunkt der Quellcode den ich damals in Version 0.3 zum Upgrade eingebaut hatte:
                          $start = 1;
                          while ($start > 0) {
                          $query = "SELECT * FROM ".$tabelle." where id >= ".$start.' order by id asc';
                          $result = mysqli_query($mysqli,$query);
                          $row = mysqli_fetch_row($result);
                          if ($row === false) {$start = 0; continue;};
                          $start = $row[0];
                          if (!is_numeric($row[1])) {
                          $query = "UPDATE ".$tabelle." SET Date = '".strtotime(substr($row[0],0,6).strftime("%C",time()).substr($row[0],6,10))."' WHERE ID = ".$row[0];
                          $result = mysqli_query($mysqli,$query);
                          $start++;
                          } else { // bereits umgestellt
                          $start = 0;
                          };
                          };
                          $query = "ALTER TABLE ".$tabelle." CHANGE COLUMN Date Date INT(11)";
                          $result = mysqli_query($mysqli,$query);

                          Sollten viele noch die alte Version haben, bitte melden, dann versuche ich das wieder einzubauen.

                          Kommentar


                            So, hab noch schnell den alten Code reingewurschtelt.... Hoffe es gibt nicht wieder Ärger mit irgendeiner Endlosschleife... Falls doch im Quellcode den Bereich

                            // muss umgewandelt werden ?
                            if ($db_selected) {
                            $start = 1;
                            .........
                            $result = mysqli_query($mysqli,$query);
                            };
                            entfernen.
                            Zuletzt geändert von Winni; 02.12.2019, 00:19.

                            Kommentar


                              Winni, kann es sein, dass dieses Update unter CentOS 6.5 nichtmehr funktioniert?
                              Hier startet Edomi nichtmehr, bleibt bei:
                              2019-12-02 12:54:04 161700 MAIN 2193 INIT Ok
                              2019-12-02 12:54:04 168124 MAIN 2193 Logik-Bausteine initialisieren... Ok
                              hängen.

                              Kommentar


                                Ich hab' mit dem Baustein noch diverse Probleme..... ich hoffe ich krieg's irgendwann gebacken. Problem ist, dass ich irgendwie nicht alle Szenarien nachstellen kann. Blöd ist auch, dass ich damals keinen EXEC-Baustein gemacht habe und er im Fehlerfall alles lahmlegt. Lust und Zeit alles neu zu machen hab' ich im Moment nicht.Bitte um etwas Geduld (wer zu früh upgedated hat soll aus einem Backup die alte Version rausholen)

                                Kommentar

                                Lädt...
                                X