Ich habe eine Funktion in myUtils die mir einen text2speach text zurückgibt. Diese erwartet 2 Parameter. Einmal den Namen des Mähroboters und einen numerischen Fehlercode. Die Funktion funktioniert wie erwartet. Jetzt würde ich sie gerne in einem DOIF aufrufen, muss aber den numerischen Fehlercode aus dem Reading übergeben. Das funktioniert aber nicht, so wie ich es gemacht hab
([stadtweg.ga.mower.fixy:error > 0])
((set speak {(speakMowerError("Fixy", ReadingsVal("stadtweg.ga.mower.fixy","error",0)))}))
Wenn ich den Funktionsteil in die Kommandozeile eingebe kommt die korrekte Ausgabe "Fixy ist gefangen" die dem gesetzten error 1 entspricht.
{(speakMowerError("Fixy", ReadingsVal("stadtweg.ga.mower.fixy","error",0)))}
Grund für diesen Ansatz mit der Funktion ist, dass ich 2 baugleiche Mähroboter (Fixy und Foxy) habe und diese 17 Fehlercodes generieren können. Ich wollte durch die Funktion 17 DOELSEIF in 2 DOIF sparen.
Zitat((set speak {(speakMowerError("Fixy", ReadingsVal("stadtweg.ga.mower.fixy","error",0)))}))
Eher OT aber wozu sind die ? Gehts sonst nicht ?
([stadtweg.ga.mower.fixy:error > 0])
{ fhem("set speak".{(speakMowerError("Fixy", ReadingsVal("stadtweg.ga.mower.fixy","error",0)))})}
@amenomade:
Ich habe noch ein Leerzeichen hinter "set speak" eingefügt und das innere geschweifte Klammerpaar entfernt und ein rundes Klammerpaar eingespart. Wenn ich den kompletten set Teil an der Konsole starte, wird der Dummy speak gesetzt. Wenn ich allerdings den error mit setReading setze, wird das DOIF korrekt gefeuert, aber der Dummy nicht gesetzt
([stadtweg.ga.mower.fixy:error > 0])
{ fhem("set speak ". speakMowerError("Fixy", ReadingsVal("stadtweg.ga.mower.fixy","error",0)))}
Edit: Ich glaube, ein Notify ist hier fast bessere Wahl. Folgendes funktioniert nämlich 1A
defmod FixyError notify stadtweg.ga.mower.fixy:error.* { fhem("set speak ". speakMowerError("Fixy", ReadingsVal("stadtweg.ga.mower.fixy","error",0)))}
Hi,
was passiert wenn Du mal den ReadingsVal testweise weglässt? Sagen wir so?
([stadtweg.ga.mower.fixy:error > 0])
{ fhem("set speak ". speakMowerError("Fixy", 3))}
Wenn das geht, würde ich den ReadingsVal vorher in eine Variable setzen.
Bisher ist das ja ein Funktionsaufruf(funktionsaufruf(funktioniaufruf)) dann wäre es eine Ebene weniger. Ist nur so eine Idee.
Gruß Otto
Ich habe das ganze jetzt in ein Notify gepackt, dort funktioniert es 1A
defmod FixyError notify stadtweg.ga.mower.fixy:error.* { fhem("set speak ". speakMowerError("Fixy", ReadingsVal("stadtweg.ga.mower.fixy","error",0)))}
Hatte übersehen
([stadtweg.ga.mower.fixy:error > 0])
Die richtige Syntax ist:
([stadtweg.ga.mower.fixy:error] > 0)