Xbee und Sensoren

Hallo Gemeinde,
habe mal angefangen, mit Xbee zu experimentieren. Dazu habe ich mir folgende Komponenten zugelegt:

1 x Arduino Uno
3 x Xbee-Pro 802.15.4 RF Modul Serie 1
1 x XBee Explorer USB WRL-08687
1 x XBee Explorer Regulated
1 x Seeedstudio Grove-Temperatursensor
1 x Seeedstudio Grove - Base Shield

Am IPS-Server habe ich nach der Anleitung von RWN ein Xbee über den Xbee-Explorer USB angebunden und ein Xbee mit dem Temperatursensor, dem Arduino und dem Grove-Base-Shield verbunden. Die empfangenen Temperaturdaten werden dann vom Arduino an IPS gesendet. Wenn ich jetzt versuche, den Temperatursensor direkt über den Xbee-Explorer-Regulated anzuschliessen (also ohne Arduino), werden keine Daten empfangen.
kann ich überhaupt den Sensor direkt am Xbee anschliessen oder muss der Sensor immer noch zuerst ans Arduino?

Hoffe, ich habe mein Problem einigermaßen deutlich dargestellt.

Grüsse, Jürgen

Grundsätzlich schon.

Soweit ich weiß gibt es aber noch kein fertiges Script dafür um die ADC und PIO des XBee per IPS abzufragen.

Ich hab vor langer Zeit mal damit angefangen, http://www.ip-symcon.de/forum/threads/12184-XBee-Remote-Commands?highlight=xbee

es dann aber mangels Bedarf nicht weiterverfolgt.-

gruß
bb

Danke Bernhard für die Info.
Aber das würde ja bedeuten, dass ich für jeden Sensor zusätzlich noch ein Arduino brauche. Oder kann ich das Arduino an IPS anschließen und die Daten des Sensors per Xbee an den Arduino senden und diese werden dann in IPS angezeigt?

Grüße, Jürgen

Hallo Jürgen,
ich habe das bei deinen Links mal nachgelesen. Der Temperatursensor gibt doch einen Widerstandswert zurück.
XBee nutzt normalerweise einen digitalen Eingang. Das würde nicht passen und Du würdest für jeden Temperatursensor einen Arduino benötigen.
Zum Experimentieren ist das gut, aber zum Erfassen von mehreren Temperaturwerten, ist der Aufwand zu gross.
Da bieten sich andere Möglichkeiten an.

XBee als Ersatz oder Verlängerung einen seriellen Schnittstelle ist erprobt und läuft recht gut

Stimme audi2000 zu.

Technisch ist es möglich einen Temperatursensor direkt an den XBee anzuschließen. Ein fertiges Script dazu hab ich noch nicht im Forum gesehen. (ich hatte damals ja auch nur ein Framework gebaut)

Es ist natürlich möglich einen Arduiono zwischenzuschalten, der Aufwand nur um eine Temperatur einzulesen wäre aber meiner Meinung nach nicht gerechtfertigt.
Sieht aber wieder anders aus wenn der Arduino auch noch andere Sachen erledigen soll. Dann ist das wieder eine interessante Sache.

Du hast doch HM, da gibst doch auch massig Basteleien für externe Temp Sensoren.

gruß
bb

Hallo Bernhard und Rainer,
schade, dass es nicht funktioniert und vielen Dank für eure Arbeit.
Dachte, Xbee könnte ich gut einsetzen, um verschiedene Sensoren relativ günstig an IPS an zu binden. Bin mit meinem Homematic zufrieden. Es gibt jedoch leider nicht so viele Sensoren und auch relativ teuer.

Grüße, Jürgen

Grundsätzlich funktioniert das ohne probleme.
Damit xbee sich nicht totsendet vor lauter analogen Werten , messe ich pro Minute 5 samples. Reicht , um zu erfahren, ob die Waschmaschiene Strom zieht, oder nicht. Hier mal ein kleines Script, wo auf zwei Kanäle 5 Samples eingelesen werden, . 5 Samples deshalb, sollte er einmal einen falschen wert liefern, ist das hier nicht so schlimm, das script nimmt den Durchschnitt. Wollte , auch nur Kund tun, das ich serielle, digitale und analoge Werte mit xbee problemlos einlesen kann. Ist nur eine Sache des scripts, wie ich das auswerte.



if ($IPS_SENDER == "Execute")
{
    echo "Dieses Script kann nicht von Hand ausgeführt werden.";
    return;
}



$daten = $IPS_VALUE; // Daten von Registervariable

IPS_LogMessage($IPS_SELF, $IPS_VALUE); // Daten im Meldungsfenster ausgeben


//-----------------------------------------------------------------------------

/*
$handle = fopen("c:/analog.txt", "wb");
fwrite($handle,$daten,$strg_lenght."
");
fclose($handle);
RegVar_SendText(59099 /*[XBee Splitter_10_Waschmasch\Register Variable]*/,"");
*/



$strl=strlen($daten);

//Den ganzen Binären String umwandel in ASCII um die HEX Werte anzuzeigen
//Byte für Byte

for ($i = 0;$i < $strl; $i++)
    {
        $char = bin2hex(substr($daten,$i,1));
		  $gesdaten .=$char;
    }

//$file = "C:\\analog.txt";
//file_put_contents($file,$gesdaten);

