Empfangene Datensätze aus RegisterVariable speichern?

Guten Abend,

ich bin meinem Ziel etwas näher gekommen, meine Waage ins IPS zu bekommen. Da bei der ständen Gewichtsausgabe die Daten binnen Millisekunden ankommen, habe ich nun einen Weg, einfach einen Befehl zu senden und dann kommen die Daten nur auf Abruf.

Jetzt kann ich das Ziel sehen, aber nicht speichern :frowning:

Ich sende an einen Socket ein Befehl, dann kommt ein Schwall zurück und durch ein Leerzeichen als Trennzeichen, bekomme ich Brutto und Nettogewicht in der Echo Ausgabe. Bin nur mal zu blind, um diese Daten in eine Variable zu speichern.

Ich habe das Beispielscript aus der Doku genommen und nur das Trennzeichen geändert.

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);

        // alle nicht durch ; terminierten Datensätze ausgeben
        for ($i = 0; $i < count($datasets) - 1; $i++)
        {
            echo "empfangener Datensatz: ".$datasets[$i]."
";
        }

        // $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);
}
?>

Somit bekomme ich im echo:
Datensatz.JPG

Wie kann ich die Zahl nun wegspeichern?

Herzlichen Dank für einen Tipp!

Variable (int, float …) angelegen und

SetValue — IP-Symcon :: Automatisierungssoftware

Hallo Wolfgang,

das könnte ich. Was mir fehlt, wie die Variable definiert ist.

Wenn ich „$datasets[0]“ nehme zum Beispiel, werden beide Werte nacheinander über diesen Befehl gespeichert.
Das ist mein Problem…

Schreib

$datasets = array($datasets[$i]);

in deine Schleife.

Dann kannst Du hinterher die Einträge des Arrays direkt lesen.

Ich bin jetzt nicht der php-Held, aber so müssts funktionieren:


<?
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);

        // alle nicht durch ; terminierten Datensätze ausgeben
        for ($i = 0; $i < count($datasets) - 1; $i++)
        {
            echo "empfangener Datensatz: ".$datasets[$i]."
";
            $datasets[]  = array($datasets[$i]);
        }

        // $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);
}

print_r($datasets);

echo "empfangener Datensatz 1: ".$datasets[0];

echo "empfangener Datensatz 2: ". $datasets[1];

?> 

Hi Wolfgang,

vielen Dank für deine Antwort. Klappt leider nicht so ganz. In deiner Version, läuft der 1024kb Buffer voll und es passiert nix. Wenn ich deine Zeile unterhalb der Schleife hänge, kommen wie gehabt, beide Datensätze nacheinander an…

Übersteigt alles mein PHP Wissen.
Habe es auf dem übelsten Wege mit einem Cutter und Parser hinbekommen. Bin gespannt, ob es dem Alltag stand hält;(

Freundlichen Gruß,

Hallo Kable,

hab doch noch das gefunden wonach ich wirklich gesucht hab …

#$x = 10; // zum testen // 0 ohne manipulation
    for ($i = 0; $i < 5; $i++)
    {
        #echo "empfangener Datensatz: "."Wert - ".$i."
";
        ${"Value_".$i} = "Value_".$i;   // 
            if(@IPS_GetVariableIDByName(${"Value_".$i},48522 /*[Beispiele\VariableAusVariablenZusammensetzen]*/))
                {    echo IPS_GetVariableIDByName(${"Value_".$i},48522 /*[Beispiele\VariableAusVariablenZusammensetzen]*/)."
";
                    if (IPS_VariableExists(IPS_GetVariableIDByName(${"Value_".$i},48522 /*[Beispiele\VariableAusVariablenZusammensetzen]*/)))
                    #    {setvalue(IPS_GetVariableIDByName(${"Value_".$i},48522 /*[Beispiele\VariableAusVariablenZusammensetzen]*/), "Wert - ".$i*$x);}
                        {setvalue(IPS_GetVariableIDByName(${"Value_".$i},48522 /*[Beispiele\VariableAusVariablenZusammensetzen]*/), "Wert - ".$i);}
                }
            else
                {
                    echo "neue Variable
";
                    #$newVarID = ${"Value_".$i};
                    $newVarID = IPS_CreateVariable (3);
                    IPS_SetName($newVarID, "Value_".$i); // Variable benennen
                    IPS_SetParent($newVarID, 48522);
                #    setvalue(IPS_GetVariableIDByName(${"Value_".$i},48522 /*[Beispiele\VariableAusVariablenZusammensetzen]*/), "Wert - ".$i*$x);
                    setvalue(IPS_GetVariableIDByName(${"Value_".$i},48522 /*[Beispiele\VariableAusVariablenZusammensetzen]*/), "Wert - ".$i);
                }
    }

Das Script erstellt in einer For-Schleife (unterhalb des Scripts (anpassbar. hier ID 48522))) automatisch Variablen mit der Syntax „Value_“.i$.
Diesen werden die die ermittelten Werte $i zugewiesen.

Vielleicht hilft Dir das ja weiter. Bei Fragen?.

Hallo Wolfgang,

vielen Dank für deine Antwort. Ich habe leider nicht so recht die Ahnung, wie ich das mit meiner RegisterVar vereinen soll.
Ich muss mich mal 100h in eine PHP Schulung setzen um da mitlesen zu können.

Ich habe das einfach mal todesmutig ausgeführt und dann wurden auch ganz unten im Objektbaum VAribalen hinzugefügt und einige MInuten später wurde die Verbindung gekappt…

Beim Neustart kam dann ersteinmal ein „Starting halt“ zwecks ParentID und ich war schon am zittern…
Konnte aber die alte Settings.jason zurück kopieren und war wieder online.
Das macht mir natürlich keinen Mut:)

Ich möchte auch nicht deine Zeit hier vergeuden mit so einem „Problem“ eines Anfänger.

Ich hoffe, dass mein bescheidenes Setup mit dem Cutter und Parser standhält und wenn nicht, würde ich liebendgern auf deine Hilfe zurück kommen!

In ein paar Wochen weiß ich mehr, dann wird die Waage täglich benutzt.

Aber nochmals herzlichen Dank!