Micha_N Geschrieben October 21, 2014 at 18:50 Geschrieben October 21, 2014 at 18:50 Hallo Zusammen, ich bin absoluter Neuling und hab ein Problem, bei dem ich einen Tipp für den Lösungsweg brauche. Ich habe ein Master und ein IndustrialQuadRelay zusammengeschlossen und meine Garagentorfernbedienung drangelötet. Das ganze dann an einen Raspberry angeschlossen und diesen Konfiguriert. Wenn den BrickViewer öffne und als Monoflop Pin3, Time 500 ms und State "on" setze, geht das Tor auf. Mache ich das nochmal geht es zu. Ich bin begeistert Nun will ich das über ein PHP Skript realisieren, dass auf einem anderen Server im gleichen Netz läuft. Ich hab den Beispielcode genommen, aber leider nicht mit dem gewünschten Ergebnis. <?php require_once('Tinkerforge/IPConnection.php'); require_once('Tinkerforge/BrickletIndustrialQuadRelay.php'); use Tinkerforge\IPConnection; use Tinkerforge\BrickletIndustrialQuadRelay; const HOST = '192.168.0.5'; const PORT = 4223; const UID = 'fdxz'; // Change to your UID $VALUE_ON = (1 << 3); // Pin 3 high $ipcon = new IPConnection(); // Create IP connection $iqr = new BrickletIndustrialQuadRelay(UID, $ipcon); // Create device object $ipcon->connect(HOST, PORT); // Connect to brickd // Don't use device before ipcon is connected $iqr->setMonoflop($VALUE_ON, 1, 500); $ipcon->disconnect(); ?> Ich vermute den Fehler im Bereich Monoflop, da ich das Prinzip mit der Bitmaske erst warm werden muss... Ich dachte ich wähle oben Pin 3, und für On wähle ich "0001", also 1. Oder ist das doch alles ganz anders? Würde mich freuen, wenn einer mit weiterhelfen kann. Danke und viele Grüße Zitieren
tatzemax Geschrieben October 21, 2014 at 19:15 Geschrieben October 21, 2014 at 19:15 Benutzt du den Rasp. als PHP server, wo der Script ausgeführt wird ? oder oder ist das Brick an dem Rasp. angeschlossen ? Zitieren
Micha_N Geschrieben October 21, 2014 at 19:44 Autor Geschrieben October 21, 2014 at 19:44 Der Raspberry dient nur als Strom und Netzlieferant. Apache und php laufen auf einem separaten Server. Gibt es für den etwas zu beachten? Zitieren
tatzemax Geschrieben October 22, 2014 at 06:38 Geschrieben October 22, 2014 at 06:38 Ich hatte das Problem, nach dem ich dem Raspberry eine feste IP zugewiesen habe das ich der Raspberry keine IP Adressen mehr erreichen konnte noch nicht mal den Localhost. nach dem ich die Loopback Schnittstelle wieder hinzugefügt hatte hat er zu mindestens den Localhost wieder erreicht das reicht mir ja für das erste. Aber wenn du nur auf die IP des PI von wo anders zugreifst sollt das ja nicht das Problem sein. Ich nehme an das auf dem PI der Brickdeamon istalliert ist. Zitieren
Micha_N Geschrieben October 22, 2014 at 11:34 Autor Geschrieben October 22, 2014 at 11:34 Raspberry-seitig vermute ich, passt alles. Bickdeamon ist installiert und ich vermute es funktioniert auch. Es klappt ja, wenn ich über den Brick Viewer arbeite und statt localhost die IP des Raspberrys eingebe. Ich hatte das Skript in Verdacht, vielleicht kann mir jemand sagen, ob das korrekt oder fehlerbehaftet ist. Ansonsten kann es natürlich auch an der apache/php Umgebung liegen. Das werde ich auch mal weiter untersuchen. Wenn ich das Skript ausführe und mir dann die log Dateien auf dem Raspberry ansehe, steht dort folgendes: 2014-10-21 20:29:34.132687 <I> <network|network.c:334> Added new client (N: 192.168.0.10:38814, T: plain-socket, H: 18, A: disabled) 2014-10-21 20:29:56.572441 <I> <network|client.c:218> Client (N: 192.168.0.10:61240, T: plain-socket, H: 17, A: disabled) disconnected by peer Weiss jemand, ob Aktionen einfach nicht im Log auftauchen, oder hier gar nicht erst ausgelöst werden und deshalb nicht im Log auftauchen? [edit]: ich habe gerade nochmal die php Voraussetzungen bcmath und sockets gechecked: sind beide enabled. Zitieren
photron Geschrieben October 22, 2014 at 15:20 Geschrieben October 22, 2014 at 15:20 Dein Problem liegt hier: $VALUE_ON = (1 << 3); $iqr->setMonoflop($VALUE_ON, 1, 500); Die Signatur ist so: setMonoflop(int $selection_mask, int $value_mask, int $time) Für die selection_mask nimmst du 1 << 3, also eine 1 um 3 Bit nach links geschoben, in Binär 0b1000 (0b als Prefix für Binär, so wie 0x für Hexadezimal). Damit hast du das Relais 3 (von 0 gezählt) ausgewählt. Für die value_mask nimmst du 1, in Binär 0b0001. Damit gibst du für Relais 0 vor dass es eingeschaltet werden soll und alle anderen ausgeschaltet. Da du mit der selection_mask von 0b1000 aber gesagt hast, dass über haupt nur Relais 3 geschaltet werden soll passiert nichts, da Relais 3 schon aus ist. Die selection_mask sagt welche Relais überhaupt geschaltet werden sollen und die value_mask sagt wie geschaltet werden sollen. 0b1000 selection_mask 0b0001 value_mask In der value_mask werden also nur die Stellen betrachtet, für die in der selection_mask eine 1 steht. Du schaltest also Relais 3 aus und alle anderen bleiben unverändert. Um Relais 3 einzuschalten muss es so aussehen: 0b1000 selection_mask 0b1000 value_mask und daher so in PHP: $SELECT_3 = (1 << 3); $VALUE_3_ON = (1 << 3); $iqr->setMonoflop($SELECT_3, $VALUE_3_ON, 500); Bitmasken können verwirrend sein Zitieren
Micha_N Geschrieben October 22, 2014 at 17:15 Autor Geschrieben October 22, 2014 at 17:15 Sauber, danke. Und dann habe ich auch noch gemerkt, dass es eine UID pro Brick und nicht nur pro Master gibt da hatte ich nämlich auch die falsche drin stehen. Jetzt geht alles. Danke an alle! Zitieren
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.