Neue Hauptversion V 4.1.1 mit Bugfix verfügbar

Dies ist die Fehlerkorrekturversion zur V 4.1 mit Fix für Kompatibilität der Tunnel, u.a. für ETS 6.3.0

Wir haben den seit 2019 bereitgestellten KNXnet/IP Tunneling Server im Timberwolf Server erweitert für Kompatibilität mit aktuellen Anforderungen der ETS 6.3 und weiterer Software, z.B. Weinzierl ENO Tools

Alle Informationen hier: https://elabnet.atlassian.net/wiki/page ... 3100770306

[Problem] [V4.1.1] Kein Wert soll zu false führen, ein Wert (nach Vergleich) zu true

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
Antworten

Ersteller
micha79
Reactions:
Beiträge: 12
Registriert: Di Jul 30, 2024 7:42 pm
Hat sich bedankt: 15 Mal
Danksagung erhalten: 3 Mal

[V4.1.1] Kein Wert soll zu false führen, ein Wert (nach Vergleich) zu true

#1

Beitrag von micha79 »

Hallo zusammen,

kurz zum Anwendungsfall: der HTTP-API hole ich mir von meiner Unifi Dreammachine die eingebuchten WLAN-Clients. Daraus möchte ich gerne ableiten, ob Hausbewohner anwesend sind (true) oder nicht (false). Aus der API-Antwort übergebe ich den Namen des gesuchten Clients (durch Vergleich mit der MAC-Adresse) an die Logik. Ist der Client nicht eingebucht, übergibt das API-Subsystem keinen Wert.

Meine Frage: wie kann ich eine Logik (oder eine Funktion an anderer Stelle) bauen, die mir wie gewünscht true/false zurückgibt?

So sieht das Ergebnis der API-Abfrage aus:
Bild
Führt also aktuell zu keinem Wert (vermutlich NaN?), da nicht im WLAN eingebucht.

Und so verarbeite ich es aktuell in der Logik weiter:
Bild

Über den Trigger habe ich versucht, die Logik auch dann auszulösen, wenn es keine Wertänderung gibt - in der Hoffnung, dass sie dann mangels Eingangswert auf false springt. Tut sie aber nicht und verharrt offenbar auf dem letzten empfangenen Wert, deren Vergleich dann zwar korrekterweise zu true führt - nur dass das Gerät eben nicht mehr im WLAN ist.

Ich hoffe, das Problem wird klar, fragt sonst gerne nach.

Bin gespannt auf Ideen und Vorschläge!

Viele Grüße
Micha
TWS 3500XL, ID 1583, Support-VPN und Reboot nach Absprache

gbglace
Reactions:
Beiträge: 4036
Registriert: So Aug 12, 2018 10:20 am
Hat sich bedankt: 1402 Mal
Danksagung erhalten: 1878 Mal

#2

Beitrag von gbglace »

Bei dem Screenshot wo Du die orangenen Warnigs angezeigt bekommst, da musst mal etwas weiter unten in Deinen Monitor schauen.

Neben den beiden Optionen Objekte und Antworten hinzuzufügen, gibt es auch noch eine option Statusobjekte sich anzeigen zu lassen, da sollte es bei den Warning-behafteten Versuchen der Abfrage entsprechende Outputs geben. Dieses Warning-Objekt nimmst dann mit dem Nutzwert (MAC Adresse), in eine UND-Logik. Den Warning Trigger mit Eingangsfilter A (allways) Und den Wert nur als U reiner Wertupdate. Dann hast eine UND aus zwei Eingängen und das Ergebnis geht per Change raus, wenn sich der Status der Antwort ändert.

