UPGRADE IP 9 verfügbar!
Timberwolf VISU jetzt mit NEUEM Layout Editor
Freie Anordnung, Reihenfolge und Größe der Widgets - viele weitere Verbesserungen
Infos im Wiki: https://elabnet.atlassian.net/l/cp/06SeuHRJ

NEU! Insider & Leistungsmerkmale FÜR ALLE freigeschaltet
Damit kann nun jeder das Upgrade vornehmen und VISU & IFTTT testen. Alle Info hier: viewtopic.php?f=8&t=5074

[Gelöst] Wie zwei Strings vergleichen

Informationen und Diskussionen über Logik-Engine und Logik-Editor
Forumsregeln
  • Denke bitte an aussagekräftige Titel und gebe dort auch die [Firmware] an. Wenn ETS oder CometVisu beteiligt sind, dann auch deren Version
  • Bitte mache vollständige Angaben zu Deinem Server, dessen ID und dem Online-Status in Deiner Signatur. Hilfreich ist oft auch die Beschreibung der angeschlossener Hardware sowie die verwendeten Protokolle
  • Beschreibe Dein Projekt und Dein Problem bitte vollständig. Achte bitte darauf, dass auf Screenshots die Statusleiste sichtbar ist
  • Bitte sei stets freundlich und wohlwollend, bleibe beim Thema und unterschreibe mit deinem Vornamen. Bitte lese alle Regeln, die Du hier findest: https://wiki.timberwolf.io/Forenregeln

Ersteller
Dragonos2000
Reactions:
Beiträge: 2181
Registriert: So Aug 12, 2018 1:38 pm
Wohnort: Karlsruher Raum
Hat sich bedankt: 481 Mal
Danksagung erhalten: 889 Mal

Wie zwei Strings vergleichen

#1

Beitrag 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?
Zuletzt geändert von Dragonos2000 am Do Mai 27, 2021 8:37 pm, insgesamt 1-mal geändert.
Lg
Jochen
____________________________________________________________
TW 2600 #188
VPN offen, Zugriff jederzeit, Experimente jederzeit, Reboot jederzeit

StefanW
Elaborated Networks
Reactions:
Beiträge: 9689
Registriert: So Aug 12, 2018 9:27 am
Wohnort: Frauenneuharting
Hat sich bedankt: 4831 Mal
Danksagung erhalten: 7633 Mal
Kontaktdaten:

#2

Beitrag von StefanW »

Hi Jochen,

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

Lg

Stefan
Stefan Werner
Product Owner für Timberwolf Server, 1-Wire und BlitzART
Bitte WIKI lesen. Allg. Support nur im Forum. Bitte keine PN
Zu Preisen, Lizenzen, Garantie, HW-Defekt an service at elabnet dot de

Link zu Impressum und Datenschutzerklärung oben.

Ersteller
Dragonos2000
Reactions:
Beiträge: 2181
Registriert: So Aug 12, 2018 1:38 pm
Wohnort: Karlsruher Raum
Hat sich bedankt: 481 Mal
Danksagung erhalten: 889 Mal

#3

Beitrag 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...
Zuletzt geändert von Dragonos2000 am Do Mai 27, 2021 9:06 pm, insgesamt 1-mal geändert.
Lg
Jochen
____________________________________________________________
TW 2600 #188
VPN offen, Zugriff jederzeit, Experimente jederzeit, Reboot jederzeit

Robert_Mini
Reactions:
Beiträge: 3741
Registriert: So Aug 12, 2018 8:44 am
Hat sich bedankt: 1164 Mal
Danksagung erhalten: 2058 Mal

#4

Beitrag von Robert_Mini »

Geht das tatsächlich bereits oder hast du das missverstanden?
Robert
Timberwolf Server 2500 / #117 (VPN offen + reboot nach Rückfrage) / zusätzlich: 3500M/#935, 3500L/#1297

Ersteller
Dragonos2000
Reactions:
Beiträge: 2181
Registriert: So Aug 12, 2018 1:38 pm
Wohnort: Karlsruher Raum
Hat sich bedankt: 481 Mal
Danksagung erhalten: 889 Mal

#5

Beitrag 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...
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Lg
Jochen
____________________________________________________________
TW 2600 #188
VPN offen, Zugriff jederzeit, Experimente jederzeit, Reboot jederzeit

Ersteller
Dragonos2000
Reactions:
Beiträge: 2181
Registriert: So Aug 12, 2018 1:38 pm
Wohnort: Karlsruher Raum
Hat sich bedankt: 481 Mal
Danksagung erhalten: 889 Mal

#6

Beitrag 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:
Zuletzt geändert von Dragonos2000 am Do Mai 27, 2021 11:30 pm, insgesamt 1-mal geändert.
Lg
Jochen
____________________________________________________________
TW 2600 #188
VPN offen, Zugriff jederzeit, Experimente jederzeit, Reboot jederzeit

Ersteller
Dragonos2000
Reactions:
Beiträge: 2181
Registriert: So Aug 12, 2018 1:38 pm
Wohnort: Karlsruher Raum
Hat sich bedankt: 481 Mal
Danksagung erhalten: 889 Mal

#7

Beitrag von Dragonos2000 »

@StefanW Soll ich das hier dann als FR flaggen?
Lg
Jochen
____________________________________________________________
TW 2600 #188
VPN offen, Zugriff jederzeit, Experimente jederzeit, Reboot jederzeit

StefanW
Elaborated Networks
Reactions:
Beiträge: 9689
Registriert: So Aug 12, 2018 9:27 am
Wohnort: Frauenneuharting
Hat sich bedankt: 4831 Mal
Danksagung erhalten: 7633 Mal
Kontaktdaten:

#8

Beitrag 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
Stefan Werner
Product Owner für Timberwolf Server, 1-Wire und BlitzART
Bitte WIKI lesen. Allg. Support nur im Forum. Bitte keine PN
Zu Preisen, Lizenzen, Garantie, HW-Defekt an service at elabnet dot de

Link zu Impressum und Datenschutzerklärung oben.

Dante
Reactions:
Beiträge: 157
Registriert: So Aug 12, 2018 10:42 am
Hat sich bedankt: 8 Mal
Danksagung erhalten: 78 Mal

#9

Beitrag 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?
Viele Grüße,
Thomas

timberwolf146 / Timberwolf Server 2500 Indian Gold + PBM / Version 1.6.0 IP3 (Wartungs-VPN offen / Reboot jederzeit möglich)

blaubaerli
Reactions:
Beiträge: 2308
Registriert: Sa Sep 15, 2018 10:26 am
Wohnort: Kerpen
Hat sich bedankt: 884 Mal
Danksagung erhalten: 677 Mal

#10

Beitrag 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
wiregate1250 & timberwolf168 (2600er), VPN offen, Reboot nach Vereinbarung
Antworten

Zurück zu „Logikengine & Logik-Editor“