Serial Port, Register Variable, Cutter

Hi,
kann mir das mal einer mit dem Serial Port und dem Cutter erklären?
Bekomme immer die wirren Werte

05.01.2015 23:13:01.00 |        Received Data | Humidity: 3
05.01.2015 23:13:01.00 |        Received Data | 9.00 %		
Temper
05.01.2015 23:13:01.00 |        Received Data | ature: 22.00 *C
05.01.2015 23:13:01.00 |        Received Data |  	

05.01.2015 23:13:11.00 |        Received Data | Humid
05.01.2015 23:13:11.00 |        Received Data | ity: 39.00 %		

05.01.2015 23:13:11.00 |        Received Data | 
Temperature: 22
05.01.2015 23:13:11.00 |        Received Data | .00 *C 	

05.01.2015 23:13:21.00 |        Received Data | Humidity: 39.0
05.01.2015 23:13:21.00 |        Received Data | 0 %		
Temperatu
05.01.2015 23:13:21.00 |        Received Data | re: 22.00 *C 	

05.01.2015 23:13:21.00 |        Received Data | 

05.01.2015 23:13:32.00 |        Received Data | Humidity
05.01.2015 23:13:32.00 |        Received Data | : 39.00 %		
Te
05.01.2015 23:13:32.00 |        Received Data | mperature: 22.00
05.01.2015 23:13:32.00 |        Received Data |  *C 	

05.01.2015 23:13:42.00 |        Received Data | Hu
05.01.2015 23:13:42.00 |        Received Data | midity: 39.00 %
05.01.2015 23:13:42.00 |        Received Data | 		
Temperature
05.01.2015 23:13:42.00 |        Received Data | : 22.00 *C 	

05.01.2015 23:13:52.00 |        Received Data | Humidity: 3
05.01.2015 23:13:52.00 |        Received Data | 9.00 %		
Tempe
05.01.2015 23:13:52.00 |        Received Data | rature: 22.00 *
05.01.2015 23:13:52.00 |        Received Data | C 

Danke und Gruß
Stefan

Kommt bei Dir Zeilenvorschub, neue Zeile bei der Datenausgabe?

Dann wären das Deine Cutterzeichen, wenn Du das Debugfenster nach Hex umstellst, müßte 10 und 13 in Hex für Zeilenvorschub und neue Zeile kommen. Guggst Du:

Gruß Helmut

das ist das einmal in Hex