Wenn die Statusobjekte bei Dir nicht sichtbar sind, dann freue Dich auf das nächste richtige Hauptrelease oder mach mit bei der Insider-Version. Diese Deine Anwendung ist ein sehr gutes Beispiel für diese Featureerweiterung. Ich habe hier ja DEV und Insider auf meinem TWS laufen, daher soweit schonmal der Hinweis dazu.
Zuletzt geändert von gbglace am Do Apr 10, 2025 5:57 pm, insgesamt 2-mal geändert.
Grüße Göran
#1 Timberwolf 2600 Velvet Red TWS #225 / VPN aktiv / Reboot OK
#2 Timberwolf 2600 Organic Silver TWS #438 / VPN aktiv / Reboot OK
#PV 43,2 kWh Akku; 3x VE MP2 5000; 6,7 kWp > 18 Panele an 4x HM1500 + 1 HM800 WR; Open-DTU

Ersteller
micha79
Reactions:
Beiträge: 12
Registriert: Di Jul 30, 2024 7:42 pm
Hat sich bedankt: 15 Mal
Danksagung erhalten: 3 Mal

#3

Beitrag von micha79 »

Hallo Göran,

danke für Deine schnelle Antwort. Das klingt schon mal gut und nach "nah dran" an der Lösung. Die Statusobjekte kann ich bei mir in der V4.1.1. in der Tat ausklappen und würde sie auch gerne weiterverarbeiten. Allerdings kann ich noch keinen Unterschied bei den Statusmeldungen erkennen zwischen den Abfragen, die im einen Fall zu einem Wert führen (Client im WLAN eingebucht) und im anderen Fall zu keinem Wert (nicht eingebucht). In beiden Fällen sind die Statusmeldungen leider identisch.

Bild

Da die Statusmeldungen offenbar pro Ressource angezeigt werden und nicht weiter nach Antwort-Auswertungen unterschieden wird, habe ich die Auswertungen für die einzelnen Clients extra auf separate Ressourcen verteilt. Das macht leider aauch noch keinen Unterschied.

Übersehe ich etwas oder ist es bei Dir in der Insider- bzw. DEV-Version tatsächlich anders?

Gruß Micha
TWS 3500XL, ID 1583, Support-VPN und Reboot nach Absprache

gbglace
Reactions:
Beiträge: 4036
Registriert: So Aug 12, 2018 10:20 am
Hat sich bedankt: 1402 Mal
Danksagung erhalten: 1878 Mal

#4

Beitrag von gbglace »

Ich habe das bisher noch nciht weiter analysiert. Meine Annahme war das da eben eine Reaktion entsprechend abzuleiten ist ob denn ebend die Balken grün oder orange und das Warndreieck daher kommen.

Aber OK dann geht der Status erstmal nur auf die "Verbindungsqualität" der API-Schnittstelle und die ist ja technisch OK.
Wie Oft fragts Du das ab?

Den Ausgang der API mal in eine TS geleitet ergibt da auch keine Änderung im Verhalten, das man da dann quasi "Lücken" im Wert erkennt? Ein Nichts wird also nicht weiter geleitet?
Grüße Göran
#1 Timberwolf 2600 Velvet Red TWS #225 / VPN aktiv / Reboot OK
#2 Timberwolf 2600 Organic Silver TWS #438 / VPN aktiv / Reboot OK
#PV 43,2 kWh Akku; 3x VE MP2 5000; 6,7 kWp > 18 Panele an 4x HM1500 + 1 HM800 WR; Open-DTU

Ersteller
micha79
Reactions:
Beiträge: 12
Registriert: Di Jul 30, 2024 7:42 pm
Hat sich bedankt: 15 Mal
Danksagung erhalten: 3 Mal

#5

Beitrag von micha79 »

Ok, dann liegt der Fehler schon mal nicht im Verständnis der Statusmeldungen. Eine TS hilft leider auch nicht, da bleibt der Wert offenbar "stehen", wenn "kein Wert" folgt. In meinem Fall also dauerhaft auf true, wenn es einmal true war. TS ist für die Statistik vielleicht interessant, true/false aber direkt korrekt im Objektsystem zu haben aber natürlich das eigentliche Ziel, um dann damit weiterarbeiten zu können.

