Hi
ich arbeite an einem DOIF für einen Waschmaschinenstatus welches auch eine Differenzberechnung durchführen soll.
Zuerst habe ich versucht eigenen Perlcode mit {} zu verwenden. Dann habe ich aber immer solche Fehler bekommen:
2015.07.26 17:18:08 2: Programm.Waschmaschine.Status: { setReading("Waschmaschine.Status", "preEngery", 123); fhem("set Waschmaschine.Status on");}: Unknown command {, try help.
Unknown command fhem("set, try help.
Unknown command }, try help.
Das Problem jetzt ohne {} hinbekommen.
set Waschmaschine.Status on,
setreading Waschmaschine.Status preEnergy [Waschmaschine.Status:energy]
Aber jetzt will ich die Differenzberechnung durch führen.
Hab schon mehrere Schreibweisen versucht aber es will nicht wie ich will. Das war mein letzter Versuch mit und ohne {}
setreading Waschmaschine.Status lastEnergy ([Waschmaschine.Status:energy]-[Waschmaschine.Status:preEnergy])
Daher die Frage, wie kann ich eine Berechnung durchführen. Ich möchte eine extra Method in myUtils gerne vermeiden.
Hier das komplette DOIF:
([Waschmaschine.Status:power] < 1) (
set Waschmaschine.Status off,
setreading Waschmaschine.Status preEnergy 0
) DOELSEIF ([Waschmaschine.Status:power] >= 1 and [Waschmaschine.Status:state] eq 'off') (
set Waschmaschine.Status on,
setreading Waschmaschine.Status preEnergy [Waschmaschine.Status:energy]
) DOELSEIF ([Waschmaschine.Status:power] < 3 and [Waschmaschine.Status:state] eq 'running') (
set Waschmaschine.Status done,
setreading Waschmaschine.Status lastEnergy ([Waschmaschine.Status:energy]-[Waschmaschine.Status:preEnergy])
) DOELSE (
set Waschmaschine.Status running
)
Zitat von: commandref
Berechnungen im Ausführungsteil
Berechnungen können in geschweiften Klammern erfolgen. Aus Kompatibilitätsgründen, muss die Berechnung mit einer runden Klammer beginnen. Innerhalb der Perlberechnung können Readings, Stati oder Internals wie gewohnt in eckigen Klammern angegeben werden.
Anwendungsbeispiel: Es soll ein Vorgabewert aus zwei verschiedenen Readings ermittelt werden und an das set Kommando übergeben werden:
define di_average DOIF ([08:00]) (set TH_Modul desired {([default:temperature]+[outdoor:temperature])/2})
attr di_average do always
Grüße
igami
jetzt ärgere ich mich, da ich die commandref danach durchsucht habe und auch die Schreibweise mit {()} aus einem anderen Beitrag versucht habe. Ergebnis war das der Ausdruck {(ZAHL - ZAHL)} komplett im Reading stand. Aber jetzt geht es...
Dennoch danke...
Also funktioniert nun alles?
Dann bitte die vollständige Lösung posten und ein "gelöst" vor den Thread Titel schreiben.
Bin noch am testen und optimieren. Sobald alles fertig ist, mache ich einen neuen Beitrag unter CodeSchnipsel auf inkl. Anleitung etc.