Hier ein Beispiel für ein AT-Kommando (in diesem Fall das Node Discovery). Darauf sollten dann in der Meldeliste alle gefunden Nodes ausgeworfen werden:
Für das Senden der Daten zu den IOs habe ich noch eine Routine dazwischen geschalten (Ist einfach programmtechnisch so gewachsen). Das Ganze sieht dann so aus:
Irgendwo baue ich meine Nutzdaten für eine IO zusammen. Hier am Beispiel ein Telegramm an die IO mit dem Namen HZG (ist meine Heizung). Nutzdaten stehen in der Var $tel:
Ist wieder ziemlich gekürzt. Im Original ist noch ein Bootloader-Teil und ein paar andere Dinge für meine IOs enthalten. Hoffe nur, ich habe nicht zu viel entfernt:D
Die XBees auf der Seite meiner ATMEL-IOs sind nicht im API-Mode. Warum auch, die senden immer nur an eine Gegenstelle und der Code wird dadurch viel einfacher.
Blöde Frage (php-Dau usw…)
Ich bekomme eine Fehlermeldung beim includen der XBee_Global.ips.php
Warning: include_once(50592) [function.include-once]: failed to open stream: No such file or directory in C:\IP-Symcon\scripts\56441.ips.php on line 4
Warning: include_once() [function.include]: Failed opening ‚50592‘ for inclusion (include_path=’.;C:\php5\pear’) in C:\IP-Symcon\scripts\56441.ips.php on line 4
Notice: Undefined variable: IPS_VALUE in C:\IP-Symcon\scripts\56441.ips.php on line 17
Notice: Undefined variable: IPS_INSTANCE in C:\IP-Symcon\scripts\56441.ips.php on line 19
Warning: regvar_getbuffer: Instance #0 not found! in C:\IP-Symcon\scripts\56441.ips.php on line 19
Notice: Undefined variable: IPS_INSTANCE in C:\IP-Symcon\scripts\56441.ips.php on line 234
Die ID 50592 ist die ID der XBee_Global.ips.php und damit korrekt .
Ich habe die beiden Variablen in der Global angepasst und entsprechend angelegt. (liegen als Unterpunkt zum Com-Port im Baum)
Hat das etwas mit „C:\php5\pear“ zu tun
Bin zwar auch kein PHP-Guru, aber ich würde sagen, include_once(50592) geht nicht!. Wenn das Script auf der Platte „50592.ips.php“ heißt, dann musst du es auch so aufrufen include_once(„50592.ips.php“); (glaube ich zumindest)
Das deutet darauf hin, dass das Script nicht von RegVar aufgerufen wurde, sondern du es händisch ausgeführt hast, oder?
Hoffe, das hilft etwas. Und: Es gibt keine blöden Fragen, maximal blöde Antworten;)
include_once(50592) hat IPS im Logfenster selbst geschrieben. Ich hatte das Global Script angegeben und er hat die ID dazu selbst ergänzt.
Händisch aufgerufen ist korrekt - es hatte sich irgendwie nichts getan.
Dein Bild war sehr hilfreich, ich hatte in der XBee Register Variablen das Global Script angegeben und nicht das aufrufende.
Mein IPS will gerade nichtmehr - werde das morgen nochmal nachschauen…
Er schreibt jetzt zyklisch (bei jedem vom Arduino gesendeten String) etwas von Frame received aber ansonsten kommt die gleiche Meldung mit include_once usw…
Hi
Herzlichen Dank erstmal dafür, dass mit Eurer Hilfe endlich die ersten Nachrichten von meinem sendenden Arduino in IPS aufgetaucht sind. Hoffe den Rest kriege ich auch noch hin…
Verstehe ich das richtig, dass es für die Node discovery nochmal ein eigenes Script gibt?
Im Empfangs-Script ist noch ein kleiner Fehler, wenn man Nodes hat welche eine Join Notification senden, wird das erste Zeichen des Node Identifier abgeschnitten.
Ca. in Zeile 216:
$io_name = strtok(substr($data,22),chr(0));
gegen
$io_name = trim(strtok(substr($data,21),chr(0)));
austauschen.
Da ich dennoch Probleme hatte eine Nodes zu erreichen, und im Array der bekannten Nodes teilweise veraltet Einträge waren, hate ich einen Timer auf das Discover-Script gelegt und lösche vorhher noch den Inhalt der Nodes-Var.
Aktuell kämpfe ich damit die Digital-I/O anzusprechen.
Ich möchte einen Ausgang schalten (siehe hier) über ein Remote AT Command.
Bekomme aber immer nur 0x04 (Remote Command Transmission Failed.) als 18. Byte zurück.
Anbei mein Script, vielleicht geht es ja bei jemanden ?
function XBee_RemoteAtCommand($data,$node)
{
global $nodes,$xbee_debug;
//Node suchen
if ( !($key = array_search ( $node, $nodes )) )
{
//nicht gefunden
IPS_LogMessage("XBee","Node for transmit not found: ".$node);
return (false);
}
//Remote AT Command
$frame = chr(0x17).chr(0x01);
//Adressen hinzufügen
for ($x=0; $x < 20;$x+=2)
{
$frame .= chr(hexdec(substr($key,$x,2)));
}
//Apply changes on Remote
$frame .= chr(0x02);
//Daten anhängen (AT Command + Payload)
$frame .= $data;
if ($xbee_debug)
{
$len = strlen($frame);
$debug = "";
for ($x=0; $x < $len;$x++){
$debug = $debug." ".dechex(ord(substr($frame,$x,1)));
}
IPS_LOGMESSAGE("XBee","Frame send: ".$debug);
}
XBee_Send($frame);
}
Edit
Ok geht doch
Den XBee als Router und nicht End Device einstellen, und schon geht es