// Die Stringlänge ist 33 bei 5 Sampels
// daraus wird dann der Durchschnitt ermittelt

  $Byte1_Trockner = "0x".substr($gesdaten, -5,3);
  $Byte2_Trockner = "0x".substr($gesdaten, -17,3);
  $Byte3_Trockner = "0x".substr($gesdaten, -29,3);
  $Byte4_Trockner = "0x".substr($gesdaten, -41,3);
  $Byte5_Trockner = "0x".substr($gesdaten, -53,3);
  
  $Byte1_Waschm = "0x".substr($gesdaten, -9,3);
  $Byte2_Waschm = "0x".substr($gesdaten, -21,3);
  $Byte3_Waschm = "0x".substr($gesdaten, -33,3);
  $Byte4_Waschm = "0x".substr($gesdaten, -45,3);
  $Byte5_Waschm = "0x".substr($gesdaten, -57,3);
  
  
  $wert1="0x".dechex($Byte1_Trockner + $Byte2_Trockner + $Byte3_Trockner + $Byte4_Trockner + $Byte5_Trockner);
  $wert2="0x".dechex($Byte1_Waschm + $Byte2_Waschm + $Byte3_Waschm + $Byte4_Waschm + $Byte5_Waschm);
  
  // Daraus der Durchschnittswert
  
  $durchn_wert1 = ($wert1 / 5);
  $durchn_wert2 = ($wert2 / 5);

SetValuestring(45748 /*[Analog_Wert_Waschmaschine]*/,$durchn_wert2);
SetValuestring(40600 /*[Analog_Wert_Trockner]*/,$durchn_wert1);



Ohhh, du kannst also mit dem Xbee im API Mode kommunizieren ?
Richtig per Mesh Network oder nur Point to Point ?
Das wäre ja schön.
Wie oben geschrieben hatte ich auch mal damit angefangen, es dann aber nie wirklich verwendet.

interessiert
bb

Ein richtiges Netzwerk habe ich da nicht. Brauch ich auch nicht. Frage von 5 Xbee Adressen Werte ab. Einmal Digital , Seriell (Temperatur Werte) und Analog. Ist aber auch kein Problem , Werte zu schicken. (Empfänger API, Rest normal), wie in der Config von IPS beschrieben.

Hallo dittrg,
so wie ich dich jetzt verstanden habe, wäre es also möglich, meinen Temperatursensor (oder andere Sensoren) an Xbee1 an zu schließen und damit die Daten an Xbee2 zu senden. Xbee2 ist an IPS angeschlossen und mit deinem Script kann ich dann die Daten auswerten?
Muss ich dazu noch eine Datei „analog.txt“ anlegen? Wäre nett, wenn du mir noch ein paar Erläuterungen zu deinem Script geben könntest.

Grüße, Jürgen

Nein, man muß keine Datei erzeugen und die Daten abspeichern, mache ich nur, damit ich in Ruhe den String zerlegen kann, der bei 5 Samples z.B so aussieht.
050e000000030a02a00000030a02160000030a020a0000030a02060000030c0204

So sieht das auch aus, wenn man die Register Variable vom xbee debugt.

Das ganze wird sehr Ausführlich beschrieben in :

Analog to Digital Conversion on Xbee 802.15.4

http://www.digi.com/support/kbase/kbaseresultdetl?id=2180

Hmm naja,
in dem Snipplet machst ja nur aufbereiten der Daten, skalieren ect. Das ist ja die leichtere Übung an dem Ganzen. Um nicht zu sagen Kinderkram.

Die Schwierigkeit ist viel mehr einen beliebigen Xbee im Mesh Netzwerk anzusprechen, ihn Remote zu konfigurieren, und ihn dann noch dazu zu bringen beliebige Daten (ADC oder PIO) einzulesen und zurückzusenden.
Wenn das dann noch halbwegs universell sein soll wirds schwierig.

Das wäre interesannt…

gruß
bb

Naja ansprechen bzw. senden geht ja genau so. Konfigurieren mach ich nicht remote, da ich nicht so viele habe. Ich konfiguriere den xbee am PC , teste das ganze aus und setze in dann vor Ort ein. Keine Lust immer zu laufen oder mir das Laben mit remote Befehlen schwer zu machen

Hallo dittrg,
dank deiner Anleitung habe ich es jetzt endlich hinbekommen. Habe mal an A0 3,3 Volt angelegt und in IPS wird der Hexwert 00 FF angezeigt. Das entspricht ja dem Dezimalwert 1023. Indem ich den Wert durch 310 dividiere, erhalte ich den korrekten Wert von 3.3 Volt. Wie kann ich denn jetzt einstellen, dass mir z.B. nicht 2.41587652 angezeigt wird, sondern nur 2 Stellen hinter dem Komma (2.41)?

Nochmals Danke und Grüße,
Jürgen

http://php.net/manual/de/function.round.php

bb

Danke, funktioniert.

Hallo Leute,
ich hab auch ein Problem beim Empfangen von Analogen Daten via Xbee.

Ich habe an meinem Remote Xbee ein tmp36 angeschlossen und erhalte nun über das Terminal von X-CTU folgenden String zurück:
7E001C835678240005060001E001C401E001A001E0019401E0019201E00190FB
Wenn ich der Anleitung von Digi zur Analog/Digital conversion folge sind meiner Meinung nach meine Daten 01E0 01C4
ich hab jetzt ein Sampling von 5 eingestellt somit bekomme ich nach 4 andere Werte aber die interessieren mich momentan nicht. Rechne ich jetzt die ersten Werte von ADC0 und 1 um komme ich auf 01E0 = 480 und 01C4 = 452.
An meinem Temperatursensor liegen aber 0,7V an (Raumtemp. nachgemessen)
wo ist mein Fehler, kann mir da einer von euch helfen?
Danke.