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

[Erfahrungsbericht] [v3.5.1] Erste Custom Logik

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
Benutzeravatar

Ersteller
Wallaby1999
Reactions:
Beiträge: 12
Registriert: So Aug 12, 2018 10:23 pm
Hat sich bedankt: 64 Mal
Danksagung erhalten: 14 Mal

[v3.5.1] Erste Custom Logik

#1

Beitrag von Wallaby1999 »

Hallo,

da ich nach Jahren des Timberwolf-Besitzes nun endlich das Wiregate ablöse, tansferiere ich gerade noch das letzte dort laufende Plugin und implementiere es im Logik-Editor. Da wollte ich mal die Forengemeinde teilhaben lassen an meinem Fortschritt.

Die Lernkurve ist recht steil, aber als ITler gut und relativ schnell machbar. Größtes Hindernis war es, in meinem Kopf die ungewohnte Ablauflogik zu verinnerlichen, die im Wiki gut erklärt wird.

Meine Anforderung war: Ich habe Rollläden, die bei Unterschreiten einer gewissen Helligkeitsschwelle einmalig automatisch heruntergefahren und bei Überschreiten einmalig automatisch hochgefahren werden sollen. Einmalig deswegen, weil man es ja vielleicht mal händisch übersteuert und dann nicht alle 10 Sekunden der Rollladen zum Fahren animiert werden soll. Zusätzlich gibt es zwei Rollläden, die nur herunter- aber nicht hochgefahren werden sollen.

Hierzu habe ich eine Custom Logik geschrieben, die einen Schwellwertschalter mit Hysterese verwendet und als Ergebnis zurückgibt, ob der Schwellwert unterschritten ist. Zusätzlich kann man angeben, ob der Zustand true bzw. false gesendet werden sollen. Hier der zugehörige Code:

Code: Alles auswählen

/**
 * Prüft, ob ein Schwellwert unterschritten ist.
 * Das Ergebnis wird nur bei einer Änderung auf den Ausgang geschrieben.
 * Es kann zusätzlich angegeben werden, ob im Falle von true bzw. false tatsächlich gesendet werden soll
 */

{
  "Input": [
    [ "Eingang", "Eingangswert", "$Input", "c" ],
    [ "Schwelle_1", "Unterer Vergleichswert", "$Thres_low", "c" ],
    [ "Schwelle_2", "Oberer Vergleichswert", "$Thres_high", "c" ],
    [ "Send_True", "Bei True senden", "$SendTrue", "c" ],
    [ "Send_False", "Bei False senden", "$SendFalse", "c" ]
  ],
  "Output": [
    [ "Schwellwert unterschritten", "Wert ist unterhalb der Schwelle", "$Result", "c" ]
  ],
  "Level": [
// Eingangs-Variablen
    [ "$Input", "float", 0 ], // Input-Wert
    [ "$Thres_low", "float", 0 ], // Untere Schranke für den Input-Wert
    [ "$Thres_high", "float", 0 ], // Obere Schranke für den Input-Wert
    [ "$SendTrue", "bool", true ], // Senden, wenn der Output-Wert true ist
    [ "$SendFalse", "bool", true ], // Senden, wenn der Output-Wert false ist
// Ausgangs-Variablen
    [ "$Result", "bool", false ], // Ausgangs-Variable
// Interne Variablen
    [ "$DummyTrue", "bool", true], // dummy für true
    [ "$StatusChanged", "bool", false ], // Gibt an, ob sich der Status geändert hat. Benötigt, damit das Ergebnis nur bei Status-Änderung gesendet wird
    [ "$Status", "bool", false ], // Der aktuelle Status
    [ "$Status_new", "bool", false ], // Temporäre Variable für das Ergebnis des Schwellwert-Vergleichs
    [ "$Internal_SendTrue", "bool", false ], // Interne Variable, ob eine Änderung zu true stattgefunden hat und gesendet werden soll
    [ "$Internal_SendFalse", "bool", false ], // Interne Variable, ob eine Änderung zu false stattgefunden hat und gesendet werden soll
    [ "$Internal_Send", "bool", false ] // Interne Variable, ob eine Änderung gesendet werden soll
  ],
  "Module": [
    [ "Comparator", "$Input", "-$Status_new", ["$Thres_low", "$Thres_high"]], // Wert unterhalb des Schwellwertes?
    [ "Xor", ["$Status_new", "$Status"], "$StatusChanged"], // Hat sich der Status geändert?
    [ "Latch", "$Status_new", "$Status", "$DummyTrue", 0], // Speichere den neuen Status
    [ "And", ["$StatusChanged", "$Status", "$SendTrue"], "$Internal_SendTrue"], // Wurde der Status zu true geändert und soll gesendet werden?
    [ "And", ["$StatusChanged", "-$Status", "$SendFalse"], "$Internal_SendFalse"], // Wurde der Status zu false geändert und soll gesendet werden?
    [ "Or", ["$Internal_SendTrue", "$Internal_SendFalse"], "$Internal_Send"], // Muss eine Statusänderung gesendet werden?
    [ "Latch", "$Status", "$Result", "$Internal_Send", 0] // Sende den Status auf den Ausgang, wenn es eine Änderung gab, die gesendet werden soll
  ]
}
Beim Schreiben des Codes und Wälzen der Doku ist mir aufgefallen, dass es im Wiki eine Beschreibung der Bausteine gibt und auch im Forum in der Knowledge Base. Diese sind jedoch nicht deckungsgleich. Z.B. gibt es im Forum "SendExplicit", das im Wiki nicht auftaucht. Im Wiki besteht die Beschreibung von "Latch" aus Platzhaltern, während es im Forum gut erklärt wird. Wenn hier Unterstützung benötigt wird, den Wiki zu aktualisieren, biete ich gerne meine Hilfe an.

