Micha_N Posted October 21, 2014 at 06:50 PM Posted October 21, 2014 at 06:50 PM 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 Quote
tatzemax Posted October 21, 2014 at 07:15 PM Posted October 21, 2014 at 07:15 PM Benutzt du den Rasp. als PHP server, wo der Script ausgeführt wird ? oder oder ist das Brick an dem Rasp. angeschlossen ? Quote
Micha_N Posted October 21, 2014 at 07:44 PM Author Posted October 21, 2014 at 07:44 PM Der Raspberry dient nur als Strom und Netzlieferant. Apache und php laufen auf einem separaten Server. Gibt es für den etwas zu beachten? Quote
tatzemax Posted October 22, 2014 at 06:38 AM Posted October 22, 2014 at 06:38 AM 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. Quote
Micha_N Posted October 22, 2014 at 11:34 AM Author Posted October 22, 2014 at 11:34 AM 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. Quote
photron Posted October 22, 2014 at 03:20 PM Posted October 22, 2014 at 03:20 PM 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 Quote
Micha_N Posted October 22, 2014 at 05:15 PM Author Posted October 22, 2014 at 05:15 PM 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! Quote
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.