Daten von Arduino auslesen (Register Variable)

Hallo Gemeinde

Ich versuche Daten die von einem Arduino (IoT alias PretzelBoard) kommen mit einer RegisterVariablen in eine IPS-Variable zu schreiben. ( Temperatur vin einem DS18B20).
Dies sind meine ersten Versuche mich mit der Materie „IoT“ auseinander zu setzten.
Leider bekomme ich das mit dem Auswertescript nicht auf die Reihe :frowning: und brauche mal etwas Hilfe.

Ich habe eine RegisterVariable angelegt, welche Daten von einem ClientSocket erhält. Im Debug kommen folgende Daten an.


Dump der RegVar:

XT: 24.12.2016 12:56:01.00 |             RECEIVED | Temp;21.69;<CR><LF>
HEX: 24.12.2016 12:56:01.00 |             RECEIVED | 54 65 6D 70 3B 32 31 2E 36 39 3B 0D 0A 
TXT: 24.12.2016 12:56:01.00 |            PROCESSED | Temp;21.69;<CR><LF>
HEX: 24.12.2016 12:56:01.00 |            PROCESSED | 54 65 6D 70 3B 32 31 2E 36 39 3B 0D 0A 
TXT: 24.12.2016 12:56:01.00 |               BUFFER | <CR><LF>
HEX: 24.12.2016 12:56:01.00 |               BUFFER | 0D 0A 
TXT: 24.12.2016 12:57:01.00 |             RECEIVED | Temp;21.69;<CR><LF>
HEX: 24.12.2016 12:57:01.00 |             RECEIVED | 54 65 6D 70 3B 32 31 2E 36 39 3B 0D 0A 
TXT: 24.12.2016 12:57:01.00 |            PROCESSED | Temp;21.69;<CR><LF>
HEX: 24.12.2016 12:57:01.00 |            PROCESSED | 54 65 6D 70 3B 32 31 2E 36 39 3B 0D 0A 
TXT: 24.12.2016 12:57:01.00 |               BUFFER | <CR><LF>
HEX: 24.12.2016 12:57:01.00 |               BUFFER | 0D 0A 
TXT: 24.12.2016 12:58:01.00 |             RECEIVED | Temp;21.69;<CR><LF>
HEX: 24.12.2016 12:58:01.00 |             RECEIVED | 54 65 6D 70 3B 32 31 2E 36 39 3B 0D 0A 
TXT: 24.12.2016 12:58:01.00 |            PROCESSED | Temp;21.69;<CR><LF>
HEX: 24.12.2016 12:58:01.00 |            PROCESSED | 54 65 6D 70 3B 32 31 2E 36 39 3B 0D 0A 
TXT: 24.12.2016 12:58:01.00 |               BUFFER | <CR><LF>
HEX: 24.12.2016 12:58:01.00 |               BUFFER | 0D 0A 
TXT: 24.12.2016 12:59:01.00 |             RECEIVED | Temp;21.75;<CR><LF>
HEX: 24.12.2016 12:59:01.00 |             RECEIVED | 54 65 6D 70 3B 32 31 2E 37 35 3B 0D 0A 
TXT: 24.12.2016 12:59:01.00 |            PROCESSED | Temp;21.75;<CR><LF>
HEX: 24.12.2016 12:59:01.00 |            PROCESSED | 54 65 6D 70 3B 32 31 2E 37 35 3B 0D 0A 
TXT: 24.12.2016 12:59:01.00 |               BUFFER | <CR><LF>
HEX: 24.12.2016 12:59:01.00 |               BUFFER | 0D 0A 
TXT: 24.12.2016 13:00:01.00 |             RECEIVED | Temp;21.75;<CR><LF>
HEX: 24.12.2016 13:00:01.00 |             RECEIVED | 54 65 6D 70 3B 32 31 2E 37 35 3B 0D 0A 
TXT: 24.12.2016 13:00:01.00 |            PROCESSED | Temp;21.75;<CR><LF>
HEX: 24.12.2016 13:00:01.00 |            PROCESSED | 54 65 6D 70 3B 32 31 2E 37 35 3B 0D 0A 
TXT: 24.12.2016 13:00:01.00 |               BUFFER | <CR><LF>
HEX: 24.12.2016 13:00:01.00 |               BUFFER | 0D 0A

als Auswertescript habe ich folgendes hinterlegt:


<?
if($_IPS['SENDER'] == "RegisterVariable")
{
 // bereits im Puffer der Instanz vorhandene Daten in $data kopieren
    $data  = RegVar_GetBuffer($_IPS['INSTANCE']);
    // neu empfangene Daten an $data anhängen
    $data .= $_IPS['VALUE'];

    // wenn das Trennzeichen ; in $data gefunden worden ist
    if (strpos($data, ';'))
    {
		
        // $data in durch ; separierte Datensätze zerlegen
        $datasets = explode(';', $data);
		print "hier nach if pos 0 -->";
		print $datasets[0];
		print "   pos 1 -->";
		print $datasets[1]; 
		
		
				
			switch($datasets[0])
			   {
			      case 'Temp':
				  	//print "hier nach case Temp erkannt";
			      	setValue(58197 /*[EG\Wohnzimmer/Esszimmer\Kamin\Schieber\Temp Konvektion]*/,$datasets[1]);		   
			      	//setvalue(26017 /*[EG\Wohnzimmer/Esszimmer\Kamin\Schieber\Temp2]*/,$datasets[2]);
			      	break;
			   }

        
        // $data auf den Inhalt des letzten (unvollständigen) Datensatzes setzen
        $data = $datasets[count($datasets) - 1];
    }

    // Inhalt von $data im Puffer der RegisterVariable-Instanz speichern
    RegVar_SetBuffer($_IPS['INSTANCE'], $data);

  }
?>

Im Log steht dann " 24.12.2016 13:12:16*| Register Variable*| hier nach if pos 0 -->Temp pos 1 -->21.75

Das Script stammt aus dem Forum, welches ich versuche anzupassen. Der Wert wird allerdings nicht in die Variable geschrieben.
Irgendwie verdecken mit im Moment die Bäume die Sicht auf den Wald :smiley:

Vielleicht hat jemand einen Tipp für mich.

Vielen Dank und frohe Weihnachten

Oliver

SO, ich konnte nach längerem ausprobieren und Recherche das Problem „lösen“

Ich habe diesen Teil


// bereits im Puffer der Instanz vorhandene Daten in $data kopieren
    $data  = RegVar_GetBuffer($_IPS['INSTANCE']);
    // neu empfangene Daten an $data anhängen
    $data .= $_IPS['VALUE'];


in


    $data = $_IPS['VALUE'];


geändert.

Nun werden die Daten korrekt eingelesen.

Oliver