Für mich benötige ich für meine Heizung die Außentemperatur. Da ich (noch) keinen Außentemperatursensor habe, verwende ich Node Red, um eine Anfrage an die openweathermap-API (die gleiche API wie Gladys) zu senden, um die Temperatur abzurufen und sie an ein gefälschtes MQTT-Gerät zu senden.
Wenn man das direkt in Gladys machen könnte, wäre das super!
Es wäre auch gut, das Problem mit den Variablen in den Abfragen beheben zu können
@cicoub13 hat einen PR vorgeschlagen, aber ich weiß nicht, ob er seine Tests abgeschlossen hat
Der PR ist bereit. Falls jemand reviewen kann ![]()
Danke für den PR @cicoub13!
Ich habe eine Frage, hast du diese Lösung irgendwo gefunden? Wurde das von der Bibliothek empfohlen, so vorzugehen?
Denn das sieht doch sehr stark nach einem Bug der von uns genutzten Bibliothek aus, und das Erzwingen einer Reihenfolge ist doch irgendwie ein Hack, oder?
Übrigens, ändert die Reihenfolge, die du definierst, die Anzeigereihenfolge des Dropdowns?
Im Kopf ![]()
Nein, ich gebe zu, dass ich nicht nach der Quelle außerhalb des Dateicode gesucht habe. Vielleicht ist es eine schlechte Verwaltung der Listen.
Das Problem ist, dass wir in einem Text Tags ersetzen, die in mehreren Formen vorkommen:
Text
Guten Tag, nachts sind die Katzen grau und die Libellen sind grau.
Tags zu ersetzen
grau, graue
Ergebnis
Guten Tag, nachts sind die Katzen
grauund die Libellen sindgraue.
Das Ersetzen des Tags grau ersetzt auch das Wort « graue »
Die von mir vorgeschlagene Lösung scheint tatsächlich ein Hack zu sein.
Text
Guten Tag, nachts sind die Katzen grau und die Libellen sind grau.
Tags zu ersetzen
graue, grau (sortiert von lang zu kurz)
Ergebnis
Guten Tag, nachts sind die Katzen
grauund die Libellen sindgraue.
Das Ersetzen des Tags grau ersetzt nur das Wort « grau », da das Ersetzen des Tags « graue » zuvor stattgefunden hat.
Nein, die Reihenfolge bleibt erhalten. Nur die Such- und Ersetzungsoperation ist betroffen.
Sind das nicht zwei verschiedene Probleme, die mit dem Ticket zusammenhängen?
Hier möchten wir lediglich Variablen an den HTTP-Request-Block übergeben.
Diese Funktion wurde bereits entwickelt
(Bereits im Docker-Dev-Tag verfügbar und wird in der nächsten Produktionsversion enthalten sein)
Eigentlich ist es die zweite Hälfte des Anfrageblocks „Gerät steuern“, die mich daran hindert, diese Anfrage zu schließen. Ich habe keine Ahnung, wie man das in Bezug auf das Design umsetzen könnte. Vielleicht ist das sogar ein separater Block, der entwickelt werden muss.
Ein Super ! ![]()
Siehe oben:
Hallo, ich habe mich gefragt, wie du das siehst, wenn du dir einen möglichen anderen Block vorstellst, um ein Gerät mit einer Variablen zu steuern.
Ich habe etwas versucht, indem ich die bereits bestehende Komponente für die Einfügung von Variablen wiederverwendet habe. Wenn der Wert eine Zahl ist, wird wie gewohnt der neue Wert in value gespeichert, andernfalls wird er als Zeichenkette gespeichert. In meinem Versuch habe ich ein Feld in der Datenbank evaluate_value hinzugefügt. Da es auch eine Anforderung gibt, Berechnungen mit Variablen durchzuführen, dachte ich, dass dies beide Anforderungen erfüllen würde.
Wenn die Szene gestartet wird und wir auf Felder evaluate_value als Werte der Aktionen „Gerät steuern“ stoßen, ersetzen wir die Variablen durch ihre Werte und führen die Berechnung durch (ich dachte daran, das Paket simple-evaluate zu verwenden).
Bei der Überprüfung habe ich für das Feld evaluate_value eine Validierung mit @hapi/joi und einem regulären Ausdruck hinzugefügt, der nur Zahlen, Operatoren und {{Variablen}} zulässt (ein vollständiger Ausdruck, wenn der Benutzer „{{Variable…}} + " ohne zweiten Wert eingibt, wird nicht gespeichert).
Was haltet ihr davon? Wie war deine Vorstellung von der Funktionsweise?
Das ist ja nicht dumm!
Mehrere Punkte zu beachten:
- Also muss man den Selektor (Slider, Farbauswahl, etc.) entfernen, falls der Wert « berechnet » ist. In der UI könnte man vielleicht zwei Reiter machen, z. B. « Auswählen | Berechnen »
- Die Bibliothek denke ich, kann man robuster und vor allem vollständiger finden. Wenn man die beiden Themen in einem (Berechnungen + Variablen-Injektion) behandelt, muss man alles im Voraus bedenken, wenn man diesen « Berechnungsmotor » implementiert, denn sobald das implementiert ist, ist man an die gewählte Technologie gebunden, besonders wenn es « benutzerdefinierte » Funktionen gibt. Zum Beispiel ist es für mich essenziell, eine « Runden »-Funktion in diesem Feld zu haben, weil die Berechnungen sicherlich auf Zahlen wie 87,33333 stoßen, was einige Geräte zum Absturz bringen könnte
Beim Suchen habe ich diese Bibliothek gefunden, die ganz gut aussieht: https://www.npmjs.com/package/mathjs. Man muss die Gemeinschaft nach den mathematischen Funktionen fragen, die essenziell sind, und eine vollständige Liste haben. Man muss sicher sein, dass die gewählte Bibliothek den Job langfristig erledigt 
- Ich stimme zu, dass die Validierung hyperwichtig ist!
Da es in beiden Fällen ein Eingabefeld gibt, dachte ich, das könnte ich « automatisch » machen, wenn der Eingabetyp nicht ganzzahlig ist, verberge ich das Auswahlmodul.
Bearbeitung: Ich hatte nur die numerische Steuerung im Kopf, nicht die Farben… ich werde darüber nachdenken
Ich hatte mathjs gesehen, aber etwas hat mich an dieser Bibliothek zweifeln lassen: math.js | an extensive math library for JavaScript and Node.js. Da wir die Funktion evaluate benötigen, um das Ergebnis einer Berechnung zu finden, haben wir ein potenzielles Sicherheitsproblem. Dies liegt daran, dass die meisten Math-Bibliotheken, die so etwas tun, eval verwenden oder neu schreiben eval() - JavaScript | MDN und daher potenziell JavaScript in Gladys injizieren. Aber da « normalerweise » der Benutzer auswählt, was er dort einfügt, mache ich mir vielleicht unnötige Sorgen (ich setze « normalerweise » in Anführungszeichen, weil, wenn der Benutzer die Antwort einer API dort platziert, könnte es dann einen unerwünschten Eingabe geben
?)
Gerade ihr Statement ist eher beruhigend, sie erklären gut, dass sie eval nicht verwendet haben, um die Operationen zu bewerten, und dass sie ihren eigenen Rechner codiert haben. Sie warnen vor Risiken!
Ihr Beispiel ist übrigens sehr gut, es ist möglich, Funktionen zu deaktivieren:
In unserem Fall, denke ich, sollten wir eine Liste der Funktionen erstellen, die wir unterstützen wollen, und dann die Unit-Tests verstärken, um sicherzustellen, dass nur diese Funktionen unterstützt werden.
Wir könnten die Community fragen, was hier nützlich ist, zum Beispiel:
Oh, ich habe diese Bibliothek gerade erst in einem anderen Beitrag erwähnt, ohne zu merken, dass ihr sie hier bereits angesprochen habt!
Es scheint auf jeden Fall ganz interessant zu sein.
Wie ich im anderen Beitrag bereits festgestellt habe, werden geschweifte Klammern in einer POST-Variablen in dem API-Aufruf beibehalten (was die MathJS-API zum Absturz bringt).
Hallo,
ich erlaube mir, das Thema der Variablen zur Steuerung von Geräten wieder aufzugreifen.
Ein Bedarf, der sehr praktisch wäre: Controler un appareil avec une valeur variable - #5 par Hizo
Es wäre möglich, mehrere Szenen in einer einzigen, einfacheren zusammenzufassen.
Das Thema kommt voran (PR + Testbild), ich habe hier darüber gesprochen
Diese Funktion ist in Gladys Assistant 4.23 verfügbar!



