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

Offline dieter56

  • Jr. Member
  • **
  • Beiträge: 85
Fragen zu lambda-script
« am: 12 Juni 2019, 11:56:58 »
Zitat

Die Nachricht, die an dich gesendet wurde:

Hallo Dieter,

das mit dem setReading habe ich gefunden: habe leichtsinnigerweise ein Test-Lambda-Script 'setReading' genannt: das hat lambda-script dann als fhem-device eingelesen ...

den Rest probier ich jetzt erst mal aus.

Soll ich den Schriftwechsel lieber im Forum führen, kenne mich leider mit den Gepflogenheiten überhaupt nicht aus.

Freundliche Grüße !
Reiner

Hallo Reiner,

Danke für deine Rückmeldung.
Das Kommando setReading funktioniert auch dann, wenn ein Device setReading existiert. Du musst nur vor setReading ein Hochkomma setzen.

'setReading temperature 12 door "closed";
Dadurch wird die Auswertung des Symbols verhindert.
Ich habe noch einen entsprechenden Hinweis in die Sprachbeschreibung eingefügt.
http://lambda-script.org/handbuch.php#3.1

Gruß
Dieter

Offline rhabarber

  • New Member
  • *
  • Beiträge: 6
Antw:Fragen zu lambda-script
« Antwort #1 am: 12 Juni 2019, 18:37:58 »
Hallo Dieter,

schon wieder eine Frage:

warum funktioniert:   x := x + 1;    problemlos,

aber nicht:

x := 0;

always {
x := x + 1;
setReading xzahl x;
wait 0,10;
};

Fehlermeldung: Funktion nicht definiert: x + 'number';



