Navigation

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

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    M
    • Profile
    • Following 0
    • Followers 0
    • Topics 3
    • Posts 6
    • Best 0
    • Groups 1

    mo277

    @mo277

    Starter

    0
    Reputation
    8
    Profile views
    6
    Posts
    0
    Followers
    0
    Following
    Joined Last Online

    mo277 Follow
    Starter

    Latest posts made by mo277

    • Blockly-Fehlermeldung (TypeError)

      ioBroker * Blockly * JSON * AIO Creator NEO * CCU3

      Hallo zusammen,
      ich verwende auf dem Smartphone AIO Creator NEO. Für die HmIP-Geräte auf der CCU3 läuft das sehr gut, aber Datenpunkte des ioB, die ich über die entsprechende AIO-Erweiterung einbinden kann, brauchen ewig, bis sie auf dem Smartphone angezeigt werden.
      Um das zu vermeiden, möchte ich die ioB-Datenpunkte zusätzlich auf der CCU3 als Systemvariablen anlegen und bei Änderung dieser Datenpunkte synchronisieren. Die Systemvariablen finde ich im ioB unter Objekte/hm-rega.

      Dazu habe ich diesen (bislang 16) Datenpunkten eine Kategorie/Funktion zugeordnet, die ich über 'IDs vom Selektor' abgreife.

      Die Zuordnung bzw. das Parsen erfolgt über eine als Datenpunkt angelegte JSON-Tabelle, von der ich einen Datensatz im Foto zeige.

      Grundsätzlich funktioniert mein Blockly, allerdings werden auch unerwartete Infos und ein Fehler angezeigt, die ich mir nicht erklären kann (siehe Log-File im Spoiler).

      Kann mir jemand helfen, den Fehler zu identifizieren, bitte?

      PS: der Blockly-Teil mit dem eigentlichen Mapping fehlt hier noch.

      Blockly.jpg

      var vl_DP, js_Sync_CCU3, z_JSON;
      
      
      on({ id: [].concat(Array.prototype.slice.apply($('state[id=*](functions=AIO_NEO)'))), change: 'ne' }, async (obj) => {
       let value = obj.state.val;
       let oldValue = obj.oldState.val;
       // JSON aus Datenpunkt in Liste laden
       js_Sync_CCU3 = (() => { try { return JSON.parse(getState('0_userdata.0.Variablen.allgemein.json_Sync_CCU3').val); } catch (e) { return {}; }})();
       // Schleife durch die Liste
       for (z_JSON = 1; z_JSON <= 16; z_JSON++) {
         // Prüfen, ob Element "DP1" der Liste gleich geändertem Datenpunkt (aus Trigger)
         if (getAttr((js_Sync_CCU3[(z_JSON - 1)]), 'DP1') == obj.id) {
           // Abbruch, wenn gefunden
           break;
         }
       }
       // Ausgabe des Elements DP2 zum gefundenen Datensatz
       console.info(getAttr((js_Sync_CCU3[(z_JSON - 1)]), 'DP2'));
      });
      

      25.4.2025, 07:47:28.364 [info ]: javascript.0 (1742) script.js.01_allgemein.bly_allg_Sync_ioB_CCU3: getState(id=0_userdata.0.Variablen.allgemein.json_Sync_CCU3, timerId=undefined) =>
      {"val":"[\r\n {\r\n \"Kategorie\": \"Beschattung\",\r\n
      \"DP1\": \"0_userdata.0.Variablen.Beschattung.DP_Rolladen.v_BS_Roll_Abend1\",\r\n
      \"DP2\": \"hm-rega.0.11155\"\r\n },\r\n {\r\n \"Kategorie\": \"Beschattung\",\r\n
      [gekürzt]
      \"DP1\": \"0_userdata.0.Variablen.Beschattung.DP_Rolladen.v_BS_Roll_Abend2\",\r\n
      \"DP2\": \"hm-rega.0.11156\"\r\n },\r\n {\r\n \"Kategorie\": \"Beschattung\",\r\n
      [gekürzt]
      \"DP1\": \"daswetter.0.NextHours.Location_1.Day_1.current.symbol_desc\",\r\n
      \"DP2\": \"hm-rega.0.11161\"\r\n },\r\n {\r\n \"Kategorie\": \"Klima\",\r\n
      \"DP1\": \"daswetter.0.NextHours.Location_1.Day_1.current.symbol_desc2\",\r\n
      \"DP2\": \"hm-rega.0.11162\"\r\n }\r\n]",
      "ack":false,"ts":1745471337974,"q":0,"from":"system.adapter.admin.0","user":"system.user.admin","lc":1745471337974}
      25.4.2025, 07:47:28.365 [info ]: javascript.0 (1742) script.js.01_allgemein.bly_allg_Sync_ioB_CCU3: hm-rega.0.11152
      25.4.2025, 07:47:28.378 [info ]: javascript.0 (1742) script.js.01_allgemein.bly_allg_Sync_ioB_CCU3:
      getState(id=0_userdata.0.Variablen.allgemein.json_Sync_CCU3, timerId=undefined) =>
      {"val":"[\r\n {\r\n \"Kategorie\": \"Beschattung\",\r\n
      \"DP1\": \"0_userdata.0.Variablen.Beschattung.DP_Rolladen.v_BS_Roll_Abend1\",\r\n
      \"DP2\": \"hm-rega.0.11155\"\r\n },\r\n {\r\n \"Kategorie\": \"Beschattung\",\r\n
      [gekürzt]
      \"DP1\": \"0_userdata.0.Variablen.Beschattung.DP_Rolladen.v_BS_Roll_Abend2\",\r\n
      \"DP2\": \"hm-rega.0.11156\"\r\n },\r\n {\r\n \"Kategorie\": \"Beschattung\",\r\n
      [gekürzt]
      \"DP1\": \"daswetter.0.NextHours.Location_1.Day_1.current.symbol_desc\",\r\n
      \"DP2\": \"hm-rega.0.11161\"\r\n },\r\n {\r\n \"Kategorie\": \"Klima\",\r\n
      \"DP1\": \"daswetter.0.NextHours.Location_1.Day_1.current.symbol_desc2\",\r\n
      \"DP2\": \"hm-rega.0.11162\"\r\n }\r \n]",
      "ack":false,"ts":1745471337974,"q":0,"from":"system.adapter.admin.0","user":"system.user.admin","lc":1745471337974}
      25.4.2025, 07:47:28.380 [error]: javascript.0 (1742) script.js.01_allgemein.bly_allg_Sync_ioB_CCU3: Cannot get DP2 of "undefined": TypeError: Cannot read properties of undefined (reading 'DP2')
      25.4.2025, 07:47:28.380 [info ]: javascript.0 (1742) script.js.01_allgemein.bly_allg_Sync_ioB_CCU3: null
      

      {
         "Kategorie": "Beschattung",
         "DP1": "followthesun.0.current.azimuth",
         "DP2": "hm-rega.0.11152"
       },
      

      posted in Blockly
      M
      mo277
    • RE: Rollladen: automatisches bzw. manuelles Fahren mit Flag

      @martinp Okay, verstanden.

      Dann werde ich das Flag von bool auf num umbauen und als Zähler in meiner Schleife für die 10 Rollladen einsetzen.

      Die einzelnen Rollläden laufen nur, wenn bestimmte Bedingungen erfüllt sind, und je angestoßenem Rollladen zähle ich das Flag hoch, und sobald auf Kanal 3 die Istgröße gleich der Sollgröße ist, ziehe ich das Flag wieder runter.

      Am Ende muss es wieder auf 0 stehen, und dann geht´s weiter ...

      Besten Dank für den Hinweis!

      posted in Blockly
      M
      mo277
    • Rollladen: automatisches bzw. manuelles Fahren mit Flag

      73589e86-36ba-4038-9e06-30af4574ba0c-grafik.png Hallo,

      ich habe Rollladenaktoren von HmIP und steuere die Rollladen automatisch über Blockly:

      • Skript "ROLLLADENAUTOMATIK" morgens/abends in jeweils 2 Stufen (z. B. morgens erst etwas auf und später komplett auf)
      • Beschattungsautomatik
      • Automatik an heißen Tagen aufgrund der Wettervorhersage

      Optional kann ich die Rollläden natürlich manuell fahren, also über Alexa, die Wandtaster oder über AIO Creator Neo (Tablet, Smartphone) bzw. VIS (Laptop).

      Einige Informationen für den Betrieb habe ich in einem JSON-Datenpunkt für alle Rollläden hinterlegt, und dort möchte ich auch hinterlegen, aus welchem Grund die einzelnen Rollläden zuletzt gefahren sind. Das ist bei den o. g. Automatiken einfach. Bei den manuellen Gründen ist es egal, worüber ich genau (Alexa, Taster etc.) gesteuert habe. Wichtig ist mir nur, dass ich manuell eingegriffen habe.

      Für diesen Zweck habe ich ein Script "MANUELLE BEDIENUNG", dass Änderungen auf Level3 (Level Istzustand, nur lesen) der HmIP-Aktoren reagiert. Und da die genannten Automatiken auch diese Datenpunkte ändern, arbeite ich mit einer Variablen als Flag "flag_AutoRoll", die das steuern soll:

      • Wenn die Steuerung der Rollladen über eine der genannten Automatiken geschieht, steht dieses Flag auf wahr, in dem JSON-DP wird für jeden gefahrenen Rollladen entweder 'Auto', 'Sonne' oder 'Hitze' hinterlegt, und anschließend wird das Flag wieder auf falsch gesetzt.

      • Wenn die Automatiken nicht aktiv sind und das Flag somit auf falsch steht, soll beim Erkennen einer Bewegung 'manuell' in den JSON-DP geschrieben werden.

      Mein Problem: wenn ich die JSON-Tabelle beim automatischen Fahren beobachte, wird erwartungsgemäß die letzte Änderung dokumentiert, allerdings kommt kurz danach trotz dem Flag = false ein M für manuell.

      Hier ein auf das Wesentliche reduziertes Beispiel mit nur einem Rollladen:

      var p_Modus, p_Level, p_Lage, flag_AutoRoll, js_Roll_Status;
      
      // Die Funktion fährt die Rollladen. Im Beispiel nur ein
      // Rollladen, ansonsten als Schleife für 10 Rollladen. Die
      // Variablen p_Modus und p_Lage haben im Beispiel keine Funktion.
      async function f_FahreRoll(p_Modus, p_Level, p_Lage) {
        // JSON laden und in Objekt schreiben
        js_Roll_Status = (() => { try { return JSON.parse(getState('0_userdata.0.Variablen.Beschattung.DP_Rolladen.v_BS_JSON_Roll_Status').val); } catch (e) { return {}; }})();
        // flag auf true setzen
        flag_AutoRoll = true;
        console.info(('Funktion f_FahreRoll2 Start: ' + String(flag_AutoRoll)));
        // Rollladen fahren
        setStateDelayed((['hm-rpc.1.','00111D899D849F','.4.LEVEL'].join('')), { val: p_Level, ack: false }, parseInt(((0) || '').toString(), 10), false);
        // Modus in den Roll_Status schreiben
        ((obj) => { if (typeof obj === 'object') { obj['Modus'] = 'Auto'; } })((js_Roll_Status[2]));
        // Objekt Roll-Status in DP schreiben
        setState('0_userdata.0.Variablen.Beschattung.DP_Rolladen.v_BS_JSON_Roll_Status' /* v_BS_JSON_Roll_Status */, JSON.stringify(js_Roll_Status));
        // flag auf false setzen
        flag_AutoRoll = false;
        console.info(('Funktion f_FahreRoll2 Stop: ' + String(flag_AutoRoll)));
      }
      
      
      // MANUELLE BEDIENUNG: Tasten, Apps, VIS, Alexa
      on({ id: [].concat(['hm-rpc.1.00111D899D849F.3.LEVEL']), change: 'ne' }, async (obj) => {
        let value = obj.state.val;
        let oldValue = obj.oldState.val;
        // DEBUG: manuell, direkt nach Trigger
        console.info(('Skript Manuell, direkt nach Trigger ' + String(flag_AutoRoll)));
        // JSON aus DP lesen und in Variable schreiben
        js_Roll_Status = (() => { try { return JSON.parse(getState('0_userdata.0.Variablen.Beschattung.DP_Rolladen.v_BS_JSON_Roll_Status').val); } catch (e) { return {}; }})();
        // Element in JSON auf M setzen
        if (flag_AutoRoll != true) {
          ((obj) => { if (typeof obj === 'object') { obj['Modus'] = 'manuell'; } })((js_Roll_Status[2]));
        }
        // JSON aus Variable zurückschreiben in DP
        setState('0_userdata.0.Variablen.Beschattung.DP_Rolladen.v_BS_JSON_Roll_Status' /* v_BS_JSON_Roll_Status */, JSON.stringify(js_Roll_Status));
      });
      
      // ROLLLADENAUTOMATIK
      flag_AutoRoll = false;
      // Fahre Rolladen morgens/abends
      scheduleById('0_userdata.0.Variablen.Beschattung.DP_Rolladen.v_BS_Roll_Morgen1' /* v_BS_Roll_Morgen1 */, async () => {
        await f_FahreRoll('m_Morgen1', 100, '');
      });
      

      Als Screenshots:

      Skript ROLLLADENAUTOMATIK.jpg

      Funktion.jpg

      Skript MANUELL.jpg

      Meine Fragen:

      • Debug zeigt, dass die Variable funktioniert. Warum funktioniert mein Ansatz nicht?

      Debug.jpg

      JSON.jpg

      • Gibt es einen alternativen Ansatz?
      posted in Blockly
      M
      mo277
    • RE: Rolladensteuerung VIS, Homematic-IP-Aktoren, CCU3

      @codierknecht

      Besten Dank! Ich habe das jetzt mit dem "Alias-Manager" testen können.

      Dein Adapter gefällt mir besser. Ich habe danach gesucht, finde aber nix. Verrätst Du mir den Adapter?

      posted in Visualisierung
      M
      mo277
    • RE: Rolladensteuerung VIS, Homematic-IP-Aktoren, CCU3

      @röstkartoffel

      Okay, verstanden. Und das funktioniert: Level 0 bei ab und Level 100 bei auf, und unterbrechen mit Stop = true. So kann ich den Rolladen steuern. Prima, besten Dank 🙂

      Es ergibt sich nun aber ein anderes Problem:

      • Der Slider hängt bisher auch auf Kanal4:Level.
      • So konnte ich mit dem Slider den Rolladen prima bewegen.
      • Mit der von Röstkartoffel beschriebenen Lösung zeigt der Slider nun aber nicht mehr den aktuellen Level an, sondern 0 bzw. 100, je nach gedrücktem Button

      Und weiter:

      • Kanal3:Level zeigt den richtigen Level, allerdings kann ich meinen Rolladen darüber nicht steuern
      • Ich verwende den Materialdesign-Slider W00095
      • Ich habe jetzt spontan mit den Einstellungen gearbeitet, komme hier aber nicht weiter. Ich verstehe den Eintrag "Objekt ID in Arbeit" noch nicht:

      Slider2.jpg

      Kann ich mein neues Problem darüber lösen?

      Slider1.jpg

      posted in Visualisierung
      M
      mo277
    • Rolladensteuerung VIS, Homematic-IP-Aktoren, CCU3

      Hardware

      • CCU3, FW 3.65.11
      • Homematic Rolladenaktoren HmIP-BROLL und HmIP-FROLL mit jeweils aktuellster FW

      Software

      • auf Smartphone/Tablet: Mediola AIO Creator NEO
      • au PC mit WIN 11: VIS

      Hallo,

      ich bin relativ neu, grundsätzlich wohl nicht unbegabt, und komme ganz gut klar.

      Mein Problem ist die Steuerung meiner Rolläden über VIS

      Ich kann die Rolläden über Slider über den DP LEVEL steuern. Das funktioniert.
      Für die direkte auf/ab-Steuerung habe ich in VIS Taster gewählt, die je nach Taste die nachfolgenden Werte in die Datenpunkte des Rolladenaktors schreiben:

      • Taste 'ab' → Kanal 4 'Activity_State' → Wert '2'
      • Taste 'auf' → Kanal 4 'Activity_State' → Wert '1'
      • Taste 'stop' → Kanal 4 'Stop' → Wert 'true'

      Diese Änderungen kommen auch im betreffenden Objekt im ioBroker an, allerdings passiert nix und die Werte sind rot.

      Ich denke, das kann was mit "Bestätigung" und dem Durchreichen an die CCU3 zu tun habe, finde aber bei der Suche im Netz keine Lösungen.

      Was mache/denke ich falsch?

      Besten Dank vorab!

      posted in Visualisierung
      M
      mo277
    Community
    Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
    The ioBroker Community 2014-2023
    logo