Seite 1 von 3

Wie zwei Strings vergleichen

Verfasst: Do Mai 27, 2021 8:36 pm
von Dragonos2000
Ich wollte mir gerade eine kleine Custom Logik bauen, um zwei Strings zu vergleichen und abhängig vom Ergebnis ein True oder False auszugeben. Kann es sein, dass die Logikengine hierfür nicht "gerüstet" ist? Oder mit welchem Logikbaustein könnte ich das tun?

Re: Wie zwei Strings vergleichen

Verfasst: Do Mai 27, 2021 8:52 pm
von StefanW
Hi Jochen,

Wir werden hier noch Bausteine liefern. Wir freuen uns über Ideen und Wünsche.

Lg

Stefan

Re: Wie zwei Strings vergleichen

Verfasst: Do Mai 27, 2021 9:04 pm
von Dragonos2000
Hi Stefan,

okay, danke für die schnelle Rückmeldung. Hintergrund sind Logiken, die aus JSON/String Werten gefüttert werden, wie sie bspw. bei MQTT von den Devices kommen können. Da bräuchte es das dann, um mit solchen Meldungen der Geräte innerhalb von Logiken hantieren zu können.

Mit welcher Version wurde es eigentlich eingeführt, dass man im LE Strings auch als Parameter für einen Eingang setzen kann? (Juhuu, endlich :D) Das ging doch lange Zeit nicht...

Re: Wie zwei Strings vergleichen

Verfasst: Do Mai 27, 2021 9:25 pm
von Robert_Mini
Geht das tatsächlich bereits oder hast du das missverstanden?
Robert

Re: Wie zwei Strings vergleichen

Verfasst: Do Mai 27, 2021 10:34 pm
von Dragonos2000
@Robert_Mini
String Parameter.JPG
Zumindest kann man es eingeben (das ging ja schon nicht). Ob das auch im Logigkern tut, hab ich noch nicht versucht...

Re: Wie zwei Strings vergleichen

Verfasst: Do Mai 27, 2021 11:14 pm
von Dragonos2000
@Robert_Mini Nachtrag: Es funktioniert tatsächlich mit dem String als Parameter :happy-wavemulticolor:

=> Ungeahnte neue Möglichkeiten :sci-fi-robot: :text-thankyouyellow:

Re: Wie zwei Strings vergleichen

Verfasst: Fr Mai 28, 2021 3:43 pm
von Dragonos2000
@StefanW Soll ich das hier dann als FR flaggen?

Re: Wie zwei Strings vergleichen

Verfasst: Fr Mai 28, 2021 4:46 pm
von StefanW
Hallo Jochen

die Regel ist: ERST eine Diskussion und dann ein FR der dann - auf Basis der Diskussion - auch vollständig spezifiziert ist.

Habe es als Diskussion markiert

lg

Stefan

Re: Wie zwei Strings vergleichen

Verfasst: Di Jun 01, 2021 8:34 am
von Dante
Zu dem Thema gab es vor 3 Jahren schon mal ausführlichere Diskussionen, die dann aber eingeschlafen ist.

Hier meine Beiträge/Vorschläge dazu:
viewtopic.php?f=77&t=1873#p19987
Dante hat geschrieben: Di Jan 07, 2020 9:23 am Ich würde den Baustein auch allgemeiner konzipieren, damit er später verschiedene Formate verarbeiten kann.
Der Input sollte also völlig neutral einfach Text annehmen, woher dieser kommt (aus MQTT, einer Datenbank, dem Body eines HTTP-Response, dem Header eines HTTP-Response, einer SMS, eines KNX-Telegrams, ...) ist an dieser Stelle ganz egal!

Auch den Datentyp sollte flexibel sein - JSON könnte dann eins der ersten sein.

Man kann also den Datentyp einstellen, z.B.:
  • JSON
  • XML
  • HTML
  • CSV
  • Raw / Text
Davon könnte es später sogar noch weitere Subtypen geben, z.B. SOAP, CSV mit Tabs, HTTP-Header, ...
Der Datentyp könnte ja sogar wieder ein eigener Input sein.