Vielleicht gibt es ja noch andere Ideen von Dir oder aus der Community!?

Gruß Micha
TWS 3500XL, ID 1583, Support-VPN und Reboot nach Absprache

gbglace
Reactions:
Beiträge: 4036
Registriert: So Aug 12, 2018 10:20 am
Hat sich bedankt: 1402 Mal
Danksagung erhalten: 1878 Mal

#6

Beitrag von gbglace »

Womöglich erst wenn die beiden Modifizierer noch finalisiert werden. Aber da kann ich noch nichts aus der Dev Welt leaken.

Den Trigger hast einfach zyklisch eingestellt?
In einer TS oder so kannst ja mal analysieren ob bei keinem Wert einfach eine lange Zeit nichts kommt, vs wenn es eine Antwort gibt, dass es dann immer was gibt , wenn auch das selbe.

Bei diesem Verhalten könntest quasi noch eine Timerlogik bauen, die doppelt so lang wie der Abfragezyklus ist, und durch die Antwort ge/retriggert wird. Solange hier dann also der Timer läuft, kommt immer die Antwort Handy im WLAN. Bleibt die Nachricht aus weil eben nix kommt und das nix das API Modul nicht verlässt hast ein binäres Signal Client ist raus aus dem WLAN.

Bräuchtest dann gar den UND Baustein nicht mehr.
Zuletzt geändert von gbglace am Do Apr 10, 2025 9:36 pm, insgesamt 1-mal geändert.
Grüße Göran
#1 Timberwolf 2600 Velvet Red TWS #225 / VPN aktiv / Reboot OK
#2 Timberwolf 2600 Organic Silver TWS #438 / VPN aktiv / Reboot OK
#PV 43,2 kWh Akku; 3x VE MP2 5000; 6,7 kWp > 18 Panele an 4x HM1500 + 1 HM800 WR; Open-DTU

Ersteller
micha79
Reactions:
Beiträge: 12
Registriert: Di Jul 30, 2024 7:42 pm
Hat sich bedankt: 15 Mal
Danksagung erhalten: 3 Mal

#7

Beitrag von micha79 »

Gute Idee. Ich habe die TS mal angelegt und beobachte sie. Melde mich dann wieder zurück.
TWS 3500XL, ID 1583, Support-VPN und Reboot nach Absprache

Sunshinemaker
Reactions:
Beiträge: 239
Registriert: So Mai 22, 2022 11:45 am
Hat sich bedankt: 118 Mal
Danksagung erhalten: 135 Mal

#8

Beitrag von Sunshinemaker »

micha79 hat geschrieben: Do Apr 10, 2025 1:45 pm kurz zum Anwendungsfall: der HTTP-API hole ich mir von meiner Unifi Dreammachine die eingebuchten WLAN-Clients. Daraus möchte ich gerne ableiten, ob Hausbewohner anwesend sind (true) oder nicht (false).
Nutzt du Android oder iOS auf deinen Smartphones?
LG Sören

TWS 3500 XL / ID 846 / VPN:offen / Reboot nach Rücksprache

AndererStefan
Reactions:
Beiträge: 207
Registriert: Sa Mär 02, 2024 11:04 am
Hat sich bedankt: 126 Mal
Danksagung erhalten: 131 Mal

#9

Beitrag von AndererStefan »

Hi,

das Problem kommt mir aus einem anderen Kontext doch bekannt vor.

@ms20de hat eine Custom Logik erstellt die ausgelöst durch einen Trigger (z.B. einen HTTP-Status Objekt für eine durchgeführte erfolgreiche oder erfolglose HTTP-Abfrage) prüft ob ein anderer Wert der Abfrage einen Wert hat.

viewtopic.php?t=5639

