Also vorweg: ich nutze keine Sprachsteuerung.
Nach meinem Verständnis braucht es aber nur ein Item pro Echo:
lastVoiceCommand | String | R/W | Last voice command spoken to the device. Writing to the channel starts voice output.
Der Channel ist Read/Write, er enthält das letzte gesprochene Kommando. ein gesendeter Befehl wird als Text ausgegeben.
Entsprechend ist die Rule einfach:
Code: Alles auswählen
rule "Alexa Scprachausgabe"
when
gAlexaVC received update // es wurde ein Sprachbefehl empfangen
then
if(!(newState.toString.contains("solar"))) // Schlüsselwort fehlt?
return; // dann Abbruch
if(!(Solarertrag.state instanceof Number)) { // ungültiger Wert?
logWarn("alexaSolar","Item Solarertrag hat ungültigen Status ({})",Solarertrag.state)
triggeringItem.sendCommand("Eine Meldung ist derzeit nicht möglich.")
return; // dan Abbruch mit Meldung
}
val StringBuilder strMeldung = new StringBuilder() // generiere String
strMeldung.append("Der Solar Ertrag beträgt derzeit ")
strMeldung.append((Solarertrag.state as Number).intValue.toString)
strMeldung.append(" Watt.")
triggeringItem.sendCommand(strMeldung.toString) // Sende String an das triggernde Item
end
Alle lastVoiceCommand Items sind in der Gruppe gAlexaVC zusammengefasst.
Die Rule prüft, ob das Schlüsselwort enthalten ist. Ist das nicht der Fall, bricht sie ab. Hier könnte man natürlich auch umgekehrt vorgehen, falls noch weitere Sprachausgaben über diese Rule abgewickelt werden sollen.
Da wir einen numerischen Wert ausgeben wollen, sollten wir zunächst prüfen, dass auch ein solcher im Item vorliegt (besser ist das...)
Sollte das nicht der Fall sein, ist eine Warnmeldung angebracht.
Die Rule läuft noch? Dann ist der Rest einfach...
Wir bauen den Meldungsstring zusammen - wie man das macht ist Geschmackssache, hier halt mal mittels StringBuilder.
Wir wollen den Wert auf jeden Fall auf eine sinnvolle Ausgabe beschränken (man könnte hier auch mit ein wenig Mathematik z.B. auf volle 100 Watt gehen und die Ausgabe in Kilowatt vornehmen, kommt halt auch auf die Anlage an, was da am sinnvollsten ist...)