NEU! UPGRADE IP 10 verfügbar!
Optimierte Darstellung von VISU Editor und VISU Client - sowie viele weitere Verbesserungen
Infos im Wiki: https://elabnet.atlassian.net/l/cp/8HzePCm3

Insider & Leistungsmerkmale FÜR ALLE freigeschaltet
Ab sofort kann jeder die neue VISU & IFTTT testen. Info: viewtopic.php?f=8&t=5074

Release V 4 am 15. Juni 2024
Es gibt nun einen fixen Termin. Info: viewtopic.php?f=8&t=5117

NEU! Ausführliches Video Tutorial zur IP 10
Jetzt werden alle Fragen beantwortet. Das Video: https://youtu.be/_El-zaC2Rrs

[TIPP] Zeitfenster V1.3 (17.12.2020)

Hier stellen Foristen und Kunden Ihre EIGENEN Logikbausteine vor. Diese Logikbausteine stehen jedem im Rahmen der vom Autor eingeräumten / genannten Lizenz zur Verfügung.
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
Ide71
Reactions:
Beiträge: 41
Registriert: Mo Jan 07, 2019 5:32 pm
Hat sich bedankt: 78 Mal
Danksagung erhalten: 14 Mal

Zeitfenster V1.3 (17.12.2020)

#1

Beitrag von Ide71 »

Hallo zusammen,

ich habe bei der Jalousie-Steuerung die Herausforderung gehabt, dass ich einen Logikbaustein vermisst habe, der mir in einem definierten Zeitintervall TRUE liefert (z.B. von 8 bis 22 Uhr), außerhalb des Zeitfenster aber FALSE.

Beispiel für eine Anwendung: Ich will die Jalousiesteuerung helligkeitsabhängig machen, vor 8 Uhr sollen die Jalousien aber nicht hochfahren, auch wenn es draußen schon hell ist.

Hierfür habe ich folgende CustomLogik programmiert, die ich gerne zur Verfügung stelle. Feedback und Verbesserungsvorschläge sind willkommen.
Nach dem Speichern müssen erst noch alle Eingänge auf Parameter umgestellt werden, das geht leider (bisher) nicht per default (siehe auch hier).

Hier die Quellcode:

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.
 * 
 * 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 (17.12.2020): Baustein funktioniert auch, wenn das Zeitfenster über Mitternacht definiert ist, also wenn VON-Zeit > BIS-Zeit (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.2",
    "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"]
  ],
  "Output": [
      ["Ausgang","Wenn aktuelle Zeit im Zeitfenster, ausgang = 1, sonst 0", "$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],
	  ["$TimeBufferNeg","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],
	  ["$Negieren", "bool", false]
  ],
  "Module": [
      // 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"]],
	  // Prüfen, ob TimeFrom > TimeTo, sonst tauschen und Ausgang negieren
	  ["Comparator", "$TimeFrom" , "$Negieren" , "$TimeTo" ],
	  ["Latch","$TimeTo","$TimeBufferNeg","$Negieren",0],
	  ["Latch","$TimeFrom","$TimeTo","$Negieren",0],
	  ["Latch","$TimeBufferNeg","$TimeFrom","$Negieren",0],
      // 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"],
	  ["Latch","-$CurrIsInInterval","$CurrIsInInterval","$Negieren",0]
  ]
}

Und so sieht das ganze dann aus:
Zeitfenster_V1_1.png
Viel Spaß damit.

Gruß
Markus
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Zuletzt geändert von Robosoc am Do Dez 17, 2020 7:29 am, insgesamt 6-mal geändert.
TWS 950 ID:467, VPN aktiv, Reboot nur nach Rücksprache

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

#2

Beitrag von Robosoc »

Vielen Dank! Also eine Art Tag - Nacht Umschaltung. mit Einstellbaren Zeitfenstern.

Das habe ich bei mir mit einem "Timer 1" Standardbaustein gelöst, nur als Alternativvorschlag:
Anmerkung 2020-08-13 131504.jpg
Kann aber gut sein, dass ich darauf nicht selber gekommen bin und es von irgendwem hier im Forum übernommen habe.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
VG, Sven - TWS 950Q ID:335 & 291, VPN offen, Reboot OK

Ersteller
Ide71
Reactions:
Beiträge: 41
Registriert: Mo Jan 07, 2019 5:32 pm
Hat sich bedankt: 78 Mal
Danksagung erhalten: 14 Mal

#3

Beitrag von Ide71 »

Stimmt, das ist auch eine mögliche Lösung. Was mir an meiner besser gefällt: Der Ausgang stimmt sofort, wenn man sie das erste mal anlegt oder die Parameter ändert. Und man muss nix rechnen. ;)
TWS 950 ID:467, VPN aktiv, Reboot nur nach Rücksprache

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

