Autor Thema: Fragen zu lambda-script  (Gelesen 809 mal)

Offline rhabarber

  • New Member
  • *
  • Beiträge: 11
Antw:Fragen zu lambda-script
« Antwort #15 am: 19 Juni 2019, 17:30:50 »
Hallo,

ja, das ist eine gute Lösung.

Funktion mit mehreren Parametern und Rückgabe:

      setReading MonatkWh ([StromkostenWZ  MonatkWh]'toNumber + [StromkostenWZ  Gestern]'toNumber);
      setReading Monat€ (([StromkostenWZ  MonatkWh]'toNumber + [StromkostenWZ  Gestern]'toNumber) * [EurkWh]);
      setReading JahrkWh ([StromkostenWZ  JahrkWh]'toNumber + [StromkostenWZ  Gestern]'toNumber);
      setReading Jahr€ (([StromkostenWZ  JahrkWh]'toNumber + [StromkostenWZ  Gestern]'toNumber) * [EurkWh]);

     die string-Bastelei würde ich gerne von einer Funktion erledigen lassen, die ich an mehreren Stellen benutzen könnte.

habe versucht, einen leeren string mitzugeben, der hat sich aber bei der Rückgabe totgestellt

also verkürzt etwa so:

'(string'str1 string'str2 ergebnisstr StringBasteln) {
ergebnisstr := str1 str2;
};

Aufruf:
[fhemDx infostrA] [fhemDx infostrB] leererString StringBasteln;

leererString ist auch bei der Rückgabe leer.

so hatte ich das versucht.

Grüße !  Reiner

Offline dieter56

  • Jr. Member
  • **
  • Beiträge: 91
Antw:Fragen zu lambda-script
« Antwort #16 am: 19 Juni 2019, 18:28:26 »
Hallo Reiner,

Zitat
'(string'str1 string'str2 ergebnisstr StringBasteln) {
ergebnisstr := str1 str2;
};

Aufruf:
[fhemDx infostrA] [fhemDx infostrB] leererString StringBasteln;

Vom Prinzip schon richtig! Aber,
  1. Den ergebnisstr musst du nicht als Parameter übergeben.
  2. Der Rückgabewert ist das Ergebnis der letzten Operation. Bei dir str1 str2;

Damit wäre die Funktion richtig definiert mit:
'(string'str1 string'str2 StringBasteln) {str1 str2};

ergebnisstr := "string1" "string2" StringBasteln;


Damit hast du eine Funktion definiert, die zwei Strings zusammenfügt. Diese Funktion gibt es aber schon. (Einfach die beiden Strings hintereinander schreiben.)

ergebnisstr := "strting1" "string2";
liefert dasselbe. Du willst etwas anderes: Du möchtest zwei readings lesen, in Zahlen umwandeln, etwas berechnen und das Ergebnis dem ersten Reading wieder zuweisen. Eine Funktion die das macht, wäre:

'(word'read1 plus word'read2 * number'faktor) {
   sum := (((StromkostenWZ'readings read1) val) toNumber);
   val := (((StromkostenWZ'readings read2) val) toNumber);
   sum := sum + val * faktor';
   setReading read1 sum;
};

#Aufrufe wären dann so
"MonatkWh" plus "Gestern" * 1;
"Monat€" plus "Gestern" * [EurkWh]'toNumber;

Das Sternchen in der Definition der Funktion und im Aufruf könnte man weglassen. Aber man sieht dann besser was gemacht wird.
Ich hab's nicht getestet. Aber im Prinzip müsste es so gehen.

Gruß
Dieter
« Letzte Änderung: 19 Juni 2019, 19:02:36 von dieter56 »
Wilhelm II (deutscher Kaiser): “Ich glaube an das Pferd. Das Automobil ist eine vorübergehende Erscheinung.” Gottlieb Daimler (Autoerfinder): “Die weltweite Nachfrage nach Kraftfahrzeugen wird eine Million nicht überschreiten – allein schon aus Mangel an verfügbaren Chauffeuren.”

Offline dieter56

  • Jr. Member
  • **
  • Beiträge: 91
Antw:Fragen zu lambda-script
« Antwort #17 am: 20 Juni 2019, 07:42:18 »
Hallo,

Seit der letzten Version (1.010 vom 19.06.2019 20:01:08) gibt es in jedem Script ein Variable "my". Sie enthält das zum Script gehörende fhemDevice.
So lässt sich das Auslesen der eigenen Readings unabhängig vom Namen des Scriptes realisieren.
Für obiges Beispiel wäre das so:

'(word'read1 plus word'read2 * number'faktor) {
   reads := my readings;
   sum := (reads read1) val;
   val := (reads read2) val;
   setReading read1 (sum'toNumber + val'toNumber * faktor);
};

Gruß
Dieter
« Letzte Änderung: 20 Juni 2019, 08:07:32 von dieter56 »
Wilhelm II (deutscher Kaiser): “Ich glaube an das Pferd. Das Automobil ist eine vorübergehende Erscheinung.” Gottlieb Daimler (Autoerfinder): “Die weltweite Nachfrage nach Kraftfahrzeugen wird eine Million nicht überschreiten – allein schon aus Mangel an verfügbaren Chauffeuren.”

Offline rhabarber

  • New Member
  • *
  • Beiträge: 11
Antw:Fragen zu lambda-script
« Antwort #18 am: 21 Juni 2019, 17:10:25 »
Hallo Dieter, falls ich mich nicht irre, ist die lambda.pm, die man von der Seite lambda-script.org bekommt, Version 1.007, die my-Funktion geht damit noch nicht ?
Grüße ! Reiner

 

decade-submarginal