Serial Port, Register Variable, Cutter

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…

Was kommt denn im Meldungsfenster je für data1 ?

Das Meldefenster im Skript direkt ist leer und bei Meldungen steht „RegVar Handler result: 0“.

Im Script solltest Du nix starten, da kann nix kommen.

Aber dass im Meldungsfenster gar nichts steht… Du hast doch auch echo $data im Script drin und in der Debuganzeige der Registervariable kommt was… hmm

Edit: Vielleicht wäre es gut, wenn wir mal Teamviewer nutzen

Hab dir ne PN geschickt

Die Scripte in in diesem Threadsollten funktionieren, Fehler war:

Die $data Variable wird durch

$data = $_IPS['VALUE'];

und nicht durch

$data  = RegVar_GetBuffer($_IPS['INSTANCE']);

geholt.

Gruß Helmut

Könnte man so auch Werte an die Serielle Schnittstelle senden?

Einfach mal im Scripteditor ein „C“ eintippen und Alt+Space drücken.
zB:

<?
COMPort_SendText(54996 /*[Serial Port Com0Com 17]*/, "Hallo Thomas");
?>

Oder unabhängig von der Hardware:
RegVar_SendText*( integer $InstanzID, string*$Text )
Michael