Ankündigung

Einklappen
Keine Ankündigung bisher.

Neue Logikbausteine für den L1/X1: Formelberechnung, Statistik und mehr...

Einklappen
Dieser Beitrag wurde beantwortet.
X
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    Zitat von knxPaul Beitrag anzeigen
    Überholspur
    Danke Dir, aber ich hoffte auf eine andere Lösung (funktionsbasierte Lösung so nach dem Motto "DoProzentVal(WERT) ) - aber so geht es natürlich auch und so habe ich es testweise auch schon gemacht NUR möchte ich den Offset schon dazurechnen/abziehen aber eben nur bis 0 oder bis 100.

    Kommentar


      Dann vielleicht (ganz linke Spur ;-): Math.Max(Basis-Dimmwert - 10, 0)

      Kommentar


        Hallo an alle. Ich habe ein kleines Problem, wo wahrscheinlich viele sagen: "ach mensch, ist doch ganz easy..."
        Ersteinmal auch vielen vielen dank hyman für die großartige Arbeit in Sachen XML/JSON Parser Baustein.
        Genau hier habe ich eine Frage, da ich mit XPath nicht so vertraut bin.

        Ich hole mir vom Volkszähler (Smartmeter) eine json Abfrage für aktuelle Leistung und eben Zählerstand. Leider schaffe ich es nicht, auch nach mehrfachen Suchen und Probiererein den korrekten Pfad im GPA einzugebe, dass das gewünschte Ergebnis bei rauskommt.

        Code:
        {
            "version": "0.3",
            "data": {
                "tuples": [
                    [
                        1731844107517,
                        29342.295,
                        1
                    ]
                ],
                "uuid": "642b5f80-a338-11ef-a2f4-3bba738b84bf",
                "from": 1731844105518,
                "to": 1731844107517,
                "average": 0,
                "consumption": 0,
                "rows": 2
            }
        }​
        Es geht mir um die Zahl unter tuples: 29342.295 , die ich gern mittels Parser als Zahl ausgeben würde.

        Die Json Abfrage erfolgt mit dem Logikbaustein "Splendid Minds: Web-Requests senden", URL: http://10.10.2.10/middleware.php/dat...s=raw&from=now

        ausgegeben wird hier o.g. Code im Browser.
        Im GPA ist es ebenso, nur eben alle Zeichen hintereinander weg.

        Am Ausgang des Bausteins hängt der Parser Baustein von hyman.

        Ich habe es geschafft mit "/root/data/tuples" einen Wert zu bekommen, aber eben nicht genau diesen. Er wirft die gesamte Zahl, die in "tuples" enthalten sind aus. Ich brauche aber nur diesen einen Wert als Zahl.

        Kann mir jemand helfen, wie ich es schaffe den Pfad und/oder weitere Einstellungen am Parserbaustein vorzunehmen, sodass ich die gewünschte Zahl als Ausgabe erhalte? Das wäre total super.

        Ich danke euch im Voraus.

        VG
        Björn
        Zuletzt geändert von quake85; 17.11.2024, 13:04.

        Kommentar


          /root/data/tuples/item[1]/item[2] könnte funktionieren ... ungetestet.

          Kommentar


            Zitat von hyman Beitrag anzeigen
            ganz linke Spur ;-)
            Hallo Horst,

            vielen Dank für diese Variante. Habe es ausprobiert und es funktioniert perfekt. In der Folge habe ich es aber ganz simpel gelöst "über kleiner und grösser mit IF THEN ELSE", um beide Varianten in einer Formel zu behandeln. Im aktuellen "NOT LIVE"-Test funktioniert es perfekt und ich werde nach Inbetriebnahme Ende Dezember berichten.

            Danke Dir und Gruss André

            Kommentar


              hyman

              Hallo und Guten Morgen Horst,

              ich habe ein Problem, bei dem ich gerade nicht weiter komme:

              In der Formelberechnung habe ich diverse "Eingänge" vom Typ NUMBER. Als Beispiel ein Temperaturwert, der am Eingang "20,83" ist und am Ausgang der Formelberechung durch ein "Math.Round({Temp_Aussen:N},1)" den Wert "20,8" ausgibt. Soweit alles gut. Für Eingangs-Werte, die keine Dezimalstelle haben, hatte ich das noch mit "Math.Round({Temp_Aussen:N},1).ToString("N1")" ergönzt -> So wird aus "20" dann "20,0" - auch soweit alles gut.

              Da ich diese Werte alle in einem JSON-String benötige und ich die Werte gerne als Zahlen hätte, ist für mich die Frage, wie ich aus dem "," einen Punkt "." machen kann.

              Gerne würde ich mir im JS-Script nachher das Konvertieren sparen. Hast Du eine Idee?

              Gruss André

              Kommentar


                Zitat von araeubig Beitrag anzeigen
                nicht weiter komme
                ich habe es für mich simpel in JS gelöst und ändere - je nach Sprache den Dezimaltrenner dort. Aber anbei mal ein Video, was Dein LBS ermöglicht (mit Hilfe des Splendid Minds Web Request, ein wenig JS, JQuery, PHP, HTML und CSS). Genau so wollte ich es haben -> Ein reduzierter Standby-Screen-Content, minimaler Geräteeinsatz, Responsive für HD, 4K und 8K und Nutzung der bestehenden Möglichkeiten.



                Danke Dir nochmal an dieser Stelle. Wenn ich Zeit und Musse habe, oder jemand speziell anfragt, werde ich die Datenbasis auf GitHub stellen.

                Und wenn Fragen bezüglich der "coolen" Uhr kommen -> Nein ich gebe da keine Daten weiter. Wer im Web sorgfältig schaut, wird die originale Datenbasis finden. Warum ich nicht die richtige Uhr nehme? Weil der oben gezeigte Content auf einem 85" 8K-Signage-Display läuft und an der Wand damit "genug" ist. Die echte Uhr in ähnlicher Grösse kostet ein Vermögen und kann mir leider den anderen, gewünschten Content nicht anzeigen.

                Und ja es sind noch einige ganz minimale CSS-Fehler drin. Das finale Video gibt es dann auch noch in den nächsten Wochen,
                Zuletzt geändert von araeubig; 27.01.2025, 15:37.

                Kommentar


                  Zitat von araeubig Beitrag anzeigen
                  Gerne würde ich mir im JS-Script nachher das Konvertieren sparen. Hast Du eine Idee?
                  Wenn die Zahl eh schon als Text vorliegt sollte das mit Replace gehen.

                  Kommentar


                    Zitat von hyman Beitrag anzeigen
                    Wenn die Zahl eh schon als Text vorliegt sollte das mit Replace gehen
                    Danke Dir - ich belasse es im JS, da ich dann theoretisch die Sprache umschalten könnte. In CH ist der Dezimaltrenner ein Punkt und in D ein Komma.

                    Gruss André

                    Kommentar


                      Leider beiße ich mir gerade ein bisschen die Zähne aus mit dem Baustein.
                      Ich habe folgendes Szenario: Ich möchte einen ESP32 auf dem Wled läuft entsprechend auch aus der Gira X1 Oberfläche ansteuern.

                      Gewünscht sind AN/AUS, Das Farbrad im RGBW Dimmer und den Dimmwert.

                      An/Aus konnte ich über die Logik abbilden. Dazu lese ich den Wert des Schalters und schicke einen Webrequest über die wled http api ().
                      Für die Auswahl der Farben habe ich 4 virtuelle Datenpunkte im X1 definiert. Für Rot, Blau, Grün, Weiß.

                      Diesen versuche ich in das http-api format zu bekommen: http://192.168.178.126/win&R=255&G=50&B=150&W=0

                      "http://192.168.178.126/win&R="+{Rot:I}+"&G="+{Grün:I}+"&B="+{Blau:I}+"&W= "+{Weiß:I}:""

                      Das funktioniert für einen einzelnen Wert ohne Probleme:
                      "http://192.168.178.126/win&R="+{Rot:I}

                      Insgesamt geht es bis zu folgendem Punkt:
                      "http://192.168.178.126/win&R="+{Rot:I}+"&G"

                      Sobald ich an dem Punkt:
                      "http://192.168.178.126/win&R="+{Rot}+"&G=" ankomme lande ich in einem Fehler weil ich eine explizite Zuweisung mache, was nicht erlaubt ist.

                      Ich hab dann versucht über diverse Funktionen und workarounds das ganze irgendwie zu umgehen, z.B.
                      CONCAT("http://192.168.178.126/win&R=", {Rot:I}, "&G=", {Grün:I}, "&B=", {Blau:I}, "&W=", {Weiß:I})
                      oder die = doppelt zu klammern/separieren... +{Rot}+"&G"+"="

                      Leider erfolglos. Zum einen Verstehe ich nicht wieso die Zuweisung innerhalb eines Strings durchschlägt, zum anderen bin ich ratlos wie ich die 4 Werte in eine URL bekomme

                      image.png
                      Und für die Helligkeit stehe ich vor dem Problem, dass ich den Prozentwert aus dem RGBW Dimmer auf das Format (0-255) der wled api formatieren muss.
                      Das habe ich versucht mit einer Multiplikation in der Formel und einer entsprechenden Rundung.
                      Auch in diversen Konstellationen als 2,55f, ohne weiteren Typen etc.
                      "http://192.168.178.126/win&A="+(int)Math.Round(2,55f*{Helligkeit:I})

                      Hier lande ich dann bei:
                      Expression 3 (before character 45): error CS1502: The best overloaded method match for `System.Math.Round(double, int)' has some invalid arguments
                      C:\Windows\Microsoft.NET\Framework64\v4.0.30319\ms corlib.dll (Location of the symbol related to previous error)
                      Expression 3 (before character 53): error CS1503: Argument `#2' cannot convert `float' expression to type `int'

                      Oder ohne den type cast auf Int:
                      Expression 3 (before character 40): error CS0121: The call is ambiguous between the following methods or properties: `System.Math.Round(double, int)' and `System.Math.Round(decimal, int)'
                      C:\Windows\Microsoft.NET\Framework64\v4.0.30319\ms corlib.dll (Location of the symbol related to previous error)

                      Wie kann ich die korrekte Methode ansprechen um den Prozentwert für zB 100% nach 255 zu multiplizieren?
                      Bzw auch zB 50% als 127 zu übergeben (127,5 abgerundet nach unten)


                      Das konnte ich nun damit lösen, dass ich eine Variable als Skalingfaktor fix mit 2,55 definiert habe, statt 2,55 in der Formel zu verwenden:
                      "http://192.168.178.126/win&A="+Math.Floor({Scaleing:N}*{Helligkeit:I})
                      Zuletzt geändert von Polytox; 06.05.2025, 13:01.

                      Kommentar


                        Zitat von Polytox Beitrag anzeigen
                        "http://192.168.178.126/win&R="+{Rot:I}+"&G="+{Grün:I}+"&B="+{Blau:I}+"&W= "+{Weiß:I}:""
                        ... Fehler weil ich eine explizite Zuweisung mache, was nicht erlaubt ist.
                        Warum sind da nach {Weiß:I} noch weitere Zeichen? Kann es daran liegen? Ich kann das Problem jedenfalls bei mir nicht nachvollziehen (Version 1.6.1 des Bausteins). In einer älteren Version gab es glaube ich mal so einen Bug ...

                        Zitat von Polytox Beitrag anzeigen
                        ... ratlos wie ich die 4 Werte in eine URL bekomme
                        ...
                        Wie kann ich die korrekte Methode ansprechen um den Prozentwert für zB 100% nach 255 zu multiplizieren?
                        Ich würde den Prozentwert nicht als Integer (...:I​) sondern als Double (...:F​)​ in den Formelberechnungs-Baustein zu holen. Ich bin mir nicht mal sicher, ob der im Bereich 0,0..1,0 oder im Bereich 0,0..100,0 liegt. Jedenfalls dann passend multiplizieren und zum Schluss einfach auf int casten, dann werden die Nachkommastellen (anders als bei Round) einfach abgeschnitten.

                        Kommentar


                          Das war tatsächlich noch ein Kopierfehler hier ins forum rein. Ich hatte davor eine Abfrage drin ob die Werte gefüllt sind und habe sonst einen leeren string übergeben. Das hab ich mittlerweile darüber angefangen, dass ich dann keinen triggern für den Web send schicke. Daher war dann der :"" nicht mehr notwendig weil ich keine if Abfrage mehr hatte.

                          Daran lags also nicht. Version prüfe ich morgen.. Es kann durchaus sein, dass ich da nicht die aktuelle im Gira hab.

                          Die Multiplikation hab ich ja wie oben beschrieben schon gelöst bekommen. Ob da jetzt ein int cast oder der math.floor schöner ist sei dahin gestellt.
                          Der Wert den Gira übergibt is. 0-100 als Anmerkung falls das mal Jemand braucht und hier drüber stolpert.
                          Zuletzt geändert von Polytox; 06.05.2025, 17:39.

                          Kommentar


                            Folgende beiden Formeln, die Deinen Fall leicht vereinfacht abbilden, funktionieren bei mir:
                            Typ des Ausgangs 1: INTEGER
                            Typ des Ausgangs 2: TEXT
                            Formel 1: (int)({x:F} * 2.55)
                            Formel 2: "http://a.b.de/x&R=" + _out1_ + "&G=" + _out1_ + "&B=" + _out1_ + "&W=" + _out1_

                            grafik.png

                            Kommentar


                              Morgen hyman,

                              ich konnte das Problem nun lösen. Es gestaltet sich wie folgt (Ich habe es testweise dann erstmal auf eine Variable gekürzt:

                              "http://192.168.178.126/win&R="+{Rot}+"&G="+{Rot}+"&B="+{Rot}+"&W="+{Rot}
                              --> Zuweisung nicht erlaubt.


                              "http://192.168.178.126/win&R=" + {Rot} + "&G=" + {Rot} + "&B=" + {Rot} + "&W=" + {Rot}
                              --> Referenzfehler Rot unbekannt​

                              ---> Es scheint also einen Unterschied zu machen ob man +{VAR}+ oder + {VAR} + verwendet. Ich habe lange nicht mehr in einer richtigen Programmiersprache (C# länger als lang gearbeitet). Eventuell ist die Short-notation einfach syntaxsensitive.

                              Entsprechend ging es weiter mit:

                              "http://192.168.178.126/win&R=" + {Rot:I} + "&G=" + {Rot} + "&B=" + {Rot} + "&W=" + {Rot}
                              Eigentlich wird Rot schon als I im anderen Ausgang definiert.

                              und schlussendlich:
                              "http://192.168.178.126/win&R=" + {Rot:I} + "&G=" + {Grün:I} + "&B=" + {Blau:I} + "&W=" + {Weiß:I}
                              --> Klappt.

                              Eventuell hilft jemand die Erkenntnis mal jemand.

                              Ich habe gerade festgestellt, dass ich mir die Mühe hätte sparen können, da der Gira Color Picker den Rückkanal zwingend braucht...Das hatte knxPaul schonmal erklärt, nur hab ich das verdrängt. Ich bekomme jetzt zwar also Werte, aber nix korrektes, weil der Colorpicker Müll auswirft.

                              Kommentar


                                Muss ich nochmal ausprobieren, was bei mir passiert, wenn ich die (eigentlich überflüssigen) Leerzeichen entferne ..

                                .
                                Zitat von Polytox Beitrag anzeigen
                                Eigentlich wird Rot schon als I im anderen Ausgang definiert.
                                Es muss in einer Formel davor (also mit niedrigerer Nummer) sein ...

                                Kommentar

                                Lädt...
                                X