07.01.2015 20:53:46.00 |        Received Data | 6D 69 64 69 74 79 3A 20 0D 0A 34 30 2E 30 30 
07.01.2015 20:53:46.00 |        Received Data | 0D 0A 20 25 09 0D 0A 09 0D 0A 54 65 6D 70 65 
07.01.2015 20:53:46.00 |        Received Data | 72 61 74 75 72 65 3A 20 0D 0A 32 30 2E 30 30 0D 
07.01.2015 20:53:46.00 |        Received Data | 0A 20 2A 43 20 0D 0A 09 0D 0A 
07.01.2015 20:53:56.00 |        Received Data | 48 75 6D 69 64 69 74 79 3A 20 0D 
07.01.2015 20:53:56.00 |        Received Data | 0A 34 30 2E 30 30 0D 0A 20 25 09 0D 0A 09 0D 
07.01.2015 20:53:56.00 |        Received Data | 0A 54 65 6D 70 65 72 61 74 75 72 65 3A 20 0D 0A 
07.01.2015 20:53:56.00 |        Received Data | 32 30 2E 30 30 0D 0A 20 2A 43 20 0D 0A 09 0D 0A 
07.01.2015 20:54:06.00 |        Received Data | 48 75 6D 69 64 
07.01.2015 20:54:06.00 |        Received Data | 69 74 79 3A 20 0D 0A 34 30 2E 30 30 0D 0A 20 
07.01.2015 20:54:06.00 |        Received Data | 25 09 0D 0A 09 0D 0A 54 65 6D 70 65 72 61 74 75 
07.01.2015 20:54:06.00 |        Received Data | 72 65 3A 20 0D 0A 32 30 2E 30 30 0D 0A 20 2A 
07.01.2015 20:54:06.00 |        Received Data | 43 20 0D 0A 09 0D 0A 
07.01.2015 20:54:17.00 |        Received Data | 48 75 6D 69 64 69 74 79 3A 20 0D 0A 34 30 
07.01.2015 20:54:17.00 |        Received Data | 2E 30 30 0D 0A 20 25 09 0D 0A 09 0D 0A 54 65 6D 
07.01.2015 20:54:17.00 |        Received Data | 70 65 72 61 74 75 72 65 3A 20 0D 0A 32 30 2E 
07.01.2015 20:54:17.00 |        Received Data | 30 30 0D 0A 20 2A 43 20 0D 0A 09 0D 0A 
07.01.2015 20:54:27.00 |        Received Data | 48 75 6D 69 64 69 74 79 
07.01.2015 20:54:27.00 |        Received Data | 3A 20 0D 0A 34 30 2E 30 30 0D 0A 20 25 09 0D 0A 
07.01.2015 20:54:27.00 |        Received Data | 09 0D 0A 54 65 6D 70 65 72 61 74 75 72 65 3A 
07.01.2015 20:54:27.00 |        Received Data | 20 0D 0A 32 30 2E 30 30 0D 0A 20 2A 43 20 0D 0A 09 0D 0A 
07.01.2015 20:54:37.00 |        Received Data | 48 75 
07.01.2015 20:54:37.00 |        Received Data | 6D 69 64 69 74 79 3A 20 0D 0A 34 30 2E 30 30 0D 
07.01.2015 20:54:37.00 |        Received Data | 0A 20 25 09 0D 0A 09 0D 0A 54 65 6D 70 65 72 
07.01.2015 20:54:37.00 |        Received Data | 61 74 75 72 65 3A 20 0D 0A 32 30 2E 30 30 0D 
07.01.2015 20:54:37.00 |        Received Data | 0A 20 2A 43 20 0D 0A 09 0D 0A 
07.01.2015 20:54:47.00 |        Received Data | 48 75 6D 69 64 69 74 79 3A 20 0D 0A 
07.01.2015 20:54:47.00 |        Received Data | 34 30 2E 30 30 0D 0A 20 25 09 0D 0A 09 0D 0A 
07.01.2015 20:54:48.00 |        Received Data | 54 65 6D 70 65 72 61 74 75 72 65 3A 20 0D 0A 32 30 2E 30 30 0D 0A 20 2A 43 20 0D 0A 09 0D 0A 
07.01.2015 20:54:58.00 |        Received Data | 48 75 6D 69 64 69 
07.01.2015 20:54:58.00 |        Received Data | 74 79 3A 20 0D 0A 34 30 2E 30 30 0D 0A 20 25 
07.01.2015 20:54:58.00 |        Received Data | 09 0D 0A 09 0D 0A 54 65 6D 70 65 72 61 74 75 
07.01.2015 20:54:58.00 |        Received Data | 72 65 3A 20 0D 0A 32 30 2E 30 30 0D 0A 20 2A 43 
07.01.2015 20:54:58.00 |        Received Data | 20 0D 0A 09 0D 0A 
07.01.2015 20:55:08.00 |        Received Data | 48 75 6D 69 64 69 74 79 3A 20 0D 0A 34 30 2E 
07.01.2015 20:55:08.00 |        Received Data | 30 30 0D 0A 20 25 09 0D 0A 09 0D 0A 54 65 6D 
07.01.2015 20:55:08.00 |        Received Data | 70 65 72 61 74 75 72 65 3A 20 0D 0A 32 30 2E 30 30 0D 0A 20 2A 43 20 0D 0A 09 0D 0A 
07.01.2015 20:55:18.00 |        Received Data | 48 75 6D 69 64 69 74 79 3A 
07.01.2015 20:55:18.00 |        Received Data | 20 0D 0A 34 30 2E 30 30 0D 0A 20 25 09 0D 0A 
07.01.2015 20:55:18.00 |        Received Data | 09 0D 0A 54 65 6D 70 65 72 61 74 75 72 65 3A 20 0D 0A 32 30 2E 30 30 0D 0A 20 2A 43 20 0D 0A 
07.01.2015 20:55:18.00 |        Received Data | 09 0D 0A 
07.01.2015 20:55:29.00 |        Received Data | 48 75 6D 
07.01.2015 20:55:29.00 |        Received Data | 69 64 69 74 79 3A 20 0D 0A 34 30 2E 30 30 0D 
07.01.2015 20:55:29.00 |        Received Data | 0A 20 25 09 0D 0A 09 0D 0A 54 65 6D 70 65 72 61 
07.01.2015 20:55:29.00 |        Received Data | 74 75 72 65 3A 20 0D 0A 32 30 2E 30 30 0D 0A 
07.01.2015 20:55:29.00 |        Received Data | 20 2A 43 20 0D 0A 09 0D 0A 

