Zurück   KNX-User-Forum > Öffentlicher Bereich > KNX EIB Forum
knx-user-forum - International KNX Award Winner 2010


Links
Kalender
Spende

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 04.02.2010, 23:38
Benutzer
 
Registriert seit: 28.12.2008
Ort: München
Beiträge: 119
taichber ist zur Zeit noch ein unbeschriebenes Blatt
Standard vbusmonitor auf fritzbox hängt

Hallo Zusammen,

habe auf einer fritzbox 7270 (avm firmware) seit ca. 1 Jahr erfolgreich den eibd am Laufen. Vor ein paar Wochen habe ich auch den Apache webserver inkl. php auf der fritzbox (USB) installiert. Habe ein paar kleine php programme geschrieben. Läuft auch alles ohne Problem.
Seit ein paar Tagen habe ich den vbusmonitor1 am Laufen mit einem simplen php Programm. Lese damit events am Bus und löse dann irgendwelche Aktionen aus (z.B. bei öffnen eines reedkontakts).
Das Programm funktioniert, aber nach weniger als 24 Stunden, "hängt" das Programm, d.h. bei Events auf dem Bus reagiert das Programm nicht mehr. Man sieht mit mit dem "ps" Befehl, dass die Programme noch laufen. Andere php Programme und Appache funktioniert noch.
Habe den Verdacht, das Programm vbusmonitor1 hängt irgendwie.
Hat jemand von Euch den vbusmonitor1 auf eine fritzbox am Laufen? Habt ihr eine Idee, wo das Problem liegen könnte?
Den eibd und vbusmonitor habe ich fertig compiliert für die fritzbox hier im Forum von einem User runtergeladen.

Danke,
Thomas

Geändert von taichber (04.02.2010 um 23:40 Uhr)
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
  #2  
Alt 05.02.2010, 02:56
Benutzerbild von makki
Erfahrener Benutzer
 
Registriert seit: 07.07.2007
Beiträge: 11.779
makki sorgt für eine eindrucksvolle Atmosphäremakki sorgt für eine eindrucksvolle Atmosphäremakki sorgt für eine eindrucksvolle Atmosphäremakki sorgt für eine eindrucksvolle Atmosphäremakki sorgt für eine eindrucksvolle Atmosphäremakki sorgt für eine eindrucksvolle Atmosphäre
Standard

Ich kann Dir nur soviel sagen, irgendwas stimmt mit dem eibd auf der Fritzbox nicht..
Bei ein bisschen Buslast war da schnell Ende-Gelände, hatte da vor Monaten mal ein bisschen getestet (mit einem selbstkompiliertenaus dem git) und das fühlte sich alles in allem garnicht schön an;
woran das nun letztlich liegt kann ich bei weitem nicht beurteilen denn eigentlich sollte die Fritz das schon packen.

Schritt 1 wäre wohl eibd mit "-t1023" starten und aufzeichnen und das an die bcusdk-Liste zu schicken.
Schritt 2 zu sehen ob der vbusmonitor weiterläuft aber ich glaube es liegt an 1);
der vbusmonitor ist so simpel, da kann sich defacto nichts aufhängen ausser dass der Socket zum eibd beendet wird.
Es gibt übrigens fürn eibd auch ne PHP-Api, dann kann man sich das aufrufen des vbusmonitor sparen.

Makki
__________________
EIB/KNX & HS3(+Lüfter+picoPSU80), Multiroom-AV mit Russound,mpd,vdr,DM8000, Profilux II+, N141 DALI, DMX, dez. Lüfter (RS485), Wärmepumpe (RS422), 30+ 1-Wire Temp,Luft&Bodenfeuchte,IRTrans
WireGate - Supportforum - bitte keine PN's!
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
  #3  
Alt 05.02.2010, 12:59
Benutzer
 
Registriert seit: 28.12.2008
Ort: München
Beiträge: 119
taichber ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hallo Makki,

danke für deine Hinweise. Ich werde wie vorgeschlagen den Trace einschalten. Was ist die bcusdk-Liste?
Ich kann mir allerdings nicht vorstellen, dass der eibd nicht mehr läuft. Die cron Steuerung der RTR per eibd funktioniert ohne Probleme weiter und trotzdem empfängt der vbusmonitor keine Events mehr. Nach Neustart des vbusmonitor funktionert wieder alles - kein Neustart des eibd!
Das mit den Socket ist noch ein guter Tipp. Werde ich mal ansehen. Frage ist nur, warum der Socket beendet wird.
Das php-Interface zum eibd ohne vbusmonitor interessiert mich. Hast Du dazu einen Link? Habe nur php Programme gefunden, die den vbusmonitor voraussetzen.
Funktioniert das dann über grousread?

