Jump to content

IQR @Rasp. Garagentor über PHP geht nicht


Micha_N

Recommended Posts

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

Link zu diesem Kommentar
Share on other sites

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.

Link zu diesem Kommentar
Share on other sites

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.

Link zu diesem Kommentar
Share on other sites

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 :)

Link zu diesem Kommentar
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gast
Reply to this topic...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Clear editor

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...