…das ist mit Zeilenvorschub

So habe es jetzt erst einmal soweit hin bekommen

07.01.2015 21:28:36.00 | Received Data | 39.00
07.01.2015 21:28:36.00 | Received Data | 21.00
07.01.2015 21:28:36.00 | Buffer | .00
07.01.2015 21:28:36.00 | Buffer | .0021.00
07.01.2015 21:28:46.00 | Received Data | 39.00
07.01.2015 21:28:46.00 | Received Data | 21.00
07.01.2015 21:28:46.00 | Buffer | .0021.0039.00
07.01.2015 21:28:46.00 | Buffer | 00
07.01.2015 21:28:56.00 | Received Data | 40.00
07.01.2015 21:28:56.00 | Buffer | 0040.00
07.01.2015 21:28:56.00 | Received Data | 20.00
07.01.2015 21:28:57.00 | Buffer | 0040.0020.00

aber warum steht im Buffer nicht der aktuelle Wert?

// wenn das Skript von einer RegisterVariable-Instanz aus aufgerufen worden ist
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 $data mindestens 16 Zeichen lang ist
    if (strlen($data) >= 5)
    {
        // $data in Blöcke von bis zu 16 Zeichen zerlegen
        $datasets = str_split($data, 16);
        // $data leeren
        $data = "";

        // alle Datensätze durcharbeiten
        for ($i = 0; $i < count($datasets); $i++)
        {
            // vollständige Datensätze (genau 16 Zeichen lang) ausgeben
            if (strlen($datasets[$i]) == 5)
            {
                echo "empfangener Datensatz: ".$datasets[$i]."
";
            }
            else
            {
                // Unvollständige Datensätze in $data schreiben
                $data = $datasets[$i];
            }
        }
    }

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

Setz mal im Splitter die Hexwerte „0D 0A“ (dezimal 13 und 10) als Trennzeichen und schaue dann mal wie er es trennt-
Gruß Helmut

Ich hab 0A für Links und 2E für Rechts gesetzt so bekomme ich die Zwei Stellen vorm Komma.
Nur wie bekomme ich sie jetzt in eine Variable geschrieben?

Gruß und Danke

Registervariable auf den Cutter setzen und die Registervariable dann auslesen.

Was bekommst Du genau wenn Du 0A links und 2E rechts setzt?
Gruß Helmut

Und warum nimmst 2E , das Komma als Trennzeichen? Willst Du nur den geraden Wert?

Und dann muß ich die Register Variable mit einem Skript auslesen?
Ja genau, die Zahl vor dem Komma reicht mir.

Genau, Nancilla hat auch einen solchen Fragesteller :wink:

Das kommt so oft vor, einfach mal die Suchfunktion quälen, ist zeitaufwendig, hilft aber :wink:

Zum Testen kannst Du mal folgendes Script als Targetscript in der Registervariable eintragen und als übergeordneter Instance den Cutter.
Dann mal im Meldungsfenster, es kommt NUR im Meldungsfenster was, schauen was da so erscheint

