NEWS
catch error bei setState
-
Hallo zusammen,
ich arbeite an einem Skript um meine Geräte über rhasspy zu steuern.
Das ganze funktioniert auch schon recht gut.
Allerdings kann es bei der Sprachsteuerung auch vorkommen, dass rhasspy einen Satz erkennt der nicht korrekt aufgelöst werden kann.z.B.
Rollo Wohnzimmer einDer Zustand welcher den Rollo schaltet erwaret allerdings eine Zahl zwischen 0 und 100 und somit wirft die folgende Zeile in meinem Skript einen Fehler.
setState(lightId, state);
In dem Beispiel hat "state" den wert true. (Weil im Satz das Wort "ein" kam)
Folglich korrekt erhalte ich einen Fehler.
You are assigning a boolean to the state "shelly.0.SHSW-25#691E51#1.Shutter.Position" which expects a number. Please fix your code to use a number or change the state type to boolean.
An der Stelle würde ich gerne ein Error Handling einbauen und hatte das über "Try...Catch" versucht.
Allerginds klappt das nicht.try { setState(lightId, state); } catch (e) { //do something }
Kann ich bei setState kein "Try...Catch" verwenden oder mache ich es falsch?
Alternativ müsste ich vorher Abfragen welchen Wert der Zustand erwartet und selbst eine If Abfrage bauen.
Gruß
T -
@DerT sagte:
erhalte ich einen Fehler.
Wenn man die Warnung vermeiden will, muss man prüfen
if(typeof state == 'number') setState(lightId, state);
-
@paul53
Danke für die Info.
Allerdings ist es nicht ganz so einfach.
Es kann an dieser Stelle im Skript durchaus sein dass setState mit einem boolschen Wert benötigt wird.Wenn zum Beispiel der Satz lautet.
Licht Wohnzimmer an.
Wird bei setState(lightId, state) ein boolscher Wert erwartet.
Habe ich die Möglichkeit im Skript abzufragen um welchen Typ es sich beim Datenpunkt handelt?
Sowas wie.
const type = getStateType(lightId); //Liefert den Typen des Datenpunkts zurück if (typeof state === type) { //do something; } else { //error handling; }
Gruß
T -
@DerT sagte:
abzufragen um welchen Typ es sich beim Datenpunkt handelt?
if(typeof state == getObject(lightId).common.type) setState(lightId, state);
-
@paul53 sagte in catch error bei setState:
if(typeof state == getObject(lightId).common.type) setState(lightId, state);
perfekt.
Genau danach habe ich gesucht.