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

[DISKUSSION] Anregungen und Verbesserungswünsche

Eure Wünsche und Phantasien
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
ROI111
Reactions:
Beiträge: 93
Registriert: Do Dez 27, 2018 6:14 pm
Hat sich bedankt: 65 Mal
Danksagung erhalten: 59 Mal

Anregungen und Verbesserungswünsche

#1

Beitrag von ROI111 »

Hallo zusammen,

Ich bin vor gut 1.5 Jahren noch in der Planungsphase meines Hauses auf den TW gestoßen und habe mich entschieden diesen zukaufen, da ich die Möglichkeiten die er mit gibt enorm finde. Ich bin also gänzlich ohne Erfahrungen vom Wiregate mit 0 Erfahrung gestartet.

Nachdem der TW bei mir angekommen ist habe ich mir sofort ein Testboard gebaut und habe KNX , 1 -Wire sowie eine einfache Logik getestet. Der Einstieg verlief mit den Informationen aus dem Forum absolut reibungslos.

Auch die ersten Schritte im Haus liefen klasse. Die KNX Komponenten wurden einfach integriert und im EG alle Readkontakte per 1-Wire in Betrieb genommen.

Eine erste einfache Visu habe ich mit CometVisu erstellt. Ist noch keine schönheit, eher eine Zusammenreihung von Funktionen aber auch hier bin ich ziemlich schnell hinein gekommen . :handgestures-thumbupright:

Dann habe ich erste einfache Logiken geschrieben z.B. Rollade der Terassentür verriegeln wenn Tür offen.

Bei den Logiken fängt es für mich an etwa schwieriger zu werden. Daher habe ich mich nicht getraut die Beschattungssteuerung über den Logikbaustein zu machen, sondern hab es erstmal nativ über knx gelöst, was funktioniert aber sicherlich noch ordentlich Ausbaupotential hat.

Ich habe bis jetzt noch nicht viele Logiken, die ich mirj edoch mit Tags gruppiert habe, trotzdem finde ich diese Art der Gliederung sehr unübersichtlich. Hier würde ich mir wünschen diese graphisch in einem Ausklapp Menü gruppieren zu können.

Zusätzlich hapert es bei mir mit der Umsetzung von Custom Logiken, selbst einer so einfachen Sache wie das Hinzufügen des Inhibit Eingangs, wie in einen parallel Thread vorgeschlagen. Ich habe es immer noch nicht geschafft mich in die Custom Logik einzuarbeiten und empfinde das als große abstoßende Hürde. Obwohl ich großen Respekt vor euerer Arbeit habe muss ich sagen, dass ich nicht die Zeit habe mir die Informationen hier im Forum zusammen zu suchen. Selbst als ETler mit Programmiererfahrung gestaltet sich der Einstieg für mich nicht intuitiv, sicherlich auch da ich nicht die Zeit habe hier über Stunden tief einzutauchen.
Was mir hier fehlt sind einfache Tutorials an denen man sich schnell entlang hangeln kann.
Angefangen bei einem “Hello World“ bis zu den komplizierteren Dingen.

So, da hatte sich jetzt bei mir über die letzten Tagen etwas Frust angestaut. Ich möchte dies jedoch als konstruktive Kritik verstanden wissen ohne eure Arbeit und euren großen Einsatz zu schmälern :handgestures-thumbupright: . Ich hoffe ich kann euch damit helfen und dazu beitragen das gute Produkt noch besser zu machen!

Schöne Grüße

Matthias
Zuletzt geändert von ROI111 am Di Sep 29, 2020 9:38 am, insgesamt 2-mal geändert.
TWS 950Q ID:348, VPN offen, Reboot erlaubt

Robosoc
Reactions:
Beiträge: 1876
Registriert: Di Okt 09, 2018 9:26 am
Hat sich bedankt: 635 Mal
Danksagung erhalten: 775 Mal

#2

Beitrag von Robosoc »

Hallo Matthias,