VG Stefan
Zuletzt geändert von AndererStefan am Fr Apr 11, 2025 11:39 am, insgesamt 1-mal geändert.
TWS 3500XL ID:1486, VPN aktiv, Reboot nach Rücksprache

Ersteller
micha79
Reactions:
Beiträge: 12
Registriert: Di Jul 30, 2024 7:42 pm
Hat sich bedankt: 15 Mal
Danksagung erhalten: 3 Mal

#10

Beitrag von micha79 »

Guten Abend zusammen,

danke für den Hinweis auf die Custom-Logik. Die adressiert genau das Problem, das ich auch habe. Mit der von @AndererStefan angepassten Version bin ich auch schon fast ans Ziel gekommen: der Name des eingebuchten Geräts wird weitergegeben, wenn es im WLAN ist, andernfalls eben der Fehlerwert und somit kein "leerer Wert". Super! :D

Da ich nun schon einmal mit dem Thema Custom-Logik warm geworden bin - was wirklich nicht besonders schwer war - möchte ich nun gerne mit ihr direkt die Anwesenheit in true/false ausgeben. Dazu habe ich am Ende ein Stringcompare ergänzt, aber leider führt das noch nicht zum gewünschten Ergebnis - der Ausgang $out_status bleibt immer auf false stehen. Die Weitergabe des Gerätenamens $pass_on_value funktioniert hingegen einwandfrei.

Habt Ihr eine Idee, warum der letzte Schritt mit Stringcompare nicht funktioniert? Steht er vielleicht an der falschen Stelle in Module?

Code: Alles auswählen

  {
    "Level": [
        
        // Eingänge
        ["$in_value","string,32",""],
        ["$in_request_run","bool",false],
 
        // Ausgang
        ["$out_status","bool",false],

        // Interne Variablen
        ["$is_triggered_by_value","bool",false],
        ["$was_triggered_by_value","bool",false],
        ["$is_triggered_by_run","bool",false],
        ["$pass_on_value","string,32",""],

        // Konstanten
        ["$in_error_value","string,32","ERROR"],
        ["$compare_to","string,32","Gerätename"],
        ["$compare_mode","string","e"]
    ],
    
    "Input": [
        ["Wert", "Eingangswert (String)", "$in_value", "a"],
        ["Trigger", "Trigger für Ausführung", "$in_request_run", "a"]
    ],
    
    "Output": [
        ["Status", "Status anwesend (Boolean)", "$out_status", "a"],
        ["Pass-on-Value", "Weitergegebener Wert", "$pass_on_value", "a"]
    ],
  
    "Module": [
      [ "Triggered", "$in_value", "$is_triggered_by_value" ],
      [ "Triggered", "$in_request_run", "$is_triggered_by_run" ],
      
      // Durch Eingangswert ausgelöst - Abbruch
      ["Latch","$true","$was_triggered_by_value","$is_triggered_by_value",0],
      ["Break", ["$is_triggered_by_value"]],

      // Eingangswert weiterreichen
      ["Latch","$in_value","$pass_on_value","$was_triggered_by_value",0],

      // Fehlerwert weiterreichen, da durch Trigger ausgelöst
      ["Latch","$in_error_value","$pass_on_value","-$was_triggered_by_value",0],

      // 'was triggered by value' zurücksetzen
      ["Latch","$false","$was_triggered_by_value","$was_triggered_by_value",0],

      // Weitergereichten Wert vergleichen, Boolean (true/false) erzeugen
      ["Stringcompare","$pass_on_value","$out_status","$compare_to","$compare_mode"]
      
    ]
  }
Wenn wir den letzten Schritt auch noch hinbekommen, stelle ich die Logik gerne unter der TOLL im zitierten Thread bereit.

Danke für Eure Hilfe und viele Grüße
Micha
TWS 3500XL, ID 1583, Support-VPN und Reboot nach Absprache
Antworten

Zurück zu „Logikengine & Logik-Editor“