FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: ritchie am 11 Mai 2013, 16:03:10

Titel: FHEM Variable in PERL Script auslesen/schreiben ...
Beitrag von: ritchie am 11 Mai 2013, 16:03:10
Hallo Zusammen,

ich habe folgenden Script, welche aber derzeit nicht korrekt arbeitet.


sub evtHandlerThermostat($$)
{
  my $Component = shift;
  my $State = shift;
  my $Temperatur = " ";
  my $AvgTemp =" ";

  $Temperatur = $State;
  $Temperatur =~ s/temperature:/ /;

  if( $value{MinAussenTemperatur} > $Temperatur )
    {
    fhem("set MinAussenTemperatur ".$Temperatur);
    }

  if( $value{MaxAussenTemperatur} < $Temperatur )
    {
    fhem("set MaxAussenTemperatur ".$Temperatur);
    }

  $AvgTemp = $value{AvgAussenTemperatur};
  $AvgTemp = ($AvgTemp + $Temperatur) / 2.0;
  fhem("set AvgAussenTemperatur ".$AvgTemp);
 
  return;
}


Dies sollen erste Schritte sein, um mit Variablen und Werten zu rechnen.

Die Variablen werden derzeit nicht beschrieben. Ich habe sie mit einem Wert vorbelegt,
welcher normalerweise sofort überschrieben werden sollte. (z.B. Min = 50).

Eine Erklärung wäre:
Das ich derzeit Probleme mit Strings und numerischen Variablen
habe. Nur wie kann ich diese wandeln?


Gruss R.
Titel: Aw: FHEM Variable in PERL Script auslesen/schreiben ...
Beitrag von: MisterEltako am 11 Mai 2013, 16:46:04
Mir ist nicht ganz klar worauf du hinaus willst.

Ich würde:

 my $Temperatur = 0;
 my $AvgTemp =0;

anstatt mit einem leeren String belegen.

Wenn du Strings in Zahlen ändern willst, könnte sprintf hilfreich sein.

Vielleicht kannst du deine Frage präzisieren?

MfG,MisterEltako

Titel: Aw: FHEM Variable in PERL Script auslesen/schreiben ...
Beitrag von: ritchie am 11 Mai 2013, 18:24:00
Hallo M.Eltako,

wäre das dann o.k. so.

 my $Buffer = " ";
  my $Temperatur = 0.0;
  my $AvgTemp = 0.0;

  $Buffer = $State;
  $Buffer =~ s/temperature:/ /;
  $Temperatur =  sprintf("%.2f", $Buffer);
 


Auch habe ich noch nicht ganz verstanden, wie man einen Wert einer
Dummy Variable ausliesst.
Ist diese ein String oder eine Zahl ?
Ich würde String vermuten.

Denn dann wäre diese Zeile falsch

  if( $value{MinAussenTemperatur} > $Temperatur )


Wann verwendet man den Value("MinAussenTemperatur") und wann $value{MinAussenTemperatur} ?

Ist das dann die Methode eine FHEM Variable zu aktualisieren ?


 $AvgTemp = $value{AvgAussenTemperatur};
 $AvgTemp = ($AvgTemp + $Temperatur) / 2.0;
 fhem("set AvgAussenTemperatur ".$AvgTemp);


Gruss R.
Titel: Aw: FHEM Variable in PERL Script auslesen/schreiben ...
Beitrag von: ritchie am 12 Mai 2013, 18:46:11
Hallo Zusammen,


dieser Script macht dann was ich im ersten Schritt wollte.

#
# Thermostat handler for state
#
sub evtHandlerThermostat($$)
{
  my $Component = shift;
  my $State = shift;
  my $Buffer = " ";
  my $Temperatur = 0.0;
  my $AvgTemp = 0.0;

  $Buffer = $State;
  $Buffer =~ s/temperature:/ /;


  $Temperatur =  sprintf("%.2f", $Buffer);
  if( $value{MinAussenTemperatur} > $Temperatur )
    {
    fhem("set MinAussenTemperatur ".$Temperatur);
    }

  if( $value{MaxAussenTemperatur} < $Temperatur )
    {
    fhem("set MaxAussenTemperatur ".$Temperatur);
    }

  $AvgTemp = $value{MinAussenTemperatur} + $value{MaxAussenTemperatur};
  $AvgTemp = $AvgTemp / 2.0;
  fhem("set AvgAussenTemperatur ".$AvgTemp);
 
  return;
}


Im nächsten Schritt kommt die Auswertung nach Zeit (Alle Werte auf die letzten drei Tage beziehen)

Gruss R.