ich finde Deinen Text sehr gut geschrieben und finde auch die konstruktive Kritik ist Dir sehr gut gelungen. Aus eigener Erfahrung weiß ich natürlich, dass genau dass nicht immer gelingt und in Textform noch viel schwieriger ist, als verbal. Auch finde ich es sehr gut, dass Du dazu ein eigene Diskussion aufgemacht hast und es nicht beim Zeitfenster gepostet hast...sehr umsichtig, danke :handgestures-thumbupright:

Ich werde mich daher gerne einmal darin austesten eine Art Tutorial zur Modifikation von Custom-Logiken zu schreiben und das auch gleich am Beispiel der Zeitfenster-Logik machen...Ich werde es hier in dieser Diskussion seperat posten.
Zuletzt geändert von Robosoc am Di Sep 29, 2020 7:33 am, insgesamt 1-mal geändert.
VG, Sven - TWS 950Q ID:335 & 291, VPN offen, Reboot OK

Robosoc
Reactions:
Beiträge: 1876
Registriert: Di Okt 09, 2018 9:26 am
Hat sich bedankt: 635 Mal
Danksagung erhalten: 775 Mal

#3

Beitrag von Robosoc »

Tutorial zum Modifzieren von Costum-Logiken

Der Code einer Customlogik besteht immer aus 4 notwendigen Abschnitten (Input, Output, Level und Module) und 1 optionalen Abschnitt (Meta).
Darüber hinaus lassen sich an beliebigen Stellen Kommentare einbringen.

Code: Alles auswählen

/**
 * Kommentar 
 * mehrzeilig
 */

// Kommentar einzeilig
{
  "_Meta": {optional},
  "Level": [Deklaration der Variablen = Name, Typ, Defaultwert],
  "Input": [Deklaration der Eingänge = Name, Beschreibung, genutzte Variable, Triggerverhalten],
  "Output": [Deklaration der Ausgänge = Name, Beschreibung, genutzte Variable, Triggerverhalten],
  "Module": [Programmablauf]
}
Ich finde soweit ist es erstmal sehr nah an vielen Programmier- oder Script-Sprachen und sichrlich für Jedermann nachvollziehbar. Wichtig ist, das man versteht, dass in den Input und Output Abschnitten keine Variablen deklariert werden, sondern diese lediglich mit der richtigen Variablen verschaltet werden. Die Variablen dazu müssen aber im Abschnitt Level deklariert werden!

Wenn man dieses Prinzip verstanden hat, ist meines Erachtes schon der erste Schrecken einer Customlogik verkloren. Zumindest erging es mir so.

Und wenn man nun eine Logik modifizieren möchte, dann muss man sich zunächst überlegen, wo es alles Änderungen braucht.

Nun nehmen wir das Beispiel, dass man in der Customlogik Zeitfenster V1.2 (siehe hier) die Ergänzung vornehmen möchte, dass es einen zusätzlichen Eingang gibt, durch den man den Ablauf der Logik verhindern kann. Es bietet sich an, diesen Eingang Inhibit zu nennen, weil es dann genauso aussieht, wie bei Standardlogiken!

Nach kurzer Überlegung ist einem klar, dass es nun also folgende Ergänzungen braucht
  • Deklaration eines neuen Eingangs mit dem Namen Inhibit
  • Definition einer neuen Variable, auf die der Eingang Inhibit geschrieben wird. Für Inhibit-Eingänge bietet es sich an grundsätzlich eine "Multi-Variable" zu nutzen, dann kann man bei späteren Erweiterungen mehrere Inhibt-Eingänge anlegen und muss nichts machen (ist in Standardlogiken auch so gelöst).
  • Ergänzung des Programmablaufs um ein geeignetes Modul. Das ist in diesem Fall das Modul Break, welches das Ausführen der Logik abbricht.
In der korrekten Syntax sehen diese Ergänzugnen wie folgt aus:

Code: Alles auswählen

