Archiv verlassen und diese Seite im Standarddesign anzeigen : vbusmonitor funkt nicht
Ich hab unter OpenSuse eibd von der TU-Wien am laufen. Mit dem Kommando groupswrite kann ich Gruppenadressen auf den Bus senden. Der Zugriff auf den EIB-Bus sollte somit prinzipiell funktionieren.
Jetzt möchte ich alle Gruppenadressen, die über den Bus gesendet werden loggen und ggf. in eine DB schreiben. Testen wollte ich den Zugriff mit den Examples vbusmonitor1 und vbusmonitor2. Leider liefern beide Programme keine Resultate. Dabei habe ich bereits das "fflush(stdout);" hinzugefügt.
Hat jemand eine Idee, woran das liegen könnte?
Für Hilfe wäre ich sehr dankbar.
Du hast sicher vergessen die Adresstabelle der BCU auf 0 zu setzen. Ist die Tabelle nicht leer, so werden nur in der Adresstabelle vorhandene Adressen empfangen.
bcuaddrtab <URL> -w 0 setzt die Tabelle auf 0. Für URL musst du die url das Backends einsetzen. Z.b. ft12:/dev/ttyS0 .
Grüße
Mike
zur Info...
lt. Aussage von Martin Koegler ist die saubere Variante den Befehle groupsockerlisten zu verwenden, um sich mit dem eibd zu verbinden und den Bustraffic mitzuschneiden.
Habe ich auch so gemacht und dann per php, die Telegramme in eine mySQL Datenbank geschrieben.
Grüße
André
Vielen Dank für die schnellen Antworten.
Funkt ... :Prost:
Hallo
@ jonofe
lt. Aussage von Martin Koegler ist die saubere Variante den Befehle groupsockerlisten zu verwenden, um sich mit dem eibd zu verbinden und den Bustraffic mitzuschneiden.
Wie wird den groupsocketlisten mit php augerufen.
Habe vbusmonitor1 durch groupsocketlisten ersetzt geht aber nicht.
Muß "fflush(stdout);" noch hinzugefügt werden.
Gruss NetFritz
Ich mach das so ...
#!/usr/bin/php
<?php
chdir ( dirname ( __FILE__ ) );
include_once "eib_telegram.php";
#!/usr/bin/php
<?php
chdir ( dirname ( __FILE__ ) );
include_once "eib_telegram.php";
include_once "../config/config_eib.php";
include_once "../generic/generic.php";
include_once "../generic/sql.php";
write_pid ( "eib_listener" );
function exit_listener($sig_no) {
global $eib_msg_queue, $handle;
pclose ( $handle );
msg_remove_queue ( $eib_msg_queue );
echo "closed msg_queue by exit_listener()\n";
exit ();
}
// Signalverarbeitung einrichten
declare ( ticks = 1 )
;
pcntl_signal ( SIGTERM, "exit_listener" );
pcntl_signal ( SIGINT, "exit_listener" );
pcntl_signal ( SIGHUP, "exit_listener" );
set_time_limit ( 0 );
// Ãffne Socket zur EIB Verbindung
$handle = popen ( $BIN_DIR . 'groupsocketlisten ip:localhost', 'r' );
//
// MAIN LOOP
//
if ($handle) {
// main loop für Telegramme auf dem KNX
stream_set_blocking ( $handle, 1 );
while ( ! feof ( $handle ) ) {
if ($data = fgets ( $handle )) {
log_msg ( date ( "Y-m-d H:i:s " ) . ":" . $data );
flush ();
// init message queue zum Senden von EIB Telegrammen an den eib_server
$eib_msg_queue = msg_get_queue ( $eib_msg_queue_id, 0600 );
// Sende Message an Prozess "ir_sender"
msg_send ( $eib_msg_queue, 1, $data, true, true, $msg_err );
}
}
}
?>
Das ist mein eib_listener, der einfach alle Telegramme vom Bus liest und message_queue an andere Prozesse weiterreicht. Hat den Vorteil, dass der Listener zeitlich beispielsweise unabhängig von der Logik, der Zeitsteuerung und der VISU ist. Dies sind separate php-Prozesse, die den eib_listener nicht beeinflussen.
Habe die entscheidende Stelle in rot markiert.
Grüße
Andre
Hallo
Habe mal ein Test-Script geschrieben.
#!/usr/bin/php5
<?php
error_reporting(E_ALL);
$command="/usr/bin/groupsocketlisten ip:127.0.0.1";
# $command="/usr/bin/vbusmonitor1 ip:127.0.0.1"
$handle = popen($command, 'r');
if (!$handle) {
die("Konnte Busmonitor nicht initialisieren!");
}
while (!feof($handle)) {
if ($data = fgets($handle)){
echo "$data \n";
}
}
?>
Wenn ich das Script mit vbusmonitor1 aufrufe zeigt mir echo das Rohtelegramm an.
Rufe ich das Script mit groupsocketlisten auf so habe ich keine Ausgabe.
Vermutlich fehlt in groupsocketlisten "fflush(stdout)".
Ich habe die Version 0.0.2.1 von eibd auf meinen Ubuntu Rechner.
Inzwischen gibt es die Version 0.0.3.
Ich habe 0.0.3 von der Aktualisierungsverwaltung noch nicht installieren lassen,da ich nicht sicher bin ob da
"fflush(stdout)" schon drin ist.
Ist in der Version 0.0.3 schon "fflush(stdout)".
Gruss NetFritz
das mit dem aufrufen von den beispielen in c aus php ist umständlich und nicht notwendig.
Man kann direkt von php auf eibd zugreifen.
dazu gibt es auch beispiele und eine php class in dem eibd sourcen.
ich hab was gebraucht aber mittlerweile lese ich status vom bus nur noch direkt mit php von eibd und nutzt da cacheread was dafür ausgelegt ist sehr oft abgefragt zu werden.
auch habe ich die info bekommen das vbusmonitor nicht der "richtige" weg ist auf dem bus auf ein ereignis zu warten. sondern man sollte groupsocket verwenden. (was auch direkt von php aus geht)
ich merke mir keinen status mehr in einer mysql db sondern fragen den bus jedes mal und cacheread ist schnell genug.
ich selber habe mir zwei eib classen in php zusammengestellt (grösstenteils aus dem php beispiel von eibd) und in zend framework eingebunden. Dort habe ich eine normale Oberfläche für den PC und jetzt auch eine Wepapp für das Iphone (in iphone look&feel)
alle geräte auf dem bus liegen dabei sauber in einer config datei und werden flexibel ausgelesen
Hallo Tavis,
Hast Du vielleicht ein paar Beispiele(Screenshots, Code-Snips) dazu?
Bin ziemlich neugierig, würde gern auch so was Basteln ;)
Danke und Gruß
Dirk
code muss ich mal raussuchen was man so versteht.
auf jeden fall mal die beispiele mit php aus eibd sourcen ansehen
hier mal ein paar screen
die pc lösung ist funktionell aber nicht schön ;)
bin halt kein css freak
die "schönen" sind fürs iphone
hier mal ein kleines beispiel:
$eibc = new EIB_Connection( 'localhost' );
$addr = "3/2/1"
$eib = new EIB_Tools();
$r = $eib->cacheread($eibc,$addr,0);
if (($r[1] ==-1 ) or ($r[1] ==-2 )or ($r[1] ==-3 ))
{
$status = array('na','na','na');
} else {
if ($r[2] == 1)
$status = array('1',true,'An');
else
$status = array('0',false,'Aus');
}
die klassen sind 1:1 aus den eibd sourcen wobei EIB_tools hab ich nur in eine class gepackt. Die Funktionen sind 1:1 aus dem Beispiel.
sieht echt gut aus :D
hast Du auch irgedwelche Logiken implementiert?
nein ... noch nicht.
betonung liegt auf noch - aus reinem zeitmangel
kommt aber noch
erst mach ich jetzt meine iphone steuerung fertig (kann das aber erst ab nächste woche,da ich das 3G jetzt erst bekomme)
was ich wohl auch schon gemacht hab. 1 oder 2 zentralle Funktionen in das Menü von meinem VDR eingebaut bzw Reelbox AVG
Powered by vBulletin® Version 4.2.4 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.