<?
if ($_IPS['SENDER'] == "RegisterVariable")
{
    // bereits im Puffer der Instanz vorhandene Daten in $data kopieren
    $data  = RegVar_GetBuffer($_IPS['INSTANCE']);
echo $data;
}
?>

Gruß Helmut

Hi,
da kommt als Meldung „4020“ zurück

Gruß

Und, freust Du Dich? Kann der Wert stimmen?

Wäre es nicht besser, Du holst Dir de Werte nach Hex 0D und 0A, damit Du die komplette Nachricht bekommst?

Du kannst Dir dann mit strtok oder split die Werte holen die Du brauchst?

Gruß Helmut

Hi,
jo das schon nicht schlecht, ja die Werte stimmen exakt.
Ja denke wird dann den Wert mit Kommastelle mir holen, ich dachte so wäre es erst einmal leichter.
Ich werde das Morgen mal testen und dir dann berichten.

Gruß
Stefan

Na denn, auf geht’s :wink:

Wenn jemand fragt: läuft’s bei Dir, dann kannst Du sagen „Joo“
Gruß Helmut

Hab das ganze jetzt auch auf dem Raspberry am laufen, bekomme die Daten die ich vom Arduino her schicke auch korrekt angezeigt „Hello Pi“, was ich aber noch nicht verstanden habe wie bekomme ich die Daten jetzt aus der Register Variable / Skript in eine Variable des IPS?
Oder nach was muß ich im Forum suchen?

Wäre das eine Möglichkeit?

Gruß
Stefan

Hatte ich schon geschrieben, zeig mal eine komplette Ausgabe aber bitte mit 0D 0A als Wert für den Cutter!!

Gruß Helmut

11.01.2015 00:45:21.00 |        Received Data | 39.00
22.0
11.01.2015 00:45:21.00 |        CURRENTBUFFER | 39.00
22.0
11.01.2015 00:45:21.00 |            SENDCHUNK | 
11.01.2015 00:45:21.00 |        Received Data | 0

11.01.2015 00:45:21.00 |        CURRENTBUFFER | 22.00

11.01.2015 00:45:21.00 |            SENDCHUNK | 
11.01.2015 00:45:32.00 |        Received Data | 39.00
11.01.2015 00:45:32.00 |        CURRENTBUFFER | 39.00
11.01.2015 00:45:32.00 |        Received Data | 
22.00

11.01.2015 00:45:32.00 |        CURRENTBUFFER | 39.00
22.00

11.01.2015 00:45:32.00 |            SENDCHUNK | 
11.01.2015 00:45:32.00 |            SENDCHUNK | 
11.01.2015 00:45:42.00 |        Received Data | 39.00
22.00

11.01.2015 00:45:42.00 |        CURRENTBUFFER | 39.00
22.00

11.01.2015 00:45:42.00 |            SENDCHUNK | 
11.01.2015 00:45:42.00 |            SENDCHUNK | 
11.01.2015 00:45:52.00 |        Received Data | 39.00
2
11.01.2015 00:45:52.00 |        CURRENTBUFFER | 39.00
2
11.01.2015 00:45:52.00 |            SENDCHUNK | 
11.01.2015 00:45:52.00 |        Received Data | 2.00

11.01.2015 00:45:52.00 |        CURRENTBUFFER | 22.00

11.01.2015 00:45:52.00 |            SENDCHUNK | 

das gibt er mit „Linke Trennzeichen: 0D“ und „REchte Trennzeichen: 0A“

da Du zwei Werte mit unterschiedlicher Beschreibung von der seriellen Schnittstelle bekommst
würde ich auch zwei Cutter und zwei Registervariablen erstellen zB Temperatur Cutter und Feuchte Cutter
und die Registervariablen „Feuchte Registervariable“ und „Temperatur Registervariable“
haben dann die jeweiligen Zuweisungen von Scripten und Instancen

Also:
2 Floatvariablen erstellen zB Feuchte und Temperatur

