Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Blockly
    5. Mehrere Trigger verarbeiten und Wert setzen

    NEWS

    • Wir empfehlen: Node.js 22.x

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker goes Matter ... Matter Adapter in Stable

    Mehrere Trigger verarbeiten und Wert setzen

    This topic has been deleted. Only users with topic management privileges can see it.
    • R
      raspido last edited by

      Hey Leute,

      ich bin schon eine Weile am rumprobieren, doch ich komme zu keinem Ergebnis, was mir gefällt.

      Als erstes fange ich mal damit an, zu erklären, was ich vor habe und dann zeige ich euch mal mein Script, was nicht so läuft wie erwartet.

      Ich habe vor 4 verschiedene Schaltzustände logisch miteinander zu "verknüpfen". Und zwar in der Form, dass ein "gemeinsamer Datenpunkt" auf wahr oder falsch gesetzt wird, je nach Sitution. Sobald einer der 4 Schaltzustände wahr ist, soll der gemeinsame Datenpunkt auf wahr gesetzt werden. Aber erst wenn ALLE 4 Datenpunkte auf falsch sind, soll der gemeinsame Datenpunkt auf falsch gesetzt werden.

      Bei meinem ersten Versuch mit dem Script unten, hat er auf den ersten Datenpunkt reagiert und den gemeinsamen Datenpunkt auf wahr oder falsch gestellt, sobald ich aber Datenpunkt 2 - 4 verstellt habe, passierte nichts. Vielleicht gibt es auch eine "schönere" Möglichkeit das Problem zu lösen als mein Ansatz.

      Hier das Script / Blockly:

      4f113abd-69aa-4df1-97d5-adc3a2be6033-grafik.png

      Und zusätzlich kommt in regelmäßigen Abständen (alle 60 Sekunden) eine "warn" Meldung mit dem Inhalt:

      javascript.0 (2088163) at Object.<anonymous> (script.js.MQTT_Scripte.Bueroueberwachung_Blockly:24:3)
      

      Was kann ich machen um die "Meldung" weg zu bekommen, auch wenn es ja "nur" eine Warnung ist?

      Michael

      PS: Zur Erklärung:

      Die 4 Trigger Objekte sind Schaltzustände von einem Schaltaktor und der Datenpunkt, der gesteuert wird, ist ein true / false Wert, welcher am Ende mittels MQTT an ein ESP Gesendet wird, der entsprechend eine StatusLED ein und aus schaltet. Der Teil mit der LED funktioniert. Also nur zum Hintergrund des ganzen.

      paul53 1 Reply Last reply Reply Quote 0
      • paul53
        paul53 @raspido last edited by paul53

        @raspido sagte: die "Meldung" weg zu bekommen, auch wenn es ja "nur" eine Warnung ist?

        Ist der MQTT-Datenpunkt vom Typ "boolean"?
        Sind Skripte unter der Gruppe "global" aktiv (Expertenmodus)?

        R 1 Reply Last reply Reply Quote 0
        • R
          raspido @paul53 last edited by

          @paul53 Der MQTT-Datenpunkt ist als "Logikwert" definiert. Das Script befindet sich im Root-Verzeichnis, in einem Unterordner. Hier die Struktur:

          a3cfb4e0-fe09-4de1-b82d-610dcd21e5e6-grafik.png

          Also ohne Expertenmodus, ich hatte mal in der Vergangenheit irgendwo gelesen, dass der Expertenmodus nur verwendet werden sollte, wenn es sein muss. Daher nutze ich den sogut wie nie.

          paul53 BananaJoe 2 Replies Last reply Reply Quote 0
          • paul53
            paul53 @raspido last edited by

            @raspido sagte: der Expertenmodus nur verwendet werden sollte, wenn es sein muss.

            Um zu schauen, ob es unter "global" ein aktives Skript gibt, sollte der Expertenmodus mal aktiviert werden. Die Zeilennummer 24 der Fehlermeldung deutet daraufhin, dass dies der Fall kein kann.

            1 Reply Last reply Reply Quote 0
            • BananaJoe
              BananaJoe Most Active @raspido last edited by BananaJoe

              @raspido du kannst oben rechts auch auf den Quellcode umschalten - da kannst du sehen was in Zeile 24 steht (also welcher Befehl genau).

              Zudem würde ein Falls - Wert reichen in deiner Abfrage:
              81da7b9f-b644-4fa5-bed8-318358cab239-image.png da du eh alle per Oder auf True prüfst.

              ok, ist qatsch da die Lampe sonst nicht wieder ausgeht, ok

              paul53 1 Reply Last reply Reply Quote 0
              • paul53
                paul53 @BananaJoe last edited by

                @bananajoe sagte: da kannst du sehen was in Zeile 24 steht

                So umfangreich ist das Skript nicht.

                R 1 Reply Last reply Reply Quote 0
                • R
                  raspido @paul53 last edited by raspido

                  Hey Leute,

                  ich weiß, mein letzter Kontakt hier ist etwas her. Die Arbeit und der Notdienst haben leider nicht wirklich zu gelassen, dass ich mich mit meinem Problem beschäftigen konnte. Ich hoffe, man hilft mir trotzdem dem "Problem" auf die Spur zu kommen.

                  @paul53 genau, soviele Zeilen hat mein Scipt garnicht. Und im Ordner "global" gibt es kein Script mit dem Namen, was ich für das aktuelle Script verwende. Genauer gesagt, sind dort keine Scripte drin.

                  @BananaJoe Das Script selbst soll ja garkein Licht schalten, sondern lediglich darauf reagieren, ob eines der 4 Lichter (oder auch Schaltkanäle) an ist oder eben aus.

                  Daher die etwas "komplizierte" Abfrage in der Logikstruktur.

                  Mein Plan war folgende 2 Wege:

                  Sobald ein oder mehrere "Schaltkanäle" High sind, soll der Datenpunkt "Statusanzeige.Kueche.Licht" auf wahr gesetzt werden. Lediglich sobald ALLE 4 "Schaltkanäle" auf LOW sind, soll dieser Datenpunkt auf falsch gesetzt werden. Das ganze soll als "Statusanzeige" dienen, damit man es merkt, wenn noch ein Licht brennt, ohne gleich in den Raum zu gehen.

                  Ich habe da gerade aber selber nochmal was anderes probiert und wollte euch mein Gedankengang auch mal zu kommen lassen.

                  Hier ein Screenshot vom Blockly:
                  0d88ec22-28d3-4206-ad73-9b17726450d7-grafik.png

                  Und zusätzlich das Blockly als JavaScript Code(die letzte Kommentarzeile habe ich nur weg gelassen, da diese "unendlich" lang war und Kommentar, wird normal ja "ignoriert" beim Code):

                  on({id: [].concat(['hm-rpc.1.00259D89A4E48F.10.STATE']).concat(['hm-rpc.1.00259D89A4E48F.18.STATE']).concat(['hm-rpc.1.00259D89A4E48F.14.STATE']).concat(['hm-rpc.1.00259D89A4E48F.12.STATE']), change: "any"}, async function (obj) {
                      if ((getState("hm-rpc.1.00259D89A4E48F.10.STATE").val || getState("hm-rpc.1.00259D89A4E48F.12.STATE").val || getState("hm-rpc.1.00259D89A4E48F.14.STATE").val || getState("hm-rpc.1.00259D89A4E48F.18.STATE").val) == true) {
                      setState("0_userdata.0.Statusanzeigen.Kueche.Licht"/*Statusanzeigen.Kueche.Licht*/, true);
                    }
                    if ((getState("hm-rpc.1.00259D89A4E48F.10.STATE").val && getState("hm-rpc.1.00259D89A4E48F.12.STATE").val && getState("hm-rpc.1.00259D89A4E48F.14.STATE").val && getState("hm-rpc.1.00259D89A4E48F.18.STATE").val) == false) {
                      setState("0_userdata.0.Statusanzeigen.Kueche.Licht"/*Statusanzeigen.Kueche.Licht*/, false);
                    }
                  });
                  

                  Michael

                  PS: Und die "Warn" Meldung kommt noch immer wie gewohnt

                  paul53 R 2 Replies Last reply Reply Quote 0
                  • paul53
                    paul53 @raspido last edited by paul53

                    @raspido sagte: Und die "Warn" Meldung kommt noch immer wie gewohnt

                    Im Tab "Protokolle" findet man weitere Informationen zur Warnung.

                    Besserer Code:

                    Blockly_temp.JPG

                    1 Reply Last reply Reply Quote 0
                    • R
                      raspido @raspido last edited by

                      @paul53 Den Baustein "setze licht auf", wo finde ich den? Irgendwie habe ich den bislang nicht gefunden. Klar "Licht" ist der Parameter, den ich definieren muss. Aber an sich das Element finde ich auf den ersten Blick nicht.

                      Den mein Skript, was ich oben gepostet habe, funktioniert irgendwie garnicht. Also der Datenpunkt "Statusanzeige.Kueche.Licht" wird niemals verändert. Und zumindest der Logik, der ich versuche etwas an zu nehmen, sollte es theoretisch funktionieren. 😞

                      Michael

                      haus-automatisierung 1 Reply Last reply Reply Quote 0
                      • haus-automatisierung
                        haus-automatisierung Developer Most Active @raspido last edited by

                        @raspido sagte in Mehrere Trigger verarbeiten und Wert setzen:

                        Den Baustein "setze licht auf", wo finde ich den? Irgendwie habe ich den bislang nicht gefunden.

                        Du musst eine neue Variable anlegen. Die nennst du wie Du willst (in diesem Beispiel licht) und findest dann unter Variablen auch den Baustein, um diese Variable zu setzen.

                        R 1 Reply Last reply Reply Quote 0
                        • R
                          raspido @haus-automatisierung last edited by raspido

                          @haus-automatisierung Danke für den Tipp für das mit dem setze licht auf, aber der Logikbaustein oder, den finde ich so auch nicht. Irgendwie irritiert mich das gerade da ein wenig 😵

                          Also mein "oder" sieht so aus:

                          3dddb91c-4f5c-4d79-9ea8-7c4089c777fd-grafik.png

                          Ich habe es hin bekommen und es läuft. DANKE

                          Ich wollte euch nun noch die Hardware zeigen, die zum ganzen Projekt gehört. Ist noch ein Prototyp an Platine, aber Platine wird noch in "richtig" gefährtigt bei JLCPCB, aber vorher muss ich mir noch ein passendes Gehäuse besorgen, damit die Platine dort auch vernünftig rein passt. Platine an sich ist fertig, nun kommt es aufs "Format" an und die Montagelöcher.

                          Einmal das ganze Licht aus und Fenster zu:
                          b34c19e9-30ab-4658-9565-c6d96ae22e76-grafik.png

                          Einmal ein oder mehrere Lichter an und Fenster offen:
                          e7129afd-1d69-41ed-8d21-d2e279e18719-grafik.png

                          Je überwachten Zustand ist eine LED. Okay beim ESP-01 sind ohne Umwege "nur" 2 möglich, aber für das Projekt reicht es so an sich eigentlich aus. Soll ja nur als "kleines Modul" dienen, wenn irgendwo ein "Zustand" nicht ist, wie es sein soll. Kann man ja an sich individuell einsetzen. Sobald dieses Modul mit den dazugehörigen LEDs "richtig" montiert ist, kann ich bei Interesse noch ein Foto machen. Wird aber wenig aufällig sein, da lediglich 2 LEDs mit Klarem Körper in der Holzpaneldecke montiert sind. Also die sollen möglichst wenig auffallen, wenn alles okay ist, so der Plan 😉

                          Hier noch das funktionierende Blockly und zusätzlich das Blockly fürs Fenster:
                          1892c274-946d-441e-bfe9-ebf8ad729c7c-grafik.png

                          e036f159-d620-44ad-8297-b9806207e2e8-grafik.png

                          Ich habe das "Fensterscript" gleich auch mal "optimiert", nachdem Beispiel vom Licht.

                          Falls der Schaltplan für das Board gewünscht wird, kurze Info, kann ich gerne zeigen. Ist ja nichts wildes dran.

                          BananaJoe 1 Reply Last reply Reply Quote 0
                          • BananaJoe
                            BananaJoe Most Active @raspido last edited by

                            @raspido sagte in Mehrere Trigger verarbeiten und Wert setzen:

                            Also mein "oder" sieht so aus:

                            mit der rechten Maustaste anklicken und im Popup-Menü "externe Eingänge" wählen (oder "interne Eingänge").
                            Funktioniert an fast allen Bausteinen

                            1 Reply Last reply Reply Quote 0
                            • R
                              raspido last edited by

                              @bananajoe Habe ich mit etwas üben und "rumspielen" auch raus bekommen. Aber vielen Dank für den Tipp.

                              1 Reply Last reply Reply Quote 0
                              • First post
                                Last post

                              Support us

                              ioBroker
                              Community Adapters
                              Donate

                              880
                              Online

                              32.0k
                              Users

                              80.5k
                              Topics

                              1.3m
                              Posts

                              blockly
                              4
                              13
                              512
                              Loading More Posts
                              • Oldest to Newest
                              • Newest to Oldest
                              • Most Votes
                              Reply
                              • Reply as topic
                              Log in to reply
                              Community
                              Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                              The ioBroker Community 2014-2023
                              logo