Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Codierknecht

    NEWS

    • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?

    • Monatsrückblick – September 2025

    • Neues Video "KI im Smart Home" - ioBroker plus n8n

    • Profile
    • Following 0
    • Followers 11
    • Topics 78
    • Posts 6838
    • Best 1355
    • Groups 5

    Codierknecht

    @Codierknecht

    Developer Most Active

    Senior Softwareentwickler und -architekt.
    Reisen, Fotografie und alles was mit nerdiger Technologie zu tun hat.

    1696
    Reputation
    349
    Profile views
    6838
    Posts
    11
    Followers
    0
    Following
    Joined Last Online
    Location Willich

    Codierknecht Follow
    Erbsenzähler Developer Pro Starter Most Active

    Best posts made by Codierknecht

    • "Blockly for dummies" ... Starthilfe und Tipps

      Bitte hier nicht antworten
      Dieser Thread soll den blutigen Anfängern in Sachen Blockly ein wenig Starthilfe bieten und helfen, die ersten Hürden zu meistern und die häufigsten Fallstricke zu vermeiden.
      Fragen/Anmerkungen/Änderungen/Ergänzugen bitte ausschließlich hier!

      Dokumentation
      Du bist neu bei Blockly?
      Dann mach Dir die Mühe und schau Dir die Doku an, bevor Du im Forum einen neuen Beitrag eröffnest.
      Die Erfahrung zeigt, dass immer wieder die gleichen "Probleme" behandelt werden.
      https://www.iobroker.net/#de/documentation/logic/blockly.md

      Versuch macht klug
      Es hilft wenig, im Forum nach Hilfe (selbst gegen Bezahlung) für einen speziellen Anwendungsfall zu fragen, ohne dass Du es selbst nicht zumindest versucht hast. Das Forum bietet an der Ecke primär "Hilfe zur Selbsthilfe".
      Wenn Du nicht weiter kommst, kannst Du gerne im Forum nach Hilfestellung fragen. Liefere auf jeden Fall einen aussagekräftigen Screenshot Deines Versuchs mit.
      Bei umfangreichen Scripten kannst Du auch den XML-Export mitliefern. Dann aber bitte in Code-Tags </> gesetzt und idealerweise noch hinter einem Spoiler verborgen.

      Script starten/stoppen/pausieren
      Ein Blockly-Script wird in ioBroker (genau wie ein reines JavaScript) grundsätzlich zunächst erstellt und dann auch gestartet. Danach läuft es dauerhaft und wird (außer in sehr seltenen Ausnahmefällen) nicht gestoppt oder neu gestartet.
      83fbc941-22c0-4a26-a630-daed58a42ae5-image.png
      ACHTUNG: Scripte - egal welcher Art - gehören nur in sehr seltenen Ausnahmefällen in den Ordner "global". Du solltest Dir eine sinnvolle Ordnerstruktur - im Normalfall unterhalb von "common" - ausdenken.

      Namensgebung:
      Die Namen von Scripten sollten keine Leer- oder gar Sonderzeichen enthalten. Das gilt insbesondere für Umlaute.
      Statt einem Leerzeichen solltest Du einen Binde- oder Unterstrich verwenden.
      Diese Regel gilt grundsätzlich auch für Datenpunkte und Variablen!
      Wobei man bei Variablen auch auf den Bindestrich verzichten sollte. Der wird zwar intern in einen Unterstrich gewandelt, aber wenn man später mal in JS programmiert, erzeugt man sich schnell eine Subtraktion.

      Trigger und Zeitpläne
      Alles was auf Ereignisse reagieren bzw. zu bestimmten Zeiten oder zyklisch ablaufen soll, benötigt einen "Trigger" oder "Zeitplan".
      c9ac37b2-90e0-475d-8955-78677fc74a10-image.png
      ACHTUNG: Was außerhalb dieser Blöcke platziert wird, wird genau 1x - beim Start des Script - ausgeführt.
      Mehr dazu hier

      Werte auslesen
      Werte aus Datenpunkten werden (in den meisten Fällen) mit diesem Baustein gelesen:
      346e989c-ec7c-406d-b86c-3ed7af79880c-image.png
      ACHTUNG:
      Wenn der Wert desjenigen DP benötigt wird, der mit dem Trigger überwacht wird, muss der Wert nicht mit dem "Wert von" Baustein gelesen werden.
      Stattdessen verwendest Du diesen Baustein:
      bc7c17d7-bf62-4ec0-a87e-cfa5aab5a43c-grafik.png
      Wenn der Trigger ausgelöst wurde, sind (so ziemlich) alle Eigenschaften des betroffenen DP bereits bekannt.
      Hier nochmal zu lesen ist unnötig und kann zu Fehlern führen.

      ACHTUNG:
      Das hier ist etwas völlig anderes und liefert das komplette Objekt - also den ganzen DP und nicht nur seinen Wert:
      6575a359-2128-4928-8f78-3d513dd0c3b8-image.png

      Mehr dazu hier

      Werte schreiben (Datenpunkte ändern)
      Grundsätzlich gibt es zwei unterschiedliche Wege, einen Wert in einen DP zu schreiben.
      c8e49077-1738-41ab-8aa0-4f024248b67e-image.png
      Steuere
      Dieser Baustein wird für alle DP verwendet, die einem Adapter "gehören". Das gilt auch für Alias-Datenpunkte, die auf einen Adapter-DP zeigen.
      Aktualisiere
      Verwende diesen Baustein nur für eigene DP, die Du unterhalb von 0_userdata.0 selbst angelegt hast.

      Mehr dazu hier

      Variablen
      Variablen dienen dazu, ermittelte oder berechnete Werte für die weitere Verarbeitung vorzuhalten.
      Variablen werden manuell erstellt und sind im gesamten Script gültig.
      f5616d29-ada0-40d8-aeda-d7543ecdc736-image.png
      Variablen sollten überall dort eingesetzt werden, wo ansonsten der Wert aus einem DP mehrfach ausgelesen werden müsste.
      Auch die Les- und Wartbarkeit eines Scriptes lässt sich durch die Verwendung von Variablen deutlich verbessern.
      Insbesondere komplexe Prüfungen werden durch Variablen deutlich besser lesbar und damit verständlicher.

      Mehr dazu hier

      ... to be continued

      posted in Blockly
      Codierknecht
      Codierknecht
    • RE: "Blockly for dummies" ... Starthilfe und Tipps

      Listen

      Hier mal ein halbwegs sinnvolles "real life" Beispiel, was man z.B. mit Listen anstellen kann:

      decc32ad-4229-4acb-ab78-85ebe1d73e15-image.png
      Hier wird eine Liste dazu verwendet, die Tagesmitteltemperatur zu ermitteln.

      Zunächst wird beim Start des Scriptes eine leere Liste erzeugt.

      Der Zeitplan sorgt nun dafür, dass jede Minute die Temperatur aus einem Datenpunkt gelesen und am Anfang der Liste eingefügt wird.
      Das "vorne anfügen" hat den Vorteil, dass Änderungen auch im Objektbaum ersichtlich sind.
      Der ermittelte Mittelwert wird hier nur ausgegeben. Wie man das in einen DP schreibt, ist hier beschrieben.

      Am Ende wird per Zeitplan um 23:59:30 Uhr die Liste wieder geleert, damit am nächsten Tag wieder mit komplett neuen Werten gerechnet werden kann.

      Das Ganze stellt hier nur ganz rudimentär das grundsätzliche Verhalten dar.
      Man kann das je nach den Anforderungen noch abwandeln/ergänzen:

      • Man arbeitet nicht zyklisch per Zeitplan, sondern triggert auf das Temperatur-Objekt
        073541b0-29d4-4132-b4c0-e3961fe8b937-image.png
      • Man arbeitet mit einer festen Anzahl an Werten. Wurde die erreicht, wird die Liste geleert
        aee1cbe5-0c60-4580-b337-271cee9d6c95-image.png

      Hier ins Detail zu gehen, würde eindeutig zu weit gehen.
      Bei besonderen Anforderungen wird Dir sicher im Forum weitergeholfen.

      posted in Blockly
      Codierknecht
      Codierknecht
    • RE: ioBroker Community-Treffen - Vielen Dank

      @David-G

      Dem möchte ich mich gerne anschließen.
      Es war schön, den einen oder anderen Protagonisten auch mal persönlich kennenzulernen.

      Auch dass viele Teilnehmer z.T. sehr lange Anfahrtswege auf sich genommen haben, spricht glaube ich für das Produkt an sich und für diese Community.
      Ich glaube, spätestens bei der abschließenden Fragerunde wurde klar: ioBroker wird für und durch die Community entwickelt. Jeder hat seinen kleinen Anteil daran ... und sei er noch so winzig.
      Also lasst uns das Ganze weiter vorantreiben ... Aufgaben gibt es genug. Nicht nur für das Core-Team und die Adapter-Entwickler, sondern auch für die vielen Tester und hoffentlich viele neue Beitragende zu Doku und anderen Themen.

      Auch von mir vielen Dank an das Team rund um ioBroker und Solingen-Digital für eine rundum gelungene Veranstaltung.

      posted in ioBroker Allgemein
      Codierknecht
      Codierknecht
    • RE: "Blockly for dummies" ... Starthilfe und Tipps

      Berechnungen ohne Blockly: Aliase

      Nicht selten kann man sich viel Programmiererei sparen, wenn man stattdessen Aliase verwendet.
      Damit werden vorhandene Datenpunkte quasi "gespiegelt" und unterhalb von alias.0 im Objektbaum angelegt.
      Die Struktur denkt man sich - wie auch in 0_userdata.0 - selbst aus.

      Der entscheidende Punkt um sich ein Blockly zu sparen: Man kann im Alias auch eine "Konvertierungsfunktion" angeben. Mit dieser wird dann der ursprüngliche Wert (meist von einem Adapter geliefert) mehr oder weniger umgewandelt.

      Alias anlegen
      Hier führen zwei Wege zum Ziel:

      1. Anlegen "von Hand"
        Hier wird - wie auch in 0_userdata.0 - der DP (und vorher ggf. die Ordnerstruktur) im Objektbaum angelegt.
        a065dbcd-b9f7-400e-bec8-8b09c05dcc6d-grafik.png

      2. Noch viel einfacher geht's, indem man mit der rechten Maustaste auf den "Original"-DP klickt und dort "Alias erstellen" wählt.
        0aec3593-9b84-48fc-a76c-67c01a83c505-grafik.png

      Im weiteren Verlauf wird Methode 2) beschrieben. Methode 1) funktioniert prinzipiell analog.

      06dae673-95a8-4bf3-82da-37554088ad0a-grafik.png

      • In "ID" wird die Objekt-ID unterhalb von alias.0 festgelegt. Hier kann (durch Punkte getrennt) auch eine sinnvolle Struktur und eine passende ID für den DP vergeben werden. Die resultierende ID wird dann oben gezeigt.
      • In "Beschreibung" kann ein erklärender Text vergeben werden.
      • In "Typ" wird der Typ (Zahl, Zeichenkette, Logikwert usw.) des Ziel-DP festgelegt.
        Der muss nicht zwingend mit dem Typ des Original DP übereinstimmen und hängt von der Konvertierung ab.
      • "Einheit" gibt eine Bezeichnung für die Einheit (m², °C, km/h) mit, die im Objektbaum mit angezeigt wird.
        Die Einheit wird nur im Baum angezeigt und ist nicht Teil des Wertes!
      • In der "Konvertierung" kann bei Bedarf der Eingangswert (mehr oder weniger umfangreich) umgerechnet werden.
        Dabei steckt in der Variablen val immer der Eingangswert aus dem Original-DP.

      Konvertierungsfunktionen
      In der Konvertierung können übliche Berechnungen per JavaScript vorgenommen werden.
      Das ist der Punkt, an dem man sich nicht selten ein komplettes Blockly sparen kann.

      Hier mal eine (unvollständige) Liste mit oft verwendeten Konvertierungen:

      1. Wert aus JSON extrahieren
        JSON.parse(val).energy.power
        JSON.parse(val).months[12].name
      2. Impulse in m³ umrechnen (Gas- oder Wasserzähler)
        val * 0.01
      3. Windgeschwindigkeit von m/s in km/h umrechnen
        val * 60 * 60 / 1000 oder auch val * 3.6
      4. Gleitkommazahlen mit fester Anzahl Nachkommastellen
        Math.trunc(val * 100) / 100 (2 Stellen)
      5. Byte in Gigabyte
        val / 1024 / 1024 / 1024
      6. °C in °F
        val * 9 / 5 + 32

      Auf die gleiche Art können bei beschreibbaren Datenpunkten die umgewandelten Werte wieder in die Form verwandelt werden, die der Adapter erwartet. val repräsentiert hier den zuvor umgerechneten Wert, der im Alias steckt.
      Beispiele:

      1. km/h wieder in m/s umrechnen
        val / 60 / 60 * 1000 oder val / 3.6
      2. Knoten in km/h
        val * 1.852
      3. °F in °C
        (val - 32) * 5 / 9

      Es macht in der Regel keinen Sinn, nur die Schreibkonvertierung zu verwenden. Wenn beim Schreiben konvertiert wird, sollte der Wert vorher auch beim Lesen konvertiert werden.

      .. to be continued

      posted in Blockly
      Codierknecht
      Codierknecht
    • RE: 50€: Mach mit bei einer Smarthome Studie mit ioBroker!

      @kisshome sagte in 50€: Mach mit bei einer Smarthome Studie mit ioBroker!:

      Mindestens 3 Smart Home-Geräte, die die Cloud nutzen

      Tja - genau darum verwende ich ioBroker. Nix Cloud, alles lokal 😁

      posted in ioBroker Allgemein
      Codierknecht
      Codierknecht
    • RE: Host-Adapter Anzeige für Betriebssystemupdates

      @sissiwup sagte in Host-Adapter Anzeige für Betriebssystemupdates:

      diese Funktion hat hier aber nix zu suchen

      Eine reichlich subjektive Einschätzung

      sollte zumindest abschaltbar sein

      Geht doch.
      Entweder "Bestätigen und schließen", Updates installieren oder über den Notification-Adapter ausschalten.

      Meldungen zu Sachen, die ioBroker nix angehen

      Auch wieder recht subjektiv.
      Eine ganze Reihe anderer sind - so wie ich - durchaus der Meinung, dass ein ioBroker sich um seinen Unterbau kümmern darf. Und wenn man hier ständig die von @Thomas-Braun benannten Hilferufe aufgrund völlig versumpfter Basissysteme sieht, ist das bei vielen Anwendern auch bitter nötig.

      posted in Einsteigerfragen
      Codierknecht
      Codierknecht
    • RE: "Blockly for dummies" ... Starthilfe und Tipps

      Grundsätzliches
      Insbesondere wer von der prozeduralen Programmierung oder einer SPS zu Blockly kommt, muss sich hier neu orientieren und umdenken.
      Im ioBroker werden Programme nicht bei Zeile 1 gestartet und laufen dann bis Zeile xyz nacheinander ab.
      In der Regel "reagieren" Programme (Scripte) nur auf äußere Einflüsse und werden aktiv, wenn ein bestimmtes Ereignis eintritt. Das kann die Änderung eines Datenpunktes oder auch das Erreichen eines bestimmten Zeitpunktes sein.
      Die meiste Zeit "schlafen" die Programme ... solange, bis eines der genannten Ereignisse eintritt.

      Trigger
      Ein Trigger ist eine Ereignisbehandlung. Das kann man sich als eine Art Abonnement vorstellen.
      Tritt das Ereignis ein, wird der Code im Trigger ausgeführt.

      • Will man bei bool'schen Datenpunkten (true/false) nur reagieren, wenn der DP auf true wechselt, verwendet man am besten "ist größer als Letztes".
        Analog dazu lässt sich der Wechsel auf false mit "ist kleiner als Letztes" verarbeiten.
        Hintergrund: Ein true wird intern als 1 und ein false intern als 0 verarbeitet.

      • Echte "Änderungen" am DP prüft man mit "wurde geändert". Datenpunkte werden von den Adaptern gerne mal zyklisch "aufgefrischt". Eine Prüfung auf "wurde aktualisiert" würde dann viel zu häufig den Trigger auslösen.

      Hier ein ganz einfaches Beispiel: Ändert sich der Zustand eines Schalters "SwitchState", wird die Lampe "Licht" mit dem Wert des Schalters (an oder aus) geschaltet.
      Was es mit dem Baustein "Wert" auf sich hat, wird hier erläutert.
      0f43a4de-3c25-4516-8903-7fc3af448ea9-image.png

      ACHTUNG:
      Niemals mehrere Trigger (oder Zeitpläne oder eine Kombination daraus) ineinander verschachteln. Sowas hier funktioniert nicht:

      541d21b1-d16d-4b1a-b08f-f9e926fc90fb-image.png

      Zeitpläne
      Mit einem Zeitplan kann man Dinge zu bestimmten Zeiten oder auch zyklisch alle x-Minuten ausführen lassen.

      • Vermeide den "Wizard", sondern verwende nach Möglichkeit CRON.
        Mit dem Wizard produzierte Zeitpläne funktionieren häufig nicht - zumindest nicht wie gewünscht

      • Vermeide zyklisch Ausführungen alle x-Minuten, wenn die gleiche Aufgabe auch mit einem Trigger ausgeführt werden kann.
        Man muss nicht alle paar Minuten prüfen, ob ein Datenpunkt einen bestimmten Wert angenommen hat. Das belastet das System. Besser ist es, einen Trigger auf den DP zu setzen.

      In diesem einfachen Beispiel wird eine Lampe täglich um 20:00 Uhr eingeschaltet.
      c970b559-26f7-48f1-8243-85843591876f-image.png

      Alles was außerhalb von Triggern oder Zeitplänen hinzugefügt wird, wird nur 1x - beim Start des Scriptes - ausgeführt.
      Damit lassen sich z.B, verwendete Variablen beim Start des Scriptes auf einen definierten Wert setzen.
      Dabei ist es unerheblich, ob der Baustein losgelöst von allen anderen "in der Luft schwebt" oder ob er z.B. oben (oder unten) an einen anderen Baustein angepinnt wird.

      26864d01-e426-49a8-a386-39319fe97cec-image.png

      ACHTUNG: Ein in Blockly erzeugter Zeitplan wird nur 1x beim Start des Scriptes aktiviert.
      Wenn man "variable" Zeitpläne benötigt, die sich z.B. bei Änderungen an einem Datenpunkt ändern sollen, muss man etwas mehr Aufwand treiben.
      Im einfachsten Fall verwendet man einen "Zeitplan aus Zeit-Zustand" Den setzt man auf einen Datenpunkt vom Typ "String (Text)". Ändert man den Inhalt des DP, ändert sich automatisch auch der Zeitplan. Ohne weiteres Zutun.
      01aefdf2-49f8-4b6d-a9d1-b74572414af3-image.png
      Mehr würde allerdings an dieser Stelle zu weit führen. Wenn Du so etwas benötigst, schau in die Doku.

      posted in Blockly
      Codierknecht
      Codierknecht
    • RE: "Blockly for dummies" ... Starthilfe und Tipps

      Werte schreiben (Datenpunkte ändern)
      Um den Wert eines Datenpunktes zu ändern und damit z.B. ein Gerät einzuschalten, stehen grundsätzlich zwei (relativ ähnliche) Bausteine zur Verfügung.

      88d1c85c-de6b-4aef-bd28-98d5ce275aea-image.png

      Steuere
      Diesen Baustein verwendet man, um Datenpunkte zu verändern die einem Adapter "gehören", um z.B. eine Lampe oder einen Schalter zu schalten.
      Im Detail wird damit eine Änderung "ohne Bestätigung" (Ackknowledge) geschrieben. Diese fehlende Bestätigung ist für den Adapter die Veranlassung, etwas zu tun.
      Die allermeisten Adapter reagieren nicht, wenn hier eine Änderung per "Aktualisiere" (mit Bestätigung) geschrieben wird.
      Das gilt im Übrigen auch für Alias-Datenpunkte, die auf den "echten" DP eines Adapters verweisen.

      Aktualisiere
      Dieser Baustein wird zur Änderung eigener Datenpunkte verwendet, die Du unterhalb von 0_userdata.0 selbst angelegt hast.
      Hierbei wird "mit Bestätigung" geschrieben. Damit wird verhindert, dass der Wert im Objektbaum in rot dargestellt wird. In den meisten Fällen also eine lediglich kosmetische Sache.

      posted in Blockly
      Codierknecht
      Codierknecht
    • RE: "Blockly for dummies" ... Starthilfe und Tipps

      Falls / mache / sonst
      In den allermeisten Scripten muss zur Laufzeit mindestens eine Bedingung geprüft werden.
      Dabei wird oft nicht nur eine, sondern ggf. mehrere Bedingungen geprüft.

      cdf2362b-f424-40fd-a98e-fe09bcdebf27-image.png

      Tipp 1
      Wenn mehrere Bedingungen geprüft werden müssen, wird das Ganze oft übersichtlicher wenn man die Ansicht auf "externe Eingänge" umstellt:
      83e071e7-169d-4f11-a9dc-6c8fc3af2ec1-image.png 1da8653f-3cf6-4a2a-9f87-77eaf2a79311-image.png

      Tipp 2
      Kleiner Ausflug in bool'sche Algebra:
      Wenn eine Bedingung mit "falls" geprüft wird, muss der zu prüfende Ausdruck entweder "wahr" oder "falsch" werden. Heißt auf Deutsch: " Ist der Wert von "power" jetzt gößer als 500? Ja oder Nein?

      Das gleiche gilt hier aber auch für den zweiten Ausdruck: Ist "istEingeschaltet" jetzt "wahr" oder "falsch"?
      Der Punkt ist: "istEingeschaltet" ist ja bereits ein Wert, der entweder nur "wahr" oder "falsch" sein kann (Boolean). Das lässt sich jetzt also folgendermaßen vereinfachen:

      55941b92-c93c-41a2-8246-4ab6147aeb3b-image.png
      Falls auf falsch geprüft werden soll, ist dieser Ansatz hier der bessere:
      c604ff3d-08c4-4cb7-8e0d-2ce21af44f10-image.png
      Zum Einen benötigt man hier nur 2 statt 3 Bausteine und zum Anderen wird mit einem "nicht" der Code minimal schneller ausgeführt.

      Tipp 3
      Verschachtelte Ausdrücke werden schnell unübersichtlich.

      0a5c2973-813f-4723-846b-6a2b7c0c2d11-image.png
      Hier hilft es oft, wenn man einzelne Teilausdrücke vorher einer Variablen zuweist.

      6091e2a6-624a-4bd5-b8ef-105fd6e8c13a-image.png
      Wie bereits erwähnt: Code wird häufiger gelesen als geschrieben.
      Es erleichtert die Fehlersuche und die spätere Wartung, wenn Code gut lesbar ist.

      Tipp 4
      Es ist in den allermeisten Fällen nicht nötig, mehrere Prüfungen mit einzelnen "Falls"-Bausteinen auszuführen.
      Viel einfacher ist eine Logik nach dem Motto " Falls x" => "mache etwas" => "sonst" => ... mache etwas anderes.
      Dazu klickst Du auf das kleine blaue Zahnrad und ziehst den gewünschten Block nach rechts unter das "falls".
      3e6c4e64-2cc5-4d63-9944-c333147b8c67-image.png

      Tipp 5
      Noch komplexere Prüfungen? Dann ist vielleicht der folgende Baustein der richtige:
      d1037ead-630a-4ebd-9005-9148f739c7f7-image.png
      Das ist schneller und erspart einiges an "Puzzelei".

      Aber Achtung: Der Wert eines DP muss zunächst einer Variablen zugewiesen werden. Die Prüfung funktioniert nicht direkt mit dem "Wert vom Objekt"-Baustein!

      Und unbedingt darauf achten, dass hinter jedem "Im Falle von" ein Wert steht. Hier stehen keine logischen Ausdrücke!

      posted in Blockly
      Codierknecht
      Codierknecht
    • RE: "Blockly for dummies" ... Starthilfe und Tipps

      Verzögerungen (Timeouts)
      Der Klassiker unter den Anforderungen in Richtung "timeout" ist der berühmte Bewegungsmelder, der bei erkannter Bewegung eine Lampe ein- und nach Ablauf einer gewissen Zeit ohne Bewegung wieder ausschalten soll.

      71872411-fb02-493a-9903-9ba1c31a5635-image.png
      Auch wenn es zunächst einfach und verlockend aussieht: Die Option "mit Verzögerung" funktioniert häufig nicht bzw. nicht so wie erwartet.

      Als Alternative kann (und sollte) stattdessen ein "timeout" verwendet werden.

      19794719-662a-4fc2-a165-98f76036d450-image.png
      Hier hat man deutlich mehr Kontrolle über den Ablauf.
      Zu beachten ist hier der Block "stop timeout". Der sorgt dafür, dass eine einmal angestoßene Verzögerung zum Ausschalten wieder abgebrochen wird, falls sich der Wert des Objektes (Bewegungsmelder) erneut ändert.

      Im Beispiel passiert folgendes:

      • Wird irgendwann erkannt, dass keine Bewegung im Erfassungsbereich mehr stattfindet, startet der Timeout. Der soll nach 10 Sekunden eine Lampe ausschalten.
      • Sollte innerhalb der Zeitspanne erneut eine Bewegung erkannt werden, wird der Timeout gestoppt.
      • Sobald dann wieder keine Bewegung stattfindet, startet der Timeout erneut.
        Ändert sich der Zustand (keine Bewegung) nun 10 Sekunden lang nicht mehr, wird die Lampe tatsächlich ausgeschaltet.

      Da diese Anforderung im Forum recht häufig nachgefragt wird, gibt es dieses Blockly hier ausnahmsweise auch als Vorlage:

      <xml xmlns="https://developers.google.com/blockly/xml">
       <variables>
         <variable type="timeout" id="timeout">timeout</variable>
       </variables>
       <block type="on" id=":8z:j#EtCHumq|0zP3ur" x="62" y="162">
         <field name="OID">ID auswählen</field>
         <field name="CONDITION">ne</field>
         <field name="ACK_CONDITION"></field>
         <statement name="STATEMENT">
           <block type="timeouts_cleartimeout" id="#ncMQn8c^$d4d:;hdT|U">
             <field name="NAME">timeout</field>
             <next>
               <block type="controls_if" id="2eHpM$}U9iw%;iZT{ycO">
                 <value name="IF0">
                   <block type="logic_negate" id="nhHNSc=WeM/n7ZYh4FC]">
                     <value name="BOOL">
                       <block type="on_source" id="YwOprx|.Lx6;}C,O!ekF">
                         <field name="ATTR">state.val</field>
                       </block>
                     </value>
                   </block>
                 </value>
                 <statement name="DO0">
                   <block type="timeouts_settimeout" id="Xc,`P9(!nMn5xvMs9)!0">
                     <field name="NAME">timeout</field>
                     <field name="DELAY">10</field>
                     <field name="UNIT">sec</field>
                     <statement name="STATEMENT">
                       <block type="control" id=";t$xX#ZhJrENHq?Z:f}a">
                         <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation>
                         <field name="OID">ID auswählen</field>
                         <field name="WITH_DELAY">FALSE</field>
                         <value name="VALUE">
                           <block type="logic_boolean" id="[+*(OH`@QFCC7L.%PH63">
                             <field name="BOOL">FALSE</field>
                           </block>
                         </value>
                       </block>
                     </statement>
                   </block>
                 </statement>
               </block>
             </next>
           </block>
         </statement>
       </block>
      </xml>
      

      posted in Blockly
      Codierknecht
      Codierknecht

    Latest posts made by Codierknecht

    • RE: Benötige Hilfe / Blockly Skript WLED Garagentor Beleuchtung

      @13patrick37 sagte in Benötige Hilfe / Blockly Skript WLED Garagentor Beleuchtung:

      Die Helligkeit oben triggern macht auch nicht wirklich SInn, oder? (Illuminance)

      Nicht wirklich. Du reagierst ja nirgends darauf. Dann kann das eigentlich auch weg.

      posted in Blockly
      Codierknecht
      Codierknecht
    • RE: Benötige Hilfe / Blockly Skript WLED Garagentor Beleuchtung

      @13patrick37 sagte in Benötige Hilfe / Blockly Skript WLED Garagentor Beleuchtung:

      Ist die Frage, ob ich im unteren Bereich dann ein Sonst falls? Ich stehe auf dem Schlauch, wie er sonst den Wert nehmen soll?

      SonstFalls oben und nicht unten

      Das müsste aber durch das globale "sonst" unten bereits abgedeckt sein.

      posted in Blockly
      Codierknecht
      Codierknecht
    • RE: [gelöst] - Zabbix (FritzBox etc.)

      @schittl sagte in [gelöst] - Zabbix (FritzBox etc.):

      bekommt man alle x-Sekunden eine Nachricht

      Das dürfte an Deiner Einstellung "Bei Anmeldungen von Apps ..." liegen.
      Es wird ja - je nach eingestelltem Intervall der Items - immer wieder eine Anmeldung an der Fritte durchgeführt.

      posted in Off Topic
      Codierknecht
      Codierknecht
    • RE: Benötige Hilfe / Blockly Skript WLED Garagentor Beleuchtung

      @13patrick37 sagte in Benötige Hilfe / Blockly Skript WLED Garagentor Beleuchtung:

      einen neuen Trigger erstellen

      Du brauchst keinen neuen Trigger. Es gibt ja nur die beiden Endschalter ... und deren Status wir zu Beginn ermittelt.
      Du muss im "falls" lediglich auf die passenden Werte der beiden Endschalter reagieren.
      Wann ist denn "zu"? Wenn ES unten geschlossen und ES oben offen?

      posted in Blockly
      Codierknecht
      Codierknecht
    • RE: Hilfe bei Blockly

      @tiobb sagte in Hilfe bei Blockly:

      Im Moment schalte ich den trigger an, die Lampe blinkt auch braf 30 Sekunden, ist sogar ausgegangen, aber der trigger bleibt auf "true", und wenn ich den auf "false" setze, geht die Lampe wieder an

      Hast Du den Trigger möglicherweise auf "wurde aktualisiert" eingestellt?
      Richtig wäre "wurde geändert".

      posted in Blockly
      Codierknecht
      Codierknecht
    • RE: javascript.0 bricht ab

      @digi-bit sagte in javascript.0 bricht ab:

      die ins Nevada geführt hat

      <besserwissermode>
      Das Ding heißt "Nirvana" 😁
      </besserwissermode>

      posted in Skripten / Logik
      Codierknecht
      Codierknecht
    • RE: Benachrichtigung aufs Smartphone, evt. mit Rückkanal

      @bigchris sagte in Benachrichtigung aufs Smartphone, evt. mit Rückkanal:

      was ihr so nutz um Euch Nachrichten aufs Smartphone zu schicken

      Pushover. Das funktioniert sehr stabil.

      Ist aber - wie Du bereits erkannt hast - eine Einbahnstraße.
      Zum steuern öffne ich einen VPN-Tunnel und bediene das Ganze dann über die Vis.

      Eine andere Alternative - die ich ebenfalls nutze - wäre Homekit. Das bedingt aber Apple-Hardware (iPhone) + eine passende Zentrale (Apple TV, Homepod).

      posted in ioBroker Allgemein
      Codierknecht
      Codierknecht
    • RE: javascript.0 bricht ab

      @oliverio sagte in javascript.0 bricht ab:

      oder falsch programmierte event oder timer handler

      Ja - z.B. der Kandidat #1: Trigger in Trigger

      posted in Skripten / Logik
      Codierknecht
      Codierknecht
    • RE: IOB auf Trixie - INFO & Luxtronik2.0 funktionieren nicht

      @herrfrodo sagte in IOB auf Trixie - INFO & Luxtronik2.0 funktionieren nicht:

      Die Instanz "Info"

      Das Ding ist abgekündigt und kann gelöscht werden.

      https://forum.iobroker.net/topic/72367/deprecated-abkündigung-adapter-iobroker-info

      posted in ioBroker Allgemein
      Codierknecht
      Codierknecht
    • RE: [gelöst]: Neue Firmware mit niedrigerer Versionsnummer?

      @mcu sagte in HmIP: Neue Firmware mit niedrigerer Versionsnummer?:

      Läuft dein System? Bleib auf 3.0.36.

      Tut es. War auch eher 'ne Verständnisfrage.

      posted in ioBroker Allgemein
      Codierknecht
      Codierknecht
    Community
    Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
    The ioBroker Community 2014-2023
    logo