Variable von String nach Integer umwandeln

Hallo,

ich habe eine String Variable, da ich über das Webfront bzw. mein Mobile Front imme rdie Zählerwerte eines Zählers manuell eintrage. Da ich nun gemerkt habe, dass ich mit einer String Variable keinen Graphen erzeugen kann, wollte ich fragen, wie ich aus der Variable eine Integer machen kann ohne die bereits erfassten Werte zu verlieren…

Siehe hier - so habe ich angefangen: https://www.symcon.de/forum/threads/16194-Text-Zahlen-in-eine-art-Textbox-eingeben

Nur bekomme ich dann keinen Graphen hin …

Grüße

Hi!

Da wirst du nicht drum herum kommen die CSV mit den geloggten Daten anzupacken…
Du willst ja vmtl. nicht nur alle alten String Werte einfach wieder in eine neue Integer-Variable schreiben (das wäre einfach), sondern du willst ja sicher auch die Timestamps behalten…und da wird es dann kompliziert und du musst die CSV mit dem Log bearbeiten bzw. neu machen.

EDIT: Für andere für die Zukunft >> Bzgl. des Eingabefeldes im WebFront. Hier hättest du aus der Hilfs-String-Variable mit ~TextBox direkt alles in eine Integer-Variable überführen müssen (per Event/Script) und mit SetValue($VarID, (int)$_IPS[„VALUE“]) dann in die Integer-Variable schreiben müssen.

Grüße,
Chris

Danke Bayro… Werde ich mal dran gehen - müssen.

Ein Chart mit String Variablen wird also nicht funktionieren oder?

Nicht mit Symcon. Da bekommt man bei geloggten String Variablen nur eine Art „Text-Historie“.

Mit z.B. HightCharts…evtl. mit Anpassungen. Dass man dort beim Auslesen der Daten aus dem String einen Integer macht. Wäre aber nur ein Pfusch um den alten Pfusch „auszumerzen“. Also eher ungünstig. Ich würde es lieber ordentlich machen und die CSV anpassen. Fällt einem sonst früher oder später eh wieder auf die Füße :smiley:

Bzgl. CSV „anpassen“ musst du mal hier im Forum schauen. Da gab es hin und wieder mal was in der Richtung, auch wenn nicht genau deine Problemstellung. Aber vlt. bekommst du so wenigstens einen Ansatz.

EDIT: Hast du mal versucht die String-Variable einfach über Archive-Control in eine Integer-Variable zu überführen? Also die geloggten Daten… Vlt gibt es da ja ein „Schlupfloch“?! Ich denke aber eher nicht :smiley:

Grüße,
Chris

OK - im Grund langt es mir mit den korrekten Daten ab 2018 …

Nun zur Umsetzung:

Ich erstelle eine Variable (Textbox oder String mit ID 58558 ), so dass ich mittels Webfront Zahlen erfassen kann. Dann hinterlege ich ein Aktions-Skript:

<?
if($IPS_SENDER == "WebFront")
{
   SetValue($_IPS['VARIABLE'], $_IPS['VALUE']);
}
?>

Dann erstelle ich eine weitere Variable mit dem Typ INTEGER (28813).

Nun muss ich ja mittels des Aktions-Skriptes in die INTEGER schreiben - so hattest du es ja vorgeschlagen.

Also muss das finale Aktionsskript nun so aussehen:

<?
if($IPS_SENDER == "WebFront")
{
   SetValue($_IPS['VARIABLE'], $_IPS['VALUE']);
}

SetValueInteger(28813, GetValueString(58558));

?>

Habe ich das so korrekt verstanden?

Den Zwischenschritt kannst du dir sparen!
Wenn du den Wert gar nicht in der String-Variable stehen haben magst, dann kannst du direkt im IPS SENDER WebFront Teil das (int)$_IPS[„VALUE“] in die Integer-Variable schreiben.
Oder halt in String- und Integer-Variable schreiben. Wie du willst.

Grüße,
Chris

ahh ok also final dann so :slight_smile:

 <?
if($IPS_SENDER == "WebFront")
{
   SetValueInteger(28813, GetValueString(58558));
}



?> 

Danke an euch :slight_smile:

Nein…

1.) String-Variable anlegen mit Variablenprofil ~TextBox (z.B. ID 11111)
2.) Integer-Variable anlegen und diese Daten loggen (z.B. ID 22222)
3.) Der String-Variable ein Action Script hinterlegen mit folgendem Inhalt

<?
if ($_IPS["SENDER"] == "WebFront")
{
   //SetValue($_IPS["VARIABLE"], $_IPS["VALUE"]);  // Kommentierung wegnehmen, wenn du die Zahl als Text auch in der String Variable haben willst
   SetValue(22222, (int)$_IPS["VALUE"]);
}
?>

4.) String-Variable ins WebFront verknüpfen und deine Zahl eingeben
5.) Wenn du das Eingabefeld „abschickst“, dann landet die Zahl in der Integer-Variable…oder wenn Kommentierung weg, dann auch in der String-Variable

Das GetValue brauchst du nicht, du weißt in dem Script ja was in $_IPS[„VALUE“] steht. Also das Script weiß es :smiley: Und das kannst du hinschreiben wo du willst…auch in eine Integer Variable :slight_smile:

Grüße,
Chris

logo - wie blöd.

Is ja logisch …:banghead::banghead::banghead:

Danke…

Der Vollständigkeit halber hier mein finales PHP Skript:

// Zähler Hausstrom-Eingabe
if ($_IPS['VARIABLE'] == 39066 /*[Verbrauch\Zähler Hausstrom\Eingabe]*/)
{
        if($IPS_SENDER == "WebFront")
           {
           SetValue(58602 /*[Verbrauch\Zähler Hausstrom\Zählerstand]*/, (int)$_IPS["VALUE"]);
           }
}

// Zähler Wärmepumpe-Eingabe
if ($_IPS['VARIABLE'] == 43058 /*[Verbrauch\Zähler Wärmepumpe\Eingabe]*/)
{
        if($IPS_SENDER == "WebFront")
           {
           SetValue(53355 /*[Verbrauch\Zähler Wärmepumpe\Zählerstand]*/, (int)$_IPS["VALUE"]);
           }
}

// Zähler Wasser-Eingabe
if ($_IPS['VARIABLE'] == 36179 /*[Verbrauch\Zähler Wasser\Eingabe]*/)
{
        if($IPS_SENDER == "WebFront")
           {
           SetValue(34427 /*[Verbrauch\Zähler Wasser\Zählerstand]*/, (int)$_IPS["VALUE"]);
           }
}

So sieht es im Webfront aus - wie bereits beschrieben: Aktionsskript bei der Strin Variable hinterlegen und fertig …