Thomas
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
  #4  
Alt 05.02.2010, 18:22
Benutzerbild von Chris M.
Erfahrener Benutzer
 
Registriert seit: 14.12.2008
Beiträge: 4.828
Chris M. sorgt für eine eindrucksvolle AtmosphäreChris M. sorgt für eine eindrucksvolle AtmosphäreChris M. sorgt für eine eindrucksvolle AtmosphäreChris M. sorgt für eine eindrucksvolle Atmosphäre
Standard

Vermutlich war's von mir heruntergeladen. Wenn dem der Fall ist, dann gibt's inzwischen neuere Versionen vom eibd, wo wohl einige Fehler behoben wurden...

Wie dem auch sei: bei den verfügbaren Ressourcen (v.a. RAM) meiner 7170 hätte ich kein gutes Gefühl einen Apachen laufen zu lassen und auf dessen Stabilität zu vertrauen. (Die 7270 ist da besser ausgestattet, oder?).
Dein genaues Setup kenne ich nicht, ich weis nur, dass normalerweise die Laufzeit von PHP Skripten beschränkt ist und diese nach einiger Zeit abgeschossen werden (im normalen Web-Server-Umfeld macht eine lang dauernde Anfrage/Antwort keinen Sinn...) Nicht dass Du einfach nur darüber stolperst...
__________________
TS2, B.IQ, DALI, WireGate für 1wire so wie Server für Logik und auf HomeCockpit Minor. - Bitte keine PNs, Fragen gehören in das Forum, damit jeder was von den Antworten hat!
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
  #5  
Alt 05.02.2010, 18:34
Benutzerbild von jonofe
Benutzer
 
Registriert seit: 02.06.2007
Beiträge: 477
jonofe befindet sich auf einem aufstrebenden Ast
Standard

Hi Thomas,

im bcusdk Paket ist eine Datei eibclient.php dabei. Diese liegt in /bcusdk-0.0.4/eibd/client/php/eibclient.php und realisiert die Schnittstelle zum eibd. Du musst jetzt nur noch die dort bereitgestellten Funktionen nutzen.

So kann man z.B. damit alle Telegramme mitlesen:

PHP-Code:
#!/usr/bin/php
<?php
include_once 'eibclient.php';
include_once 
'eibclient.inc.php';

define "READ_VALUE_REQ");
define "READ_VALUE_RES");
define "WRITE_VALUE_REQ");

//
// signal handler
//
function exit_listener($sig_no) {
    global 
$eib_msg_queue,$con;
    
    
// close EIBD connection
    
$con->EIBClose(); 
    
    
// exit eib_listener process
    
exit ();
}

//
// configure signal handler
//
declare ( ticks );
pcntl_signal SIGTERM"exit_listener" );
pcntl_signal SIGINT,  "exit_listener" );
pcntl_signal SIGHUP,  "exit_listener" ); 
pcntl_signal SIGQUIT,  "exit_listener" ); 

//
// set unlimited execution time of eib_listener process
//
set_time_limit (0);

//
// initialise EIBD connection and data structures
//
$con = new EIBConnection("localhost:6720");
$con->EIBOpen_GroupSocket(0);
$data = new EIBBuffer();
$src = new EIBAddr();
$dest = new EIBAddr();

