Umrechnungsscript

Ich bekomme alle meine Temperaturwerte aus der WAGO in 1/100 Grad. Ich suche nun eine Möglichkeit die ausgelesenen Werte umzurechnen in die richtigen Werte. Ich gehe davon aus das IPS V2 eine solche Funktion nicht implementiert hat. Also muss ich alle eingehenden Werte erstmal über eine Art Umrechnungsscript schicken. Ich habe aber überhaupt keinen Ansatz dafür. :frowning: Hat jemand von Euch schonmal so ein Script gemacht ?

Gruß
ColdIce

so müsste es gehen…


<?
  if (IPS_SENDER == "Variable")
  {
    $Object=IPS_GetObject($IPS_VARIABLE);
    $name=$Object[ObjectName];
    $Wert=GetValueFloat($IPS_VARIABLE);
    $Wert=$Wert/100;

	 // Sollte die Variable nicht existeiren, leg eine neue an.
	 @$dez=IPS_GetVariableID($name.'_dezimal');
	 if ($dez == false)
	 {
		$dez=IPS_CreateVariable(2);
		IPS_SetName($dez, $name.'_dezimal');
		IPS_SetParent($dez, 23607);  // Hier die ID der Kategorie in der deine Dezimalwerte eingeordnet werden sollen
	 }
	 // ind $dez muss jetzt also eine gültige VariablenID stehen. Egal was kommt.
	 // Also kann der neue Wert geschrieben werden.
	 SetValueFloat($dez, $Wert);
  }
?>

Voraussetzung ist, dass deine Variablennamen eindeutig sind. Deine Temperaturen triggern alle dieses Script. Das Script legt dann, falls nötig, eine neue Variable an und dort wird dann immer die richtige Temperatur als Dezimalwert drin stehen.

Du kannst alle deine Variablen mit nur einem, diesem, Script abfrühstücken.

Gruß,

Toni

Hallo Toni,

da hat sich ein kleiner Fehler eingeschlichen:
Die Zeile

    $Wert=GetValueFloat($IPS_VARIABLE);

muss so lauten, da es sich um einen Integer handelt:

    $Wert=GetValueInteger($IPS_VARIABLE);

Es geht sogar noch einfacher, da es sich hier um die Triggervariable handelt:

    $Wert=$IPS_VALUE;

Gruß
HJH

Man kann auch als Grundlage ein Skript von hier nehmen:
Wie kann ich…? - IP-Symcon :: Automatisierungssoftware

Und die SetValue Zeile ein wenig anpassen. Fertig :wink:


//Event auswerten
if($IPS_SENDER != "Variable")
 return;

SetValue(CreateVariableIDByName($IPS_VARIABLE, 'Umgerechnet', 2), $IPS_VALUE / 100);

function CreateVariableIDByName($id, $name, $type)
{
  global $IPS_SELF;
  $vid = @IPS_GetVariableIDByName($name, $id);
  if($vid===false) {
    $vid = IPS_CreateVariable($type);
    IPS_SetParent($vid, $id);
    IPS_SetName($vid, $name);
    IPS_SetInfo($vid, "This Variable was created by Script #$IPS_SELF");
  }
  return $vid;
}

paresy