Das man verschiedene Variablen aus dem Text in einem Baustein auswerten kann, sehe ich schwierig. Einfacher und verständlicher wäre es, dass ein Textparser einen Input-Text und einen Output hat. Einzige Einschränkung wäre dann die Auswertung von Texten mit einer beliebigen (nicht fest definierten) Anzahl an Werten - aber da ist das Handling dann auch sehr komplex.

Um den richtigen Wert aus dem Text zu extrahieren, gibt es dann einen Pfad dazu - dieser ist dann vom jeweiligen Datentyp abhängig und man könnte auf Standardfunktionen zurückgreifen, z.B.:

XML: XPath
XPath für XML-Beispiel von @alexbeer:

Code: Alles auswählen

//time[2]/windSpeed/@mps
JSON: Objektnotation
Beispiel für JSON von @alexbeer:

Code: Alles auswählen

main.temp
Raw / Text: Regular Expressions

etc.

Und auch dieser Pfad / Filter könnte wieder per Input in den Baustein reinlaufen und wäre damit wieder dynamisch.
sowie

viewtopic.php?f=77&t=1873&start=30#p20332
Dante hat geschrieben: Mi Jan 15, 2020 2:29 pm Hab mir zu dem Thema noch mal ein paar Gedanken gemacht und hier gibt es jetzt verschiedene Umsetzungsvarianten bzw. Positionen. Ich hab die jetzt mal versucht in einer Grafik zusammenzufassen und dabei ist mir noch eine weitere Variante in den Sinn gekommen (als Eingangsfunktion - evtl. hat die ja auch schon jemand irgendwo vorgeschlagen) und weiterer Baustein dazugekommen (Textconverter/-manipulator):

Bild

Ich persönlich fände den Textparser als eigene Technologie sehr umständlich. Da ich die Operationen daraus in einer Logik ggf. mehrfach anwenden muss - wenn ich dann jedesmal in einen anderen Bereich des TWS springen muss um den Parser dort anzupassen, würde mich das wohl Wahnsinnig machen.
Beim IP-Modul sehe's dagegen als sinnvoll an, einerseits architekturbedingt wie von @StefanW angemerkt und andererseits, da es sich halt einfach um Endpunkte handelt - entweder als Start oder als Ziel einer Logik.

Was denkt ihr?

Re: Wie zwei Strings vergleichen

Verfasst: Mi Jun 02, 2021 9:04 pm
von blaubaerli
Hallo Jochen,
Dragonos2000 hat geschrieben: Do Mai 27, 2021 11:14 pm Es funktioniert tatsächlich mit dem String als Parameter
ich habe heute ein paar Shelly-Devices bekommen. Da versuche ich nun auch mit einer Custom-Logik aktuell den state "open" bzw. "close" auf ein Boolsches Ziel zu mappen.

Aktuell mal hiermit:

Code: Alles auswählen

{
    "Level": [
        ["$In_val","string","close"],
        ["$In_Compare","string","close"],
        ["$SensorStatus","bool",false],
        ["$ConstTrue", "bool",true],
        ["$ConstFalse", "bool",false]
    ],
    "Module": [
        ["Limiter","$In_val",0,"$SensorStatus",["$In_Compare","$In_Compare"]]
    ],
    "Input": [
        ["In","Statuswert des Fensterkontaktes","$In_val","c"],
        ["2Compare","Vergleichswert","$In_Compare","c"]
    ],
    "Output": [
        ["offen","wahr wenn offen","$SensorStatus","c"]
    ]
}
Klappt aber nicht.

Entweder habe ich noch ein totales Brett vor dem Kopf, oder es klappt wirklich noch nicht.

Der Ansatz nutzt halt den Limiter. Will nicht. Egal, ob ich den Level "$In_Compare" nun als Input definiere und dann einen String-Parameter mitgebe, oder ob ich den nur intern definiere und nicht als Input rausführe.

Hast das schon irgendwer funktionstüchtig umgesetzt? :confusion-scratchheadyellow:

Stefan hatte zwar erwähnt, dass noch was kommt, aber mir ist eben nicht klar, ob es da auf Basis der Custom-Logiken nicht jetzt schon einen Bastelweg geben müsste.

Kann das natürlich im Plugin-Container umsetzen..... :laughing-rolling:

Beste Grüße
Jens