Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. Skript (Zisternenfüllstandsanzeige) funzt nicht..

NEWS

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    20
    1
    762

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    9.0k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.3k

Skript (Zisternenfüllstandsanzeige) funzt nicht..

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
7 Beiträge 3 Kommentatoren 628 Aufrufe 2 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • D Offline
    D Offline
    Det-le
    schrieb am zuletzt editiert von Homoran
    #1

    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 Antwort Letzte Antwort
    0
    • geschildG Offline
      geschildG Offline
      geschild
      schrieb am zuletzt editiert von geschild
      #2

      @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 paul53P 2 Antworten Letzte Antwort
      0
      • geschildG 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 Offline
        D Offline
        Det-le
        schrieb am zuletzt editiert von
        #3

        @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

        geschildG 1 Antwort Letzte Antwort
        0
        • geschildG 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.

          paul53P Offline
          paul53P Offline
          paul53
          schrieb am zuletzt editiert von paul53
          #4

          @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"

          Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
          Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

          1 Antwort Letzte Antwort
          0
          • D Det-le

            @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

            geschildG Offline
            geschildG Offline
            geschild
            schrieb am zuletzt editiert von
            #5

            @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 Antwort Letzte Antwort
            0
            • D Offline
              D Offline
              Det-le
              schrieb am zuletzt editiert von
              #6

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

              1 Antwort Letzte Antwort
              0
              • geschildG geschild

                @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 Offline
                D Offline
                Det-le
                schrieb am zuletzt editiert von
                #7

                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 Antwort Letzte Antwort
                0
                Antworten
                • In einem neuen Thema antworten
                Anmelden zum Antworten
                • Älteste zuerst
                • Neuste zuerst
                • Meiste Stimmen


                Support us

                ioBroker
                Community Adapters
                Donate

                840

                Online

                32.5k

                Benutzer

                81.6k

                Themen

                1.3m

                Beiträge
                Community
                Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                ioBroker Community 2014-2025
                logo
                • Anmelden

                • Du hast noch kein Konto? Registrieren

                • Anmelden oder registrieren, um zu suchen
                • Erster Beitrag
                  Letzter Beitrag
                0
                • Home
                • Aktuell
                • Tags
                • Ungelesen 0
                • Kategorien
                • Unreplied
                • Beliebt
                • GitHub
                • Docu
                • Hilfe