/**
 * Ergänzungen
 */
 
  "Level": [
     ["$VAR<Inhibit?>","bool",false]
  ],
  "Input": [
     ["Inhibit","INHIBIT","$VAR<Inhibit?>","u"]
  ],
  "Module": [
     ["Break",["$VAR<Inhibit?>"]]
  ]
}
Man muss jetzt also lediglich genau die drei Zeilen an den richtigen Stellen einfügen.
Die Positionen in den Abschnitten Level und Input sind egal, man muss lediglich bedenken, dass nach jeder Zeile (bis auf die letzte Zeile!!!) jeweils ein "," (Komma) als Trennungszeichen angefügt wird.

Das Break bietet sich in diesem Beispiel an erster Stelle im Abschnitt Module an. Und dann braucht es hier natürlich ein Komme am Ende.

So sieht das Ergebnis dann aus (im Kommentar habe ich ergänzt, dass es nun die V1.3 ist):

Code: Alles auswählen

/**
 * Zeitfenster
 * Der Logikbaustein sendet TRUE, wenn die aktelle Uhrzeit zwischen den beiden angegebenen Zeiten liegt.
 * Davor und danach wird FALSE gesendet.
 * Über Zyklus [s] kann gesteuert werden, wie oft die Prüfung stattfindet und der Ausgangswert ggfs.
 * aktualisiert wird.
 * Über "Zyklischer Sendeinterval [s]" kann eingestellt werden, ob der Ausgang zyklisch geschrieben werden soll. Wenn nein = 0, niedriges Werte sollten z.B. zur Schonung des KNX-Bus vermieden werden. 900 = 15 Minuten und stellt vermutlich in den meisten Fällen ein ausreichende Minumum dar. Der Wert 3600 sendet den Ausgang folglich 1x je Stunde und zusätzlich bei Änderung.
 * 
 * Nutzungsrechts: Der Schöpfer dieser Custom Logik überträgt die Nutzungsrechte gemäß der TOLL 
 * ("Timberwolf Open Logikblock License") die unter https://wrgt.news/TOLL zum Download zur Verfügung steht."
 * 
 * Erstellt am 12.08.2020 von Markus Großmann
 * 
 * ChangeLog:
 * V1.3 (29.09.2020): optionaler Inhibit-Eingänge (edit Robosoc)
 * V1.2 (13.08.2020): optionaler zyklischer Sendetakt, output parameter t statt c (edit Robosoc)
 * V1.1 (13.08.2020): Ausgang wird nun sekundengenau geschaltet
 * V1.0 (13.08.2020): Initial Release
 */