2 Cutter und 2 Registervariablen erstellen: Cutter Temperatur erhält die rechten Trennzeichen "Temperatur= „, linken Trennzeichen " 'C“ ,
übergeordnete Instance ist die ser. Schnittstelle

darunter bekommt der Cutter Temperatur eine Registervariable „Temperatur Registervariable“
Target dazu ist das Script Temperatur lesen, übergeordnete Instance ist der Temperatur Cutter

und der Cutter Feuchte erhält die rechten Trennzeichen "Humidity: ", linken Trennzeichen % ,
übergeordnete Instance ist die ser. Schnittstelle

darunter bekommt der Cutter Feuchte eine Registervariable „Feuchte Registervariable“
Target dazu ist das Script Feuchte lesen, übergeordnete Instance ist der Feuchte Cutter

Script Feuchte:

<?
if ($_IPS['SENDER'] == "RegisterVariable")
{
$data = $_IPS['VALUE'];
// ev. zum Testen im Meldungsfenster anzeigen lassen
echo $data;
// $data in Floatvariable $data1 schreiben
$data1 = floatval ($data);
// ev. zum Testen im Meldungsfenster anzeigen lassen
echo $data1;
// $data1 in Floatvariable "Feuchte" schreiben
SetValueFloat(deine VarID,$data1);
}
?>

Temperatur Script

 <?
if ($_IPS['SENDER'] == "RegisterVariable")
{
$data = $_IPS['VALUE'];
// ev. zum Testen im Meldungsfenster anzeigen lassen
echo $data;
// $data in Floatvariable $data1 schreiben
$data1 = floatval ($data);
// ev. zum Testen im Meldungsfenster anzeigen lassen
echo $data1;
// $data1 in Floatvariable "Temperatur" schreiben
SetValueFloat(deine VarID,$data1);
}
?> 

Versuch mal, Gruß Helmut

Perfekt!
So etwas hatte ich schon die ganze Zeit gesucht.
Hab das mal so wie du es in deinem Beispiel hast nachgebastelt, doch bleiben die Variablen auf 0 stehen.
Was mach ich schon wieder falsch :mad:

Gruß und Danke
Stefan

Müßte mal die Scripte und den Baum sehen damit ich die ID’s sehen kann. Beide !

Was mir so auffällt: Deine Cutter rechts und links haben die Leerzeichen nicht drin.

Bei *C muß " *C" stehen und bei % " %", das ist rechts und links bei Humidity: "Humidity: " und bei Temperatur "Temperatur " .

Auch die Leerzeichen sind Cutterzeichen.

Gruß Helmut

<?
if ($_IPS['SENDER'] == "RegisterVariable")
{
// bereits im Puffer der Temperatur Registervariablen vorhandene Daten in $data kopieren
$data  = RegVar_GetBuffer($_IPS['INSTANCE']);
// ev. zum Testen im Meldungsfenster anzeigen lassen
echo $data;
// $data in Floatvariable $data1 schreiben
$data1 = floatval ($data);
// ev. zum Testen im Meldungsfenster anzeigen lassen
echo $data1;
// $data1 in Floatvariable "Feuchte" schreiben
SetValueFloat(16408 /*[Register Variable Luftfeuchtigkeit\Luftfeuchtigkeit]*/,$data1);
}
?>
 <?
if ($_IPS['SENDER'] == "RegisterVariable")
{
// bereits im Puffer der Temperatur Registervariablen vorhandene Daten in $data kopieren
$data  = RegVar_GetBuffer($_IPS['INSTANCE']);
// ev. zum Testen im Meldungsfenster anzeigen lassen
echo $data;
// $data in Floatvariable $data1 schreiben
$data1 = floatval ($data);
// ev. zum Testen im Meldungsfenster anzeigen lassen
echo $data1;
// $data1 in Floatvariable "Temperatur" schreiben
SetValueFloat(48459 /*[Register Variable Temperatur\Temperatur]*/,$data1);
}
?>

Die Leerzeichen hatte ich im Arduino raus genommen…