//
// MAIN loop to receive all EIB telegrams
//
while (1)
{
    
//
    // read next telegram
    //
    
$len $con->EIBGetGroup_Src($data,$src,$dest);
    
    
//
    // copy telegram data to buffer
    //
    
$buf unpack("C*"$data->buffer);

    
//
    // check and set APDU type
    //
    
if ($buf[1] & 0x3 || ($buf[2] & 0xC0) == 0xC0)
        {
printf ("Error: Unknown APDU: %02X%02X\n"$buf[1], $buf[2]);unset($APCI);}
    else if ((
$buf[2] & 0xC0) == 0x00
        {
$APCI=READ_VALUE_REQ$telegram "READ_VALUE_REQ";}
    else if ((
$buf[2] & 0xC0) == 0x40
        {
$APCI=READ_VALUE_RES$telegram "READ_VALUE_RES";}
    else if ((
$buf[2] & 0xC0) == 0x80
        {
$APCI=WRITE_VALUE_REQ$telegram "WRITE_VALUE_REQ";}
    else 
        {
printf ("Error: Unknown APDU: %02X%02X\n"$buf[1], $buf[2]);unset($APCI);}
     
    
//
    // build telgram string "APDU-TYPE SOURCE DESTINATION VALUE"
    //
    
if (isset($APCI))
    {  
        
$telegram .= " ".formatiaddr($src->addr)." ".formatgaddr($dest->addr);    
        if (
$APCI<>READ_VALUE_REQ)
        {
               if (
$len == 2
                   
$telegram .= sprintf(" %02X"$buf[2] & 0x3F);
            else {
                   for (
$i=3$i<=$len$i++)
                   
$telegram .= sprintf(" %02X"$buf[$i]);
            }
        }
        echo 
$telegram."\n";
    }
      
}
?>
Die eibclient.inc.php in meinem Skript heißt im bcusdk package eigentlich help.php und liegt in bcusdk-0.0.4/contrib/eibdvis/help.php. Darin sind auch Funktionen groupswrite() und groupwrite() enthalten.

groupread ist nicht in help.php enthalten, würde aber analog so aussehen:

PHP-Code:
function groupread ($con$addr)
{
    
$addr gaddrparse ($addr);
    
$header 0x0000;
    
$r $con->EIBOpenT_Group ($addr1);
    if (
$r == -1) return -1;
    
$data pack ("n"$header);
    
$r $con->EIBSendAPDU ($data);
    if (
$r == -1) return -1;
    return 
$con->EIBReset ();

__________________
Grüße

André

Geändert von jonofe (05.02.2010 um 18:47 Uhr)
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
  #6  
Alt 05.02.2010, 23:04
Benutzer
 
Registriert seit: 25.02.2009
Ort: Wien
Beiträge: 229
mkoegler wird schon bald berühmt werden
Standard

Zitat von jonofe Beitrag anzeigen
Hgroupread ist nicht in help.php enthalten, würde aber analog so aussehen:

PHP-Code:
function groupread ($con$addr)
{
    
$addr gaddrparse ($addr);
    
$header 0x0000;
    
$r $con->EIBOpenT_Group ($addr1);
    if (
$r == -1) return -1;
    
$data pack ("n"$header);
    
$r $con->EIBSendAPDU ($data);
    if (
$r == -1) return -1;
    return 
$con->EIBReset ();

Statt groupread + suchen des Ergebnisstelegrams kann man gleich groupcacheread_sync [vgl. cacheread in help.php] verwenden. Man kann damit auch Buslast sparen, indem man per $age den Zugriff auf X Sekunden alten "gecachten" Zustand erlaubt. Weiters liest der EIBD mit und aktulisiert den Zustand.
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
  #7  
Alt 05.02.2010, 23:06
Benutzer
 
Registriert seit: 28.12.2008
Ort: München
Beiträge: 119
taichber ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hallo Zusammen,

vielen Dank für die hilfreichen Tipps. Da ist einiges dabei, was mir helfen könnte. Das php client Programm für den eibd sieht sehr interessant aus. Werde ich testen. Werde auch prüfen, ob es eventuell an einer apache / php Einstellung liegen könnte.
Von der CPU Last und vom RAM her glaube ich immer noch nicht, dass die fritzbox 7270 das nicht schafft. Mit den AVM tools sehe ich da keine Überlastung. Auch sonst läuft die friitzbox trotz apache und eibd sehr stabil (telefon, internet).
Einzig das monitoren der events mit dem vbusmonitor mit php macht Probleme.
Ich finde die Lösung mit der fritzbox nachwievor super. Nachdem die box sowieso immer läuft, brauche ich keinen extra Server.

@ Chris: ja ich glaube, ich habe deine compilierte eibd Version runtergeladen vor ca. einem Jahr. Könntest Du die neue eibd Version (inkl. tools) für die fritzbox compilieren? Habe einen Mac. Der Umweg über Windows / crosscompiler hat mir vor einem Jahr viele Probleme bereitet und ohne Deine Hilfe hätte ich heute keinen eidb auf der fritzbox am Laufen.

Ich werde jetzt erstmal etwas Zeit brauchen, um eurer Tipps zu testen.

Thomas
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
  #8  
Alt 06.02.2010, 00:26
Benutzer
 
Registriert seit: 28.12.2008
Ort: München
Beiträge: 119
taichber ist zur Zeit noch ein unbeschriebenes Blatt
Standard

ich schon wieder ...

Habe gerade versucht mit dem php porgramm von janofe zu arbeiten. bin da wieder auf ein problem gestossen:

PHP Fatal error: Call to undefined function pcntl_signal() in /var/media/ftp/Verbatim-STORENGO-21/knxtools/knx_mon.php on line 27
X-Powered-By: PHP/5.2.2

Habe gegoogelt und gefunden, dass php mit der option "--enable-pcntl" kompiliert werden muss. Habe meine apache und php Version von hier:

XOBZTIRF - Die FritzBox Seite für Anleitungen, Modifikationen, Tipps und Tricks

scheinbar wurde diese Version ohne Prozesskontrolle kompiliert. Kennt jemand eine php/apache Version für die fritzbox, die Prozesskontrolle unterstützt?

Thomas
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
  #9  
Alt 06.02.2010, 11:27
Benutzerbild von jonofe
Benutzer
 
Registriert seit: 02.06.2007
Beiträge: 477
jonofe befindet sich auf einem aufstrebenden Ast
Standard

Du kannst einfach folgenden Abschnitt löschen...

PHP-Code:
//
// signal handler
//
function exit_listener($sig_no) {
    global 
$eib_msg_queue,$con;
    
    
// close EIBD connection
    
$con->EIBClose(); 
    
    
// exit eib_listener process
    
exit ();
}

//
// configure signal handler
//
declare ( ticks );
pcntl_signal SIGTERM"exit_listener" );
pcntl_signal SIGINT,  "exit_listener" );
pcntl_signal SIGHUP,  "exit_listener" ); 
pcntl_signal SIGQUIT,  "exit_listener" ); 
Dann funktionierts auch ohne pcntl.
__________________
Grüße

André
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
  #10  
Alt 06.02.2010, 11:46
Benutzerbild von jonofe
Benutzer
 
Registriert seit: 02.06.2007
Beiträge: 477
jonofe befindet sich auf einem aufstrebenden Ast
Standard

Zitat von mkoegler Beitrag anzeigen
Statt groupread + suchen des Ergebnisstelegrams kann man gleich groupcacheread_sync [vgl. cacheread in help.php] verwenden. Man kann damit auch Buslast sparen, indem man per $age den Zugriff auf X Sekunden alten "gecachten" Zustand erlaubt. Weiters liest der EIBD mit und aktulisiert den Zustand.
sowas Ähnliches hatte ich mir schon gedacht, allerdings habs ich's bei mir nicht hinbekommen. Hier der Versuch:

PHP-Code:
<?php
include_once 'eibclient.php';
include_once 
'help.php';
$con = new EIBConnection("localhost");
$result=cacheread($con,"1/1/31");
print_r($result);
$con->EIBClose();
?>
Das Ergebnis ist immer:

Code:
Array
(
    [0] => 1/1/31
    [1] => -1
)
Vielleicht hab ich das mit dem "age" noch nicht richtig verstanden, aber der Default ist ja 0 und ich hatte interpretiert, wenn age=0, dann wird auf jeden Fall ein Read_REQ auf den Bus geschickt und auf das Ergebnis gewartet, welches cacheread dann zurückliefert. Richtig?
Bei age=0 sehe ich zumindest im Log des eibd kein Telgramm.
Was mache ich falsch?
__________________
Grüße

André
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Antwort

Themen-Optionen
Ansicht

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are aus
Pingbacks are aus
Refbacks are aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[KNX/EIB] USB-Fernanschluss mit Fritz!Box MartinG KNX EIB Forum 14 22.05.2011 19:59
[HS/FS] HS am S0 der Fritzbox 7270 DJGockel KNX EIB Forum 35 07.11.2010 09:03
Fritz!Box und eibd MartinG KNX EIB Forum 12 16.04.2009 19:10
Fritzbox Freaks gefragt EIB-TECH KNX EIB Forum 19 06.01.2009 17:02
Fritzbox mit HS beeinflussen TRex Praxis 0 04.03.2008 19:39


Alle Zeitangaben in WEZ +2. Es ist jetzt 04:27 Uhr.



SEO by vBSEO