FHEM Variable in PERL Script auslesen/schreiben ...

Begonnen von ritchie, 11 Mai 2013, 16:03:10

Vorheriges Thema - Nächstes Thema

ritchie

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.
IPU662  IPFIRE & Fhem (Homematic + MAX) - Produktiv
Intel iCore 3 / 16GBRAM / 500GB SSD  (1Wire - USB) - Produktiv

MisterEltako

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

HMLAN-Konfigurations-Adapter, HM-Funkjalousieaktor/HM-Dimmaktor/HM-Schaltaktor f. Markenschalter, Jalousie-/Schaltaktor von Eltako, FT4 v. Eltako, TCM310

ritchie

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.
IPU662  IPFIRE & Fhem (Homematic + MAX) - Produktiv
Intel iCore 3 / 16GBRAM / 500GB SSD  (1Wire - USB) - Produktiv

ritchie

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.
IPU662  IPFIRE & Fhem (Homematic + MAX) - Produktiv
Intel iCore 3 / 16GBRAM / 500GB SSD  (1Wire - USB) - Produktiv