noch ein Problem, ich kopiere das script:

    
__________________________
always {
   wait 00:01;     #zum Testen :)
   case [08:00 12:00] {
      faktor := 0.5 + [ProplaWetter fc0_cloud09]'toNumber / 100};
   case [12:00 15:00] {
      faktor := 0.5 + [ProplaWetter fc0_cloud12]'toNumber / 100};
   case [15:00 18:00] {
      faktor := 0.5 + [ProplaWetter fc0_cloud15]'toNumber / 100};
   case [18:00 20:00] {
      faktor := 0.5 + [ProplaWetter fc0_cloud18]'toNumber / 100};
   setReading akt faktor;
};
_________________________

Fehlermeldung: Funktion nicht definiert: setReading akt faktor;


was muss ich tun, damit das geht ?

Danke und Grüße ! Reiner
« Letzte Änderung: 12 Juni 2019, 18:53:08 von rhabarber »

Offline rhabarber

  • New Member
  • *
  • Beiträge: 6
Antw:Fragen zu lambda-script
« Antwort #2 am: 12 Juni 2019, 20:44:12 »
habe es jetzt doch noch rausgefunden, wer lesen kann ist klar im Vorteil:

es benötigt für jede Art von Rechnung oder Zuweisung eine Art Schablone (Funktion):

die Schablone kann auch so was einfaches sein wie x := 1  ...  oder ich muss die vorher auf diese Art definierte Variable mit in die Schleif reingeben:  always x {
...
setReading dingsda x;
}

damit funktioniert es jetzt jedenfall :)

Offline dieter56

  • Jr. Member
  • **
  • Beiträge: 85
Antw:Fragen zu lambda-script
« Antwort #3 am: 13 Juni 2019, 16:53:13 »
Zitat
warum funktioniert:   x := x + 1;    problemlos,

aber nicht:

x := 0;

always {
x := x + 1;
setReading xzahl x;
wait 0,10;
};

Richtig ist:
x := 0;

always [b]x[/b] {
  x := x + 1;
   setReading xzahl x;
   wait 0,10;
}
oder wenn kein weiter Code folgt geht auch:
x := 0;
repeat  {
  x := x + 1;
   setReading xzahl x;
   wait 0,10;
}

Offline dieter56

  • Jr. Member
  • **
  • Beiträge: 85
Antw:Fragen zu lambda-script
« Antwort #4 am: 13 Juni 2019, 17:00:04 »
Zitat
noch ein Problem, ich kopiere das script:

   
__________________________
always {
   wait 00:01;     #zum Testen :)
   case [08:00 12:00] {
      faktor := 0.5 + [ProplaWetter fc0_cloud09]'toNumber / 100};
   case [12:00 15:00] {
      faktor := 0.5 + [ProplaWetter fc0_cloud12]'toNumber / 100};
   case [15:00 18:00] {
      faktor := 0.5 + [ProplaWetter fc0_cloud15]'toNumber / 100};
   case [18:00 20:00] {
      faktor := 0.5 + [ProplaWetter fc0_cloud18]'toNumber / 100};
   setReading akt faktor;
};
_________________________

Fehlermeldung: Funktion nicht definiert: setReading akt faktor;

faktor ist nur innerhalb der Blöcke {...} definiert. So müßte es gehen:
faktor := 0;
always faktor {
   wait 00:01;
   case [08:00 12:00] {
      faktor := 0.5 + [ProplaWetter fc0_cloud09]'toNumber / 100};
   case [12:00 15:00] {
      faktor := 0.5 + [ProplaWetter fc0_cloud12]'toNumber / 100};
   case [15:00 18:00] {
      faktor := 0.5 + [ProplaWetter fc0_cloud15]'toNumber / 100};
   case [18:00 20:00] {
      faktor := 0.5 + [ProplaWetter fc0_cloud18]'toNumber / 100};
   setReading akt faktor;
};

Offline rhabarber

  • New Member
  • *
  • Beiträge: 6
Antw:Fragen zu lambda-script
« Antwort #5 am: 14 Juni 2019, 18:13:59 »
danke !

was ich noch nicht verstehe: anscheinend kann ich ja Funktionsdefinitionen irgendwo hinschreiben und ggf. in einen Block oder eine Subfunktion übergeben;

an welcher Stelle geht das _nicht _? Sonst wäre ja die Fehlermeldung: Funktion nicht definiert nicht möglich. Also, mir ist nicht klar, an welcher Stelle ich Funktionen definieren 'darf' und wo nicht.

Sind case-Blocks auch eigene Gültigkeitsbereiche ? Wie übergebe ich Variablen an case-Blocks ?

kann man > 1 Variable an einen Block geben ? space, komma, semicolon ?
« Letzte Änderung: 15 Juni 2019, 14:32:56 von rhabarber »

Offline dieter56

  • Jr. Member
  • **
  • Beiträge: 85
Antw:Fragen zu lambda-script
« Antwort #6 am: 15 Juni 2019, 10:19:53 »
Hallo,

Ich bin begeistert davon, wie du dich reinhängst.

Funktionen müssen vor ihrer Verwendung definiert werden.
Beispiel: Ein Funktion summiert die Quadrate der beiden Parameter (number). Der Aufruf soll so sein:
z := qrt 2 5;z soll dann den Wert 2 *2 + 5*5 = 29 haben.
'(qrt number'a number'b) {a a + b b};

z := qrt 2 5;
log z;
siehe auch hier: http://lambda-script.org/handbuch.php#6.2


Funktionen, Variable und Klassen gelten in dem Block in dem sie definiert sind und allen Blöcken die in diesem enthalten sind.
D.h.: Eine Variable, die außerhalb des case-Kommandos definiert wurde gilt auch in den Blöcken die Bestandteil des Kommandos case sind.

Eine Außnahme bilden threads. (always erzeugt einen Thread)
Innerhalb eines Threads kann nur auf externe Variable zugegriffen werden, wenn diese explizit übergeben wurden.
Vorher definierte Klassen und Funktionen sind immer (auch in threads) erreichbar.

siehe auch hier: http://lambda-script.org/handbuch.php#5.4

Ich hoffe, ich konnte ein wenig helfen.
Gruß
Dieter
« Letzte Änderung: 15 Juni 2019, 10:24:37 von dieter56 »

Offline rhabarber

  • New Member
  • *
  • Beiträge: 6
Antw:Fragen zu lambda-script
« Antwort #7 am: Gestern um 15:47:51 »
ja danke, das hilft schon mal weiter. Bin erst mal dazu übergegangen, Dinge in einzelne threads zu schreiben, da braucht man dann eher nicht so viele Variable ...

was neues:
Beim Überprüfen eines Zeitwechsels, zB Monats- oder Jahresende:

funktioniert:

uhrzeit := 22:11;
setReading richtig (uhrzeit = 22:11);


die beiden funktionieren nicht:

uhrzeit := 22:22;
setReading richtig (uhrzeit > 11:11);

oder:

z := now - year;
#setReading zeit z;
setReading richtig (z > 164/0);

Funktion nicht definiert

gleich funktioniert, die anderen nicht. Was ist zu tun ?

Offline dieter56

  • Jr. Member
  • **
  • Beiträge: 85
Antw:Fragen zu lambda-script
« Antwort #8 am: Gestern um 16:12:21 »
Hallo,

22:22 und 11:11 etc. sind ein Werte vom Datentyp timespan. Diese Datentypen lassen sich nicht miteinander vergleichen(siehe dazu: http://lambda-script.org/handbuch.php#6.3.4)

Um zu testen, ob die aktuelle Uhrzeit in einem bestimmten Intervall liegt kannst du z.B. [6:00 13:00] oder so ähnlich beutzen (siehe http://lambda-script.org/handbuch.php#6.3.5)

Oder willst du etwas anderes Vergleichen? Dann beschreib mal dein Problem genau.

Gruß
Dieter