Skip to content
  • Home
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • 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

  • Default (No Skin)
  • No Skin
Collapse
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Hardware
  4. Lay-Z-Spa Wifi Control

NEWS

  • Der neue Monatsrückblick für Mai und Juni 2026 ist online!
    BluefoxB
    Bluefox
    8
    1
    704

  • wichtiges UPDATE für controller 7.2.2 im stable
    HomoranH
    Homoran
    10
    1
    3.4k

  • Neues YouTube-Video: Visualisierung im Devices-Adapter
    BluefoxB
    Bluefox
    16
    1
    5.3k

Lay-Z-Spa Wifi Control

Scheduled Pinned Locked Moved Hardware
209 Posts 74 Posters 79.9k Views 72 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • T TimoWald

    Hallo wo bekomme ich die aktuelle Firmware für WifiWirl LayZSpa?

    C Offline
    C Offline
    Chris263
    wrote on last edited by Chris263
    #201

    @timowald die WifiWhirl Software findest du hier:
    WifiWhirl-Software
    Wenn du ein Modul besitzt geht es alternativ auch als Update: WifiWhirl Update

    T 1 Reply Last reply
    0
    • C Chris263

      @timowald die WifiWhirl Software findest du hier:
      WifiWhirl-Software
      Wenn du ein Modul besitzt geht es alternativ auch als Update: WifiWhirl Update

      T Online
      T Online
      TimoWald
      wrote on last edited by
      #202

      @hlgamer danke, so probiere ich es mal.

      1 Reply Last reply
      0
      • J johobo

        So, Ich wollte mal von meiner Umsetzung berichten.

        Ich habe den Lay-Z-Spa Miami mit dem >2021er Pumpenmodul.

        Die Platinen waren nach ca. 1,5 Wochen aus China bei mir.

        Bei einem ersten Testaufbau auf Steckbrett hatte ich schon festgestellt, dass ich für meinen Pool die Kabelbelegung 1:1 aufbauen muss, damit es funktioniert. Bei dem Versuch war kein Low-Pass Filter vorhanden und es kam zu keinem Display-Flickern. Zur Sicherheit baute ich dann im ersten Versuch mit Platine den Filter mit ein. Dies führte aber dazu, dass das Display nicht mehr funktionierte. Also bestückte ich eine zweiter Platine ohne filter und es funktionierte einwandfrei.

        Bestway Wifi PCB 3.jpg Bestway Wifi PCB 2.jpg Bestway Wifi PCB 1.jpg

        Die Einbindung in IO broker lief soweit auch.

        Für den finalen Einbau musste aber noch ein Gehäuse her.
        Ich orientierte mich am Design von @Rickman (Vielen Dank!) und einem Case ohne Halterung von thingiverse. Heraus kam dieses Thing: https://www.thingiverse.com/thing:6061047 mit dem ich auch ziemlich zufrieden bin. Evtl. muss ich hier nochmal eine neuere Version aus ABS erstellen. PLA scheint mir hier bei den Temperaturen etwas kritisch…

        Bild2.jpg Bild1.jpg

        Alles in allem bin ich aber super zufrieden mit dem Projekt und bedanke mich bei euch allen für die Berichte die zu meinem Erfolg beigetragen haben!

        E Offline
        E Offline
        edstobi
        wrote on last edited by
        #203

        @johobo sagte in Lay-Z-Spa Wifi Control:

        Thing: https://www.thingiverse.com/thing:6061047 mit dem ich auch ziemlich zufrieden bin.

        Hallo
        Ich kann leider auf Thingivers das Gehäuse nicht mehr finden. Ich bin an der Befestigung interessiert, da meine Platine jetzt da so lose im Pumpen Gehäuse rumfliegt.
        LG EDSTOBI

        E 1 Reply Last reply
        0
        • E edstobi

          @johobo sagte in Lay-Z-Spa Wifi Control:

          Thing: https://www.thingiverse.com/thing:6061047 mit dem ich auch ziemlich zufrieden bin.

          Hallo
          Ich kann leider auf Thingivers das Gehäuse nicht mehr finden. Ich bin an der Befestigung interessiert, da meine Platine jetzt da so lose im Pumpen Gehäuse rumfliegt.
          LG EDSTOBI

          E Offline
          E Offline
          edstobi
          wrote on last edited by
          #204

          Hallo
          Ich benötige einmal eure Hilfe.

          ch habe die Original-Platine V2B, eine Poolpumpe mit 4-adrigem Anschluss, Modell 54123 (Air), sowie MQTT eingerichtet.
          Im Web-Interface des Lay-Z-Spa-Moduls sehe ich die Pumpe, und auch in MQTT taucht sie auf. Soweit funktioniert alles.

          Nun habe ich einige Verständnisfragen:

          Wenn ich im Web-Interface "Take Control" aktiviere, wird das Display der Pumpe deaktiviert. Ist das so richtig?
          Ich kann diesen Zustand an der Pumpe selbst nicht rückgängig machen, ohne die Pumpe komplett vom Strom zu trennen und neu zu starten.

          Im MQTT-Interface sehe ich die Option "Take Control" nicht, bzw. kann sie dort nicht ein- oder ausschalten.
          Ist das so vorgesehen oder ist das der SETGODMODE in MQTT "GOD"

          Wenn ich "Take Control" nicht aktiviert habe, kann ich im Lay-Z-Spa-Webmodul keine Funktionen schalten.
          Ist das der normale Ablauf?

          Wenn ich "Take Control" über die Web-Oberfläche aktiviere und dann Pumpe oder Heizung über MQTT steuere, sehe ich keine Änderung an den Buttons im Web-Interface.
          Ist das erwartetes Verhalten?

          Zusammengefasst:
          Ich möchte verstehen, wie die Steuerung zwischen Web-Interface, MQTT und der physischen Pumpe genau funktioniert, insbesondere im Zusammenhang mit der "Take Control"-Funktion.
          Ist das Verhalten, wie oben beschrieben, korrekt? Gibt es eine Möglichkeit, "Take Control" auch über MQTT zu steuern sodas es im Webmodule sichtbar ist oder den Zustand an der Pumpe direkt zurückzusetzen, ohne einen Neustart?
          Ich möchte die Poolpumpe und den Heizer über ioBroker oder Node-RED automatisch steuern, sodass sie bei PV-Überschuss eingeschaltet werden und die Pumpe zusätzlich nur stundenweise läuft.

          Gleichzeitig soll es möglich sein, die Pumpe und die Bubbles direkt am Pool zu bedienen, falls jemand den Pool nutzen möchte – ohne dass man erst ins Haus gehen und dort am Display etwas umstellen muss. Andernfalls wäre die Lösung nicht familienfreundlich und hätte keinen hohen WAF (Wife Acceptance Factor)

          Sollte das Verhalten der Steuerung von Visualapproach so korrekt sein, werde ich versuchen, am ESP weitere GPIO-Input-Knöpfe zu konfigurieren, um darüber zum Beispiel die Bubbles anzusteuern.

          Ich kenne das PDF „REMOTE CONTROLLED LAY-Z-SPA“ von ihm, jedoch sind solche Verhaltensfragen dort nicht beschrieben.

          Ich hoffe, dass hier jemand ein identisches Modell 4-adrigem Anschluss, Modell 54123 hat und mir weiterhelfen kann.
          Danke
          EDSTOBI

          1 Reply Last reply
          0
          • C Offline
            C Offline
            Christoph 4
            wrote on last edited by
            #205

            Hallo zusammen gibt es auch für die Pumpe S100201 eine Möglichkeit Werte per mqtt zu bekommen?

            Danke Christoph

            C 1 Reply Last reply
            0
            • caco3000C Offline
              caco3000C Offline
              caco3000
              wrote on last edited by Samson71
              #206

              Bei mir kommt jetzt im Script folgender Fehler

              javascript.0	18:55:30.845	error	script.js.Lay_Z_Spa: script.js.Lay_Z_Spa:1
              javascript.0	18:55:30.845	error	at script.js.Lay_Z_Spa:1:1
              

              und in Log von IO Broker kommt folgendes:

              javascript.0
              2025-08-06 18:52:04.102	error	at Script.runInContext (node:vm:149:12)
              
              javascript.0
              2025-08-06 18:52:04.102	error	at script.js.Lay_Z_Spa:1:1
              
              javascript.0
              2025-08-06 18:52:04.102	error	SyntaxError: Identifier 'log' has already been declared
              
              javascript.0
              2025-08-06 18:52:04.102	error	script.js.Lay_Z_Spa: script.js.Lay_Z_Spa:1
              

              Screenshot 2025-08-06 185250.png Screenshot 2025-08-06 185417.png

              Wer kann mir sagen was mt einmal nicht mehr stimmt bis jetzt lief alles

              Mod-Edit
              Code-Tags gesetzt

              1 Reply Last reply
              0
              • caco3000C Offline
                caco3000C Offline
                caco3000
                wrote on last edited by
                #207

                AI machts möglich habe mir den Code reparieren lassen.```

                const ID = '0_userdata.0.LazySpa';
                const MQTTINSTANCE = 0;
                const debug = true;
                
                // Definition der zu erstellenden Datenpunkte
                const STATES = [
                    {
                        _id: 'LCK',
                        type: 'state',
                        common: { name: 'lock', type: 'boolean', role: 'indicator.lock', read: true, write: false, desc: 'Lazy spa lock' },
                        native: {}
                    },
                    {
                        _id: 'PWR',
                        type: 'state',
                        common: { name: 'power', type: 'boolean', role: 'switch.power', read: true, write: true, desc: 'Lazy spa power' },
                        native: {}
                    },
                    {
                        _id: 'UNT',
                        type: 'state',
                        common: { name: 'unit', type: 'number', role: 'value', read: true, write: true, max: 1, desc: 'Lazy spa unit', states: { 0: 'Farenheit', 1: 'Celsius' } },
                        native: {}
                    },
                    {
                        _id: 'AIR',
                        type: 'state',
                        common: { name: 'bubbles', type: 'boolean', role: 'switch.light', read: true, write: true, desc: 'Lazy spa bubbles state' },
                        native: {}
                    },
                    {
                        _id: 'GRN',
                        type: 'state',
                        common: { name: 'Heating green', type: 'boolean', role: 'indicator', read: true, write: false, desc: 'Reached target temp.' },
                        native: {}
                    },
                    {
                        _id: 'RED',
                        type: 'state',
                        common: { name: 'Heating red', type: 'boolean', role: 'indicator', read: true, write: false, desc: 'Not reached target temp.' },
                        native: {}
                    },
                    {
                        _id: 'FLT',
                        type: 'state',
                        common: { name: 'pump', type: 'boolean', role: 'switch.pump', read: true, write: true, desc: 'Pump state' },
                        native: {}
                    },
                    {
                        _id: 'HEATER',
                        type: 'state',
                        common: { name: 'heater', type: 'boolean', role: 'switch.heater', read: true, write: true, desc: 'Heater state' },
                        native: {}
                    },
                    {
                        _id: 'TGT',
                        type: 'state',
                        common: { name: 'target temp', type: 'number', role: 'level.temperature', min: 20, max: 40, step: 1, read: true, write: true, desc: 'Target temp.' },
                        native: {}
                    },
                    {
                        _id: 'TMP',
                        type: 'state',
                        common: { name: 'temp', type: 'number', role: 'value.temperature', read: true, write: false, unit: '°C', desc: 'Current temp.' },
                        native: {}
                    },
                ];
                
                /**
                 * Sendet Befehle an den Spa via MQTT.
                 * @param {object} obj Das Objekt vom "on"-Trigger.
                 */
                async function stateChange(obj) {
                    const state = obj.id.split('.').pop();
                    let value = obj.state.val;
                    if (debug) log(`Change detected for '${state}'. Sending command.`);
                
                    let cmd, val;
                
                    switch (state) {
                        case 'UNT': cmd = 1; val = value; break;
                        case 'TGT': cmd = 0; val = value; break;
                        case 'AIR': cmd = 2; val = value ? 1 : 0; break;
                        case 'HEATER': cmd = 3; val = value ? 1 : 0; break;
                        case 'FLT': cmd = 4; val = value ? 1 : 0; break;
                        default:
                            if (debug) log(`No action defined for state change of: ${state}`, 'warn');
                            return;
                    }
                
                    const mqttCommand = `{"CMD":${cmd},"VALUE":${val},"XTIME":0,"INTERVAL":0}`;
                    await setStateAsync(`mqtt.${MQTTINSTANCE}.layzspa.command`, mqttCommand, false);
                    if (debug) log(`Sent command for '${state}': ${mqttCommand}`);
                }
                
                /**
                 * Verarbeitet eingehende Status-Updates vom Spa.
                 * @param {string} jsonString Der JSON-String von der MQTT-Nachricht.
                 */
                async function setLazyStates(jsonString) {
                    let states;
                    try {
                        states = JSON.parse(jsonString);
                    } catch (e) {
                        log(`Error parsing JSON from MQTT: ${jsonString}. Error: ${e.stack}`, 'error');
                        return;
                    }
                
                    for (const [key, value] of Object.entries(states)) {
                        const stateDef = STATES.find(s => s._id === key);
                        if (stateDef) {
                            let stateValue = (stateDef.common.type === 'boolean') ? (value === 1) : value;
                            await setStateAsync(`${ID}.${key}`, stateValue, true);
                        }
                    }
                
                    const isHeaterOn = (states.GRN === 1 || states.RED === 1);
                    await setStateAsync(`${ID}.HEATER`, isHeaterOn, true);
                }
                
                /**
                 * Hauptfunktion zur Initialisierung des Skripts.
                 */
                async function main() {
                    // 1. Datenpunkte erstellen oder sicherstellen, dass sie existieren
                    for (const stateObject of STATES) {
                        const id = `${ID}.${stateObject._id}`;
                        if (!(await getObjectAsync(id))) {
                            if (debug) log(`Creating state: ${id}`);
                            await createStateAsync(id, stateObject.common);
                        }
                
                        // 2. Trigger für schreibbare Datenpunkte erstellen
                        if (stateObject.common.write) {
                            on({ id: id, change: "any", ack: false }, async (obj) => {
                                try {
                                    if (obj.state) {
                                        await stateChange(obj);
                                    }
                                } catch (e) {
                                    log(`Error in stateChange trigger for ${id}: ${e.stack}`, 'error');
                                }
                            });
                        }
                    }
                
                    // 3. Trigger für eingehende MQTT-Nachrichten
                    on({ id: `mqtt.${MQTTINSTANCE}.layzspa.message`, change: "ne" }, async (obj) => {
                        try {
                            if (obj.state && obj.state.val) {
                                if (debug) log(`Received MQTT message: ${obj.state.val}`);
                                await setLazyStates(obj.state.val);
                            }
                        } catch (e) {
                            log(`Error in MQTT message handler: ${e.stack}`, 'error');
                        }
                    });
                
                    log("LazySpa script started and all triggers are active.");
                }
                
                // Skriptausführung starten und alle Fehler abfangen.
                try {
                    main();
                } catch (e) {
                    log(`A critical error occurred during script initialization: ${e.stack}`, 'error');
                }
                
                1 Reply Last reply
                0
                • C Christoph 4

                  Hallo zusammen gibt es auch für die Pumpe S100201 eine Möglichkeit Werte per mqtt zu bekommen?

                  Danke Christoph

                  C Offline
                  C Offline
                  Christoph 4
                  wrote on last edited by
                  #208

                  @christoph-4 sagte in Lay-Z-Spa Wifi Control:

                  Hallo zusammen gibt es auch für die Pumpe S100201 eine Möglichkeit Werte per mqtt zu bekommen?

                  Danke Christoph

                  Hat niemand eine Idee?
                  Gruß Christoph

                  1 Reply Last reply
                  0
                  • T Offline
                    T Offline
                    Thomas82
                    wrote on last edited by
                    #209

                    Hi zusammen,
                    ich brauche etwas Unterstützung.
                    Ich habe für meinen LayZSpa ein Wlan Modul eingebaut und möchte nun versuchen per MQTT (Habe ich noch nie benutzt) den Wirlpool zu steuern.

                    Den MQTT Adapter habe ich eingerichtet und er ist auch auf grün gegangen. Nun hätte ich erwartet, dass ich bei Objekte die Temperatur sehe und Status der Pumpe/Heizung etc.

                    Kann mir jemand sagen wie ich da weiter komm? Danke im Voraus.

                    Objekte.png Instanzen.png

                    1 Reply Last reply
                    0

                    Hello! It looks like you're interested in this conversation, but you don't have an account yet.

                    Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.

                    With your input, this post could be even better 💗

                    Register Login
                    Reply
                    • Reply as topic
                    Log in to reply
                    • Oldest to Newest
                    • Newest to Oldest
                    • Most Votes


                    Support us

                    ioBroker
                    Community Adapters
                    Donate

                    414

                    Online

                    33.0k

                    Users

                    83.5k

                    Topics

                    1.3m

                    Posts
                    Community
                    Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                    ioBroker Community 2014-2026
                    logo
                    • Login

                    • Don't have an account? Register

                    • Login or register to search.
                    • First post
                      Last post
                    0
                    • Home
                    • Recent
                    • Tags
                    • Unread 0
                    • Categories
                    • Unreplied
                    • Popular
                    • GitHub
                    • Docu
                    • Hilfe