Ideal für öfter verwendete Custom Logiken wäre es, wenn man den Code nur einmal hinterlegen muss und diese Logik dann einfach per Anklicken wiederverwenden kann. Sollte man einen Fehler im Code haben, muss man ihn dann nur an einer Stelle ändern und muss nicht jede Logik einzeln anpacken.

Soviel erst mal zu meinem ersten Versuch. Die Logikengine macht richtig Spaß und ich denke, dass ich noch die ein oder andere Sache damit umsetzen werde.
Michael

Timberwolf Server 960Q / #367 (VPN offen / 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

#2

Beitrag von Robert_Mini »

Hallo Michael!

Danke für die Hinweise zur Doku.
Werde das zeitnah nachpflegen.

Lg
Robert
Timberwolf Server 2500 / #117 (VPN offen + reboot nach Rückfrage) / zusätzlich: 3500M/#935, 3500L/#1297

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

#3

Beitrag von StefanW »

Hi Robert,

das wäre ganz toll, weil eigentlich möchte ich die KB auflösen und alles ins Wiki transferieren und sehen, dass das Wiki auch die beste Informationsquelle ist.

Hi Michael, wir haben leider nur begrenzte Accounts mit Schreibrechten (kostet jeder 10.- EUR im Monat), daher würde ich versuchen, es dem Robert zu überlassen. Ich will aber Deinen Enthusiasmus nicht einschränken, wenn Du tolle Ideen hast für Wiki Beiträge, dann kann ich Dir schon einen Account verschaffen, schreib einfach, wenn Du Dich da intensiver engagieren möchtest

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.
Benutzeravatar

Eraser
Reactions:
Beiträge: 646
Registriert: So Aug 12, 2018 1:51 pm
Wohnort: Amstetten, Österreich
Hat sich bedankt: 205 Mal
Danksagung erhalten: 275 Mal

#4

Beitrag von Eraser »

Glückwunsch zur ersten Custom-Logik

Eine kurze Anmerkung zum Code:
Sollte nicht bei den Variablen der Variablenname kein Teil eines anderen Variablennamens sein?

z.B. hier:
"Status" ist ein Teil von "Status_new" und "StatusChanged"

"Internal_Send" ebenso von 2 anderen Variablen
mfg
Wolfgang

Timberwolf 2500 #151 / VPN offen / Reboot nach Rücksprache
+ PBM #938

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

#5

Beitrag von Robert_Mini »

Hallo Wolfgang!

Diese Einschränkung gilt nur, wenn man diese Variablen in Ein-/Ausgängen verwendet und diese dann nachträglich ändern will.

Lg
Robert
Timberwolf Server 2500 / #117 (VPN offen + reboot nach Rückfrage) / zusätzlich: 3500M/#935, 3500L/#1297

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

#6

Beitrag von Robert_Mini »

Hallo zusammen!

Beide offenen Themen ins Wiki eingearbeitet!
Latch: https://elabnet.atlassian.net/wiki/spac ... ulbaustein
SendExplicit: https://elabnet.atlassian.net/wiki/spac ... ulbaustein

lg
Robert
Timberwolf Server 2500 / #117 (VPN offen + reboot nach Rückfrage) / zusätzlich: 3500M/#935, 3500L/#1297
Benutzeravatar

Eraser
Reactions:
Beiträge: 646
Registriert: So Aug 12, 2018 1:51 pm
Wohnort: Amstetten, Österreich
Hat sich bedankt: 205 Mal
Danksagung erhalten: 275 Mal

#7

Beitrag von Eraser »

OK alles klar.
mfg
Wolfgang

Timberwolf 2500 #151 / VPN offen / Reboot nach Rücksprache
+ PBM #938

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

#8

Beitrag von Robert_Mini »

StefanW hat geschrieben: Do Dez 22, 2022 6:04 pm das wäre ganz toll, weil eigentlich möchte ich die KB auflösen und alles ins Wiki transferieren und sehen, dass das Wiki auch die beste Informationsquelle ist.
Hallo Stefan!

Ich werden in den Tagen nach Weihnachten beginnen, Wiki gegen KB zu prüfen.

Zum Vorgehen mache ich einen eigenen Thread auf.

Lg
Robert
Timberwolf Server 2500 / #117 (VPN offen + reboot nach Rückfrage) / zusätzlich: 3500M/#935, 3500L/#1297

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

#9

Beitrag von StefanW »

HI Robert,

das wäre super, ich werde auch ziemlich viel am Wiki arbeiten über die Feiertage, es gibt eine Menge nachzutrage, wir können uns dann gerne auch abstimmen, welche Themen ich übernehme

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.
Antworten

Zurück zu „Logikengine & Logik-Editor“