#4

Beitrag von Robosoc »

:handgestures-thumbupright:
Ja auf jeden Fall ist das erste Argument ein riesen Vorteil.
VG, Sven - TWS 950Q ID:335 & 291, VPN offen, Reboot OK

Robert_Mini
Reactions:
Beiträge: 3744
Registriert: So Aug 12, 2018 8:44 am
Hat sich bedankt: 1171 Mal
Danksagung erhalten: 2076 Mal

#5

Beitrag von Robert_Mini »

Das fehlt sicher in optimierter Form noch als Standardbaustein. Hatte bis jetzt keinen Bedarf, aber aus meiner Sicht gibt es 2 Anforderungen, wobei Eure Lösungen nur jeweils eine davon erfüllen.
Ist aber auch Jammern auf hohem Niveau:
1) Zustand soll sofort stimmen
2) Schalten soll zum exakten Zeitpunkt erfolgen

Der 2. Punkt hat mit bei den Plugins am WG immer gefehlt und ist am TWS wirklich genial!

So richtig hab ich auch grad keinen Lösungsansatz, aber ich werde mal nachdenken...

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

Ersteller
Ide71
Reactions:
Beiträge: 41
Registriert: Mo Jan 07, 2019 5:32 pm
Hat sich bedankt: 78 Mal
Danksagung erhalten: 14 Mal

#6

Beitrag von Ide71 »

Der 2. Punkt geht mir auch schon durch den Kopf. Hab auch schon eine Idee, wie ich das umsetzen möchte. Muss es nur noch tun...
TWS 950 ID:467, VPN aktiv, Reboot nur nach Rücksprache

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

#7

Beitrag von Robosoc »

Robert_Mini hat geschrieben: Do Aug 13, 2020 2:01 pm
2) Schalten soll zum exakten Zeitpunkt erfolgen
Sehr gut gesehen, das war mir noch nicht aufgefallen, wollte den Baustein von ide71 eigentlich schon übernehmen.

Wolfgang hat hier viewtopic.php?f=24&t=2173&p=24005&hilit=cron#p24005 schonmal einen Lösungsansatz gebracht, der aber ohne Parameter in der Logikzellendarstellung auskommem muss verwendet.

Da ich meinen Timer1-Baustein im Persistenzmodus laufen lassen, scheint mir das aber die einfachste Lösung zu bleiben und in den allermeisten Fällen eine ausreichend gute Lösung darzustellen, die auch genau schaltet. Man könnte Sie noch um einen Trigger erweitern, so dass z.B. mal alle 15 Minuten der Ausgang gesendet wird...
VG, Sven - TWS 950Q ID:335 & 291, VPN offen, Reboot OK

Ersteller
Ide71
Reactions:
Beiträge: 41
Registriert: Mo Jan 07, 2019 5:32 pm
Hat sich bedankt: 78 Mal
Danksagung erhalten: 14 Mal

#8

Beitrag von Ide71 »

In der neuen Version 1.1 wird nun der Ausgang sekundengenau gesetzt, der Trigger ist nicht mehr notwendig. Wäre schön, wenn das noch jemand verifizieren könnte. ;)
TWS 950 ID:467, VPN aktiv, Reboot nur nach Rücksprache

Ersteller
Ide71
Reactions:
Beiträge: 41
Registriert: Mo Jan 07, 2019 5:32 pm
Hat sich bedankt: 78 Mal
Danksagung erhalten: 14 Mal

#9

Beitrag von Ide71 »

Jetzt bin ich selber etwas ratlos. Die Logik funktioniert bei mir manchmal, manchmal wird sie aber nicht ein einziges Mal getriggert. Ich kann es aber nicht reproduzieren. Hat jemand eine Idee, oder ist das ein Bug?

Update: Ich hab jetzt mal den Dienst von der Logik Engine neu gestartet, jetzt passt alles. Die scheint sich also bei mir irgendwie aufgehängt zu haben...
Zuletzt geändert von Ide71 am Do Aug 13, 2020 5:13 pm, insgesamt 1-mal geändert.
TWS 950 ID:467, VPN aktiv, Reboot nur nach Rücksprache

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

#10

Beitrag von Robosoc »

:think: Ich schau mir das mal mit an. Beim ersten durchlesen des Codes habe ich keinen Fehler direkt erkannt. Aber bei mir speichert die Logik gleich mit error....das deutet meist auf einen Fehler in einem Levelnamen hin.... :think: zumindest mache ich den Fehler sehr häufig.
VG, Sven - TWS 950Q ID:335 & 291, VPN offen, Reboot OK
Antworten

Zurück zu „Zusätzliche Logikbausteine“