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 -
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 -
@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.
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden 💗
Registrieren Anmelden