{
  "_Meta": { // Optional
    "Description": "Zeitfenster",
    "Version": "1.3",
    "Icon": "" // format: "data:image/svg+xml;base64,ENCODED_FILE"
  },
  "Input": [
      ["Stunde von","Stunde von", "$h_from", "c"],
      ["Minute von","Minute von", "$m_from", "c"],
      //["Sekunde von","Sekunde von", "$s_from", "c"],
      ["Stunde bis","Stunde bis", "$h_to", "c"],
      ["Minute bis","Minute bis", "$m_to", "c"],
      //["Sekunde bis","Sekunde bis", "$s_to", "c"],
      ["Zyklischer Sendeinterval", "optionaler Sendetakt in Sekunden, 0 = deaktiv Ausgang wird nur bei Änderung gesendet, bei Wert > 0 wird der Ausgang zyklisch entrechend gesendet","$interval","c"],
      ["Inhibit","INHIBIT","$VAR<Inhibit?>","u"]
  ],
  "Output": [
      ["Zeitfenster aktiv","Aktuelle Zeit ist im Zeitfenster", "$CurrIsInInterval", "t"]
  ],
  "Level": [
      ["$ltime","integer", 0],
      ["$h_from","integer", 0],
      ["$m_from","integer", 0],
      ["$s_from","integer", 0],
      ["$h_to","integer", 0],
      ["$m_to","integer", 0],
      ["$s_to","integer", 0],
      ["$h_curr","integer", 0],
      ["$m_curr","integer", 0],
      ["$s_curr","integer", 0],
      ["$TimeFrom","integer",0],
      ["$TimeTo","integer",0],
      ["$TimeCurrent","integer",0],
      ["$CurrIsAfterFrom","bool", false],
      ["$CurrIsAfterTo","bool", false],
      ["$CurrIsInInterval","bool", false],
      ["$Const1","integer",1],
      ["$Const60","integer",60],
      ["$Const86400", "integer", 86400],
      ["$Period","integer",60],
      ["$ConstTRUE","bool", true],
      ["$SecondsTillFrom","integer",0],
      ["$SecondsTillTo","integer",0],
      ["$SecondsTillNext","integer",1],
      ["$SecondsTillFrom_GT_Zero", "bool", false],
      ["$SecondsTillTo_GT_Zero", "bool", false],
      ["$From_GT_To", "bool", false],
      ["$interval", "integer", 0],
      ["$VAR<Inhibit?>","bool",false]
  ],
  "Module": [
      ["Break",["$VAR<Inhibit?>"]],
      // Aktuelle Uhrzeit
      ["Localtime",0,"$ltime","$s_curr","$m_curr","$h_curr",0,0,0,0,0,0],
      ["Polynomial", "$Const60", "$TimeCurrent", ["$s_curr","$m_curr","$h_curr"]],
      // Zeit Von in Sekunden
      ["Polynomial", "$Const60", "$TimeFrom", ["$s_from","$m_from","$h_from"]],
      // Zeit Bis in Sekunden
      ["Polynomial", "$Const60", "$TimeTo", ["$s_to","$m_to","$h_to"]],
      // Wie lange noch bis Zeit von?
      ["Polynomial", "$Const1", "$SecondsTillFrom", ["$TimeFrom", "-$TimeCurrent"]],
      ["Comparator", "$Const1", "$SecondsTillFrom_GT_Zero", "$SecondsTillFrom"],
      ["Polynomial", "$SecondsTillFrom_GT_Zero", "$SecondsTillFrom", ["$SecondsTillFrom", "$Const86400"]],
      // Wie lange noch bis Zeit bis?
      ["Polynomial", "$Const1", "$SecondsTillTo", ["$TimeTo", "-$TimeCurrent"]],
      ["Comparator", "$Const1", "$SecondsTillTo_GT_Zero", "$SecondsTillTo"],
      ["Polynomial", "$SecondsTillTo_GT_Zero", "$SecondsTillTo", ["$SecondsTillTo", "$Const86400"]],
      // Was ist früher?
      ["Comparator", "$SecondsTillFrom" , "$From_GT_To" , "$SecondsTillTo" ],
      ["Multiplexer", ["$SecondsTillFrom", "$SecondsTillTo"],"$SecondsTillNext", "$From_GT_To"],
      // Timer setzen
      ["Clocksignal","$ConstTRUE",0,"$SecondsTillNext"],
      // zyklischer Sendetimer
      ["Clocksignal","$ConstTRUE",0,"$interval"],
      // Ergebniswert berechnen
      ["Comparator", "$TimeFrom" , "$CurrIsAfterFrom" , "$TimeCurrent" ],
      ["Comparator", "$TimeTo" , "$CurrIsAfterTo" , "$TimeCurrent" ],
      ["And", ["-$CurrIsAfterFrom", "$CurrIsAfterTo"], "$CurrIsInInterval"]
  ]
}
Zuletzt geändert von Robosoc am Di Sep 29, 2020 9:05 am, insgesamt 4-mal geändert.
VG, Sven - TWS 950Q ID:335 & 291, VPN offen, Reboot OK

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 »

Hallo Matthias!

Ich habe 2 Tutorials erstellt. Hier hilft sicher durchklicken mehr als nur lesen.
- viewtopic.php?f=24&t=2001
- viewtopic.php?f=24&t=1712

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

Zurück zu „Feature Requests & Diskussionen Timberwolf Allgemein“