Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Skript (Zisternenfüllstandsanzeige) funzt nicht..

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Skript (Zisternenfüllstandsanzeige) funzt nicht..

    This topic has been deleted. Only users with topic management privileges can see it.
    • D
      Det-le last edited by Homoran

      Hallo zusammen,
      ich bin recht unerfahren mit Skripten und Blockly. Habe zwar schon ein paar Blocklys zusammengebaut, komme aber mit dem derzeitigen Problem nicht weiter (Suche hat auch nicht ergeben).
      Ich habe mir eine Zisternenfüllstandsanzeige gekauft (Zisternensteuerung.de) mit einer Auswertung auf ein Hutschienenmodul, von dort per Funk weiter an die CCU3. Auswertung im Hutschienenmodul funktioniert, Funkmodul in der CCU3 angelernt, zeigt auch die Füllstände im Gerätestatus an den Kanälen 5-8 richtig an (als Einzelbit). Nur das Skript zur Berechnung des Pegels in % aus den Einzelbits mit ihren Dezimalwerten und der Summation funktioniert nicht.
      af9b4f2d-3752-4a8f-8884-3880a7c15d43-image.png
      bcc49729-cdfb-4333-8fac-3b331e3b7841-image.png

      Hier das Skript:

      !2020 copyright tne-systeme UG (haftungsbeschraenk) und Uwe Voigt 
      
      !Definitionen 
      object BCD_D = datapoints.Get("HmIP-MOD-RC8 001460C9ABA6A1:5.STATE"); object BCD_C = datapoints.Get("HmIP-MOD-RC8 001460C9ABA6A1:6.STATE"); object BCD_B = datapoints.Get("HmIP-MOD-RC8 001460C9ABA6A1:7.STATE"); object BCD_A = datapoints.Get("HmIP-MOD-RC8 001460C9ABA6A1:8.STATE"); object Level =dom.GetObject('ZisternePegel_Prozent'); object Fehler =dom.GetObject('Zisterne_Fehler'); object Ueberlauf =dom.GetObject('Zisterne_Ueberlauf'); object Aus =dom.GetObject('Zisterne_Aus'); object noPegel =dom.GetObject('Zisterne_keinPegel');  
      
      !Füllstanddecodierung
       if ((BCD_D.Value()) && (BCD_C.Value()) && (BCD_B.Value()) && (BCD_A.Value())) {Level.State(0);} if ((!BCD_D.Value()) && (!BCD_C.Value()) && (!BCD_B.Value()) && (!BCD_A.Value())) {Level.State(0);} if ((!BCD_D.Value()) && (!BCD_C.Value()) && (BCD_B.Value()) && (!BCD_A.Value())) {Level.State(0);} if ((BCD_D.Value()) && (BCD_C.Value()) && (BCD_B.Value()) && (!BCD_A.Value()))  {Level.State(10);} if ((BCD_D.Value()) && (BCD_C.Value()) && (!BCD_B.Value()) && (BCD_A.Value())) {Level.State(20);} if ((BCD_D.Value()) && (BCD_C.Value()) && (!BCD_B.Value()) && (!BCD_A.Value()))  {Level.State(30);} if ((BCD_D.Value()) && (!BCD_C.Value()) && (BCD_B.Value()) && (BCD_A.Value())) {Level.State(40);} if ((BCD_D.Value()) && (!BCD_C.Value()) && (BCD_B.Value()) && (!BCD_A.Value()))  {Level.State(50);} if ((BCD_D.Value()) && (!BCD_C.Value()) && (!BCD_B.Value()) && (BCD_A.Value())) {Level.State(60);} if ((BCD_D.Value()) && (!BCD_C.Value()) && (!BCD_B.Value()) && (!BCD_A.Value()))  {Level.State(70);} if ((!BCD_D.Value()) && (BCD_C.Value()) && (BCD_B.Value()) && (BCD_A.Value())) {Level.State(80);} if ((!BCD_D.Value()) && (BCD_C.Value()) && (BCD_B.Value()) && (!BCD_A.Value()))  {Level.State(90);} if ((!BCD_D.Value()) && (BCD_C.Value()) && (!BCD_B.Value()) && (BCD_A.Value())) {Level.State(100);}
      
      !Fehlerdecodierung 
      Fehler.State( (!BCD_D.Value()) &&  (!BCD_C.Value()) && (!BCD_B.Value()) && (BCD_A.Value())); Ueberlauf.State( (!BCD_D.Value()) && (BCD_C.Value()) && (!BCD_B.Value()) && (!BCD_A.Value())); Aus.State( (!BCD_D.Value()) && (!BCD_C.Value())&& (!BCD_B.Value()) && (!BCD_A.Value())); noPegel.State( (!BCD_D.Value()) &&  (!BCD_C.Value()) && (BCD_B.Value()) && (!BCD_A.Value())); 
      

      MOD-EDIT: Code in code-tags gesetzt!

      Kann einer von euch sehen wo der Fehler liegt? Weitere Frage, wie kann man dieses Skript in den ioBroker (als Blockly?) übernehmen und dort direkt die Daten auswerten zur Anzeige im VIS (einfach neues Skipt aufmachen und reinkopieren gibt bei mir ne Fehlermeldung)?
      Der Verkäufer ist gewillt das Problem zu lösen, hat aber gerade nicht die Homematik Bauteile vorrätig um zu testen...und ich bin ungeduldig:-)

      Danke euch Det

      1 Reply Last reply Reply Quote 0
      • geschild
        geschild last edited by geschild

        @det-le Als erstes fehlt in dem Script ein 'Trigger*, der erkennt ob sich einer der Werte a,b,c,d ändert.

        Ich habe dein script mal in eine übersichtliche Form gebracht und die Binärwerte in Zahlenwerten dargestellt.
        Signallogik.txt
        Im user.0 habe ich die boolean Datenpunkte A, B, C, D angelegt und danach folgendes script erstellt.
        a4acf04e-9b87-4dc6-801a-ce3802484fb2-image.png
        Zisterne.txt

        Das umwandeln von boolean -> Zahl geht evtl. eleganter, aber auf die Schneller funktioniert es erstmal.

        D paul53 2 Replies Last reply Reply Quote 0
        • D
          Det-le @geschild last edited by

          @geschild Vielen Dank für die Unterstützung, jetzt steh ich echt aufm Schlauch....
          Ich habe dein Blockly genommen und im ioBroker als Blockly importiert. Unter Objekt A-D habe ich die ID vom Funkmodul der Kanäle 5-8 hinterlegt:
          eade75a6-66a0-45ab-8e62-cf630b07815d-image.png

          Weiter unten habe ich wieder die ID's der Kanäle 5-8 hinterlegt.
          9e1d0c5e-903a-4c9d-bfe1-e206e6ce7f73-image.png strikethrough text

          Aber, unter Userdata 0 finde ich keine Datenpunkte A-D oder andere Datenpunkte die mir den Füllstand oder die anderen Daten anzeigen. Hab grad keinen Plan wo ich die Daten finden/sehen kann.

          Skript in der CCU klappt auch nicht, alle Variablen bleiben auf 0, bzw. false. Prio hat für mich aber die Lösung im ioBroker..

          Det

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

            @geschild sagte: übersichtliche Form gebracht

            Danach sieht die Logik für mich so aus:

            Blockly_temp.JPG

            Die zu schreibenden Datenpunkte sind sicherlich Systemvariablen in der Instanz "hm-rega.0"

            1 Reply Last reply Reply Quote 0
            • geschild
              geschild @Det-le last edited by

              @det-le Die Datenpunkte A-D im user0 habe ich von Hand angelegt, um die Funktion zu simulieren.

              Das Ergebnis der Auswertung habe ich auf debug-Blocklys gelegt, somit sollte das Ergebnis unten angezeigt werden.
              2e909571-0cce-4ff2-b44b-700d4552bcdd-image.png

              Zum Einlesen der Zustände verwende bitte das script von Paul53 1. Kürzer 2. Beinhaltet es die Umsetzung negative-> positive Logik.

              D 1 Reply Last reply Reply Quote 0
              • D
                Det-le last edited by

                OK, vielen Dank. Ich komme erst am Dienstag dazu mir das genauer anzuschauen. Ich werde berichten...

                1 Reply Last reply Reply Quote 0
                • D
                  Det-le @geschild last edited by

                  So,

                  sorry, hat etwas gedauert. Hier nun ein funktionierendes Script für den IO-Broker. Habe es bei mir im Einsatz und es tut was es soll. Man kann es bestimmt noch optimieren, ich kann so aber jeden Schritt nachvollziehen und auch verstehen. Daher ist das für mich Laien sehr gut geeignet.

                  00fc977c-51e3-45b0-88be-686c00327a6e-image.png

                  var Fuellstand;
                  
                  
                  on({ id: [].concat(['hm-rpc.2.001460C9ABA6A1.5.STATE']).concat(['hm-rpc.2.001460C9ABA6A1.6.STATE']).concat(['hm-rpc.2.001460C9ABA6A1.7.STATE']).concat(['hm-rpc.2.001460C9ABA6A1.8.STATE']), change: 'ne' }, async (obj) => {
                    setState('0_userdata.0.Zisterne.A' /* A */, getState('hm-rpc.2.001460C9ABA6A1.5.STATE').val, true);
                    setState('0_userdata.0.Zisterne.B' /* B */, getState('hm-rpc.2.001460C9ABA6A1.6.STATE').val, true);
                    setState('0_userdata.0.Zisterne.C' /* C */, getState('hm-rpc.2.001460C9ABA6A1.7.STATE').val, true);
                    setState('0_userdata.0.Zisterne.D' /* D */, getState('hm-rpc.2.001460C9ABA6A1.8.STATE').val, true);
                    Fuellstand = 0;
                    Fuellstand = (typeof Fuellstand === 'number' ? Fuellstand : 0) + (getState('hm-rpc.2.001460C9ABA6A1.8.STATE').val ? 0 : 10);
                    Fuellstand = (typeof Fuellstand === 'number' ? Fuellstand : 0) + (getState('hm-rpc.2.001460C9ABA6A1.7.STATE').val ? 0 : 20);
                    Fuellstand = (typeof Fuellstand === 'number' ? Fuellstand : 0) + (getState('hm-rpc.2.001460C9ABA6A1.6.STATE').val ? 0 : 40);
                    Fuellstand = (typeof Fuellstand === 'number' ? Fuellstand : 0) + (getState('hm-rpc.2.001460C9ABA6A1.5.STATE').val ? 0 : 80);
                    setState('0_userdata.0.Zisterne.Fuellstand' /* Fuellstand */, Fuellstand);
                    setState('0_userdata.0.Zisterne.Ueberlauf' /* Ueberlauf */, false);
                    setState('0_userdata.0.Zisterne.Kein_Pegel' /* Kein Pegel */, false);
                    setState('0_userdata.0.Zisterne.Fehler' /* Fehler */, false);
                    setState('0_userdata.0.Zisterne.Aus' /* Aus */, false);
                    if (Fuellstand == 110) {
                      setState('0_userdata.0.Zisterne.Ueberlauf' /* Ueberlauf */, true);
                    }
                    if (Fuellstand == 130) {
                      setState('0_userdata.0.Zisterne.Kein_Pegel' /* Kein Pegel */, true);
                    }
                    if (Fuellstand == 140) {
                      setState('0_userdata.0.Zisterne.Fehler' /* Fehler */, true);
                    }
                    if (Fuellstand == 150) {
                      setState('0_userdata.0.Zisterne.Aus' /* Aus */, true);
                    }
                  });
                  
                  
                  Das Script für die CCU3 habe ich noch nichts ans laufen gebracht. Da muss ich bei Gelegenheit noch mal ran.
                  
                  1 Reply Last reply Reply Quote 0
                  • First post
                    Last post

                  Support us

                  ioBroker
                  Community Adapters
                  Donate

                  995
                  Online

                  31.7k
                  Users

                  79.7k
                  Topics

                  1.3m
                  Posts

                  3
                  7
                  323
                  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