Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Hardware
    4. Lay-Z-Spa Wifi Control

    NEWS

    • Monatsrückblick - April 2025

    • Minor js-controller 7.0.7 Update in latest repo

    • Save The Date: ioBroker@Smart Living Forum Solingen, 14.06.

    Lay-Z-Spa Wifi Control

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

      Hallo Leute ich arbeite gerade daran meinen Lay-Z-Spa Smarthome kompatibel zu machen. bin da auf ein tolles Projekt gestoßen mit einem Esp8266 Wollte hierfür die Platinen bestellen hat noch jemand zufällig Interesse? Eine Platine alleine ist ein bisschen zu teuer... würde zwischen 6 und 11 Euro liegen die platine je nachdem wieviele es werden...

      Platine : https://easyeda.com/editor#id=a1b94bf9fc01407591a9e0fec6a813b3
      Projekt: https://github.com/visualapproach/WiFi-remote-for-Bestway-Lay-Z-SPA

      Wollte am Wochenende mal ein Testaufbau machen... und werde berichten...

      PS: ich selbst habe einen Palm-Springspcb.jpg

      edit: so ein kleines script habe ich auch dafür:

      
      const Messages =  
      {
        "CONTENT": "STATES",
        "LCK": 0,
        "PWR": 0,
        "UNT": 1,
        "AIR": 0,
        "GRN": 0,
        "RED": 0,
        "FLT": 0,
        "TGT": 22,
        "TMP": 13,
        "CH1": 32,
        "CH2": 49,
        "CH3": 51,
        "HJT": 0,
        "BRT": 7
      }
      const ID = '0_userdata.0.LazySpa';
      const MQTTINSTANCE = 0;
      const debug = true;
      /*
      {
        "CONTENT": "TIMES",
        "TIME": 1650746370,
        "CLTIME": 1644734714,
        "FTIME": 1644734719,
        "UPTIME": 41660,
        "PUMPTIME": 50,
        "HEATINGTIME": 24,
        "AIRTIME": 512,
        "JETTIME": 4294966,
        "COST": 0,
        "FINT": 4294967295,
        "CLINT": 4294967295,
        "KWH": null,
        "TTTT": -74677
      }
      */
      const STATES=[
          {
              _id: 'LCK',
              type: 'state',
              common: {
                  name: 'lock',
                  type: 'boolean',
                  role: 'switch',
                  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',
              read: true,
              write: true,
              desc: 'Lazy spa bubbles state'
          },
          native: {}
          },
          {
          _id: 'GRN',
          type: 'state',
          common: {
              name: 'Heating green',
              type: 'boolean',
              role: 'switch',
              read: true,
              write: false,
              desc: 'reached target temp.'
          },
          native: {}
          },
          {
          _id: 'RED',
          type: 'state',
          common: {
              name: 'Heating red',
              type: 'boolean',
              role: 'switch',
              read: true,
              write: false,
              desc: 'not reached target temp.'
          },
          native: {}
          },
          {
          _id: 'FLT',
          type: 'state',
          common: {
              name: 'pump',
              type: 'boolean',
              role: 'switch',
              read: true,
              write: true,
              desc: 'pump state'
          },    native: {}
          },
          {
          _id: 'HEATER',
          type: 'state',
          common: {
              name: 'heater',
              type: 'boolean',
              role: 'switch',
              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,
              steps: 1,
              read: true,
              write: true,
              desc: 'taget temp.'
          },
          native: {}
          },
          {
          _id: 'TMP',
          type: 'state',
          common: {
              name: 'temp',
              type: 'number',
              role: 'value.temperature',
              read: true,
              write: false,
              unit: '°C',
              desc: 'temp.'
          },
          native: {}
          },
      ]
      
      
      init();
      async function stateChange(obj){
          let id = obj.id
          let state = id.split('.').pop()
          let value = obj.state.val
          log('change Unit' + state)
          switch (state) {
              case 'UNT':
                  setStateAsync('mqtt.'+ MQTTINSTANCE+'.layzspa.command','{"CMD":1,"VALUE":'+ value +',"XTIME":0,"INTERVAL":0}')
                  log('change Unit')
              break;
              case 'TGT':
                  setStateAsync('mqtt.'+ MQTTINSTANCE+'.layzspa.command','{"CMD":0,"VALUE":'+ value +',"XTIME":0,"INTERVAL":0}')
                  log('change target temp. to '+ value);
              break;
              case 'AIR':
                  value = value ? 1: 0 ;
                  setStateAsync('mqtt.'+ MQTTINSTANCE+'.layzspa.command','{"CMD":2,"VALUE":'+ value +',"XTIME":0,"INTERVAL":0}')
                  log('set bubbles to '+ value);
              break;
              case 'HEATER':
                  value = value ? 1: 0 ;
                  setStateAsync('mqtt.'+ MQTTINSTANCE+'.layzspa.command','{"CMD":3,"VALUE":'+ value +',"XTIME":0,"INTERVAL":0}')
                  log('set Heater to '+ value);
              break;
              case 'FLT':
                  value = value ? 1: 0 ;
                  setStateAsync('mqtt.'+ MQTTINSTANCE+'.layzspa.command','{"CMD":4,"VALUE":'+ value +',"XTIME":0,"INTERVAL":0}')
                  log('set pump to '+ value);
              break;
      
      
        default:
          // Anweisungen werden ausgeführt,
          // falls keine der case-Klauseln mit expression übereinstimmt
          break;
      }
      
      
      
      }
      async function init(){
          await asyncForEach(STATES, async (obj, index) => {
              let id = ID +'.'+ obj._id
              if (!existsState(id)) {
                  log('create state '+ id)
                  await createStateAsync(id, obj.common)
              }
              else {
                  log('skip state '+ id)
              }
              //set subscription
              if(obj.common.write){
                  on({id: id, change:"any"} , function(obj) {
                      if(!obj.state.ack){
                          log('change state! '+ JSON.stringify(obj))
                          stateChange(obj)
                      }
                  });
              }       
          });
          log('init done!')
      }
      async function setLazyStates(obj){
          try{
                  let states = JSON.parse(obj)
                  for (const [key, value] of Object.entries(states)) {
                      let statevalue = value
                      const found = STATES.find(state => state._id === key);
                      if(found){                 
                          if (found.common.type === 'boolean'){
                              statevalue = value === 1
                          }
                          await setStateAsync(ID +'.'+ key,statevalue,true)
                      }
                  }
                  //set heater state
                  await setStateAsync(ID +'.HEATER',(states.GRN || states.RED) === 1,true)    
          }
          catch(e){
              console.log('Error in setting State '+ e)
          }
      
      }
      
      async function asyncForEach(array, callback) {
      	for (let index = 0; index < array.length; index++) {
      		await callback(array[index], index, array);
      	}
      }
      function log (msg){
          if(debug) console.log (msg)
      }
      
      on({id:'mqtt.'+ MQTTINSTANCE+'.layzspa.message', change:"ne"} , function(obj) {
          log('Lazyspa reached message! '+ JSON.stringify(obj.state))
          setLazyStates(obj.state.val)
      });
      
      Meistertr Agria4800 J D B 5 Replies Last reply Reply Quote 0
      • Meistertr
        Meistertr Developer @Meistertr last edited by

        @meistertr oder hat jemand einen tip wo man gut und günstig platinen bekommt, hab noch nie welche bestellt...

        L 1 Reply Last reply Reply Quote 0
        • L
          Laudes @Meistertr last edited by

          @meistertr

          Hallo, ich greife das Thema mal nochmal auf. Ich habe einen Bali 2021.
          Die Pumpe hat die S.-Nr.: S100101.

          Platinen habe ich bei JLCPCB bestellt. Hat super funktioniert und waren schnell da.
          Anschließend alles verlötet und den Code eingespielt.

          Das Web Interface funktioniert einwandfrei, ich kann alles darüber steuern. Allerdings hat das Display am Anfang leider nur verrückte Dinge angezeigt. Wenn ich die Kabel zwischen Platine und Display ordentlich knicke ist das Problem weg und es zeigt alles korrekt an.
          Hört sich komisch an, ist aber tasächlich so. 😁
          Wackler oder irgendetwas konnte ich nicht feststellen. Ich möchte jetzt noch wie auf Github beschrieben einen 560 Ohm Widerstand zwischen Display und LLC hängen. Ich hoffe das hilft.
          Oder hat von euch jemand eine Idee was das sein kann?

          Ich habe mal ein kurzes Video mit angehängt vom Display.
          IMG_4089.mp4

          🤙

          Meistertr P 2 Replies Last reply Reply Quote 0
          • Meistertr
            Meistertr Developer @Laudes last edited by Meistertr

            @laudes wie lange war die leiferzeit? Ich hoffe dass meine bis zum Wochenende kommen und ich es auch endlich fertig bekomme...

            L 1 Reply Last reply Reply Quote 0
            • L
              Laudes @Meistertr last edited by

              @meistertr habe die Versandart "EuroPacket" genommen, war nach einer Woche hier. War echt top!
              Habe das Problem inzischen beheben können. Habe zwischen LLC und dem Display 3x einen 470 Ohm Widerstand gesetzt. Danach war die Disco vorbei und alles funktioniert wie gewünscht.

              1 Reply Last reply Reply Quote 0
              • Meistertr
                Meistertr Developer last edited by

                Kurzer Zwischenstand meinerseits. ich habe einen Lay-Z-Spa Palm Springs mit einer (S100101) Mit 3 Widerständen a 560 Ohm zum Display läuft es alles einwandfrei. auch die Mqtt anbindung an iobroker ging Problemlos (fehlt nur noch ein kleines Übersetzungsscript)

                20220213_174908.jpg 20220213_174923.jpg

                Meistertr M 2 Replies Last reply Reply Quote 0
                • Meistertr
                  Meistertr Developer @Meistertr last edited by

                  hab im ersten Post noch ein kleines Script eingefügt, falls noch jemand Interesse hat, Platinen hab ich noch 2 und und komplett Bausatz noch einen ..

                  1 Reply Last reply Reply Quote 0
                  • M
                    Marc79 @Meistertr last edited by

                    @Meistertr
                    Hi, ich bin total neu auf dem Gebiet. PCB ist gerade in der Mache. Hab leider zu spät gesehen, dass du noch Boards übrig hattest. 😞 Sonst hätte ich sofort zugeschlagen.
                    Nun zu meiner Frage:
                    Da ich zufälligerweise exakt die gleiche Pumpe habe wie du, gehe ich davon aus, dass dein Ansatz bei mir auch funktionieren wird. Ich frage mich nur die ganze Zeit, wo ich die Widerstände genau anlöten muss.
                    Hast du die ins Kabel zum Display gelötet und daher der Schrumpfschlauf? Wenn ja, an welche Kabel oder Pins? Könntest du davon mal ein Foto machen?
                    Und noch eine Frage. Das Gehäuse sieht echt cool aus. Gibt es die Vorlage irgendwo zum Herunterladen? Wäre sehr interessiert. 🙂

                    Danke im Voraus
                    VG
                    Marc

                    Meistertr 2 Replies Last reply Reply Quote 0
                    • Meistertr
                      Meistertr Developer @Marc79 last edited by

                      @marc79 20220203_192359.jpg 3x 560 Ohm zwischen die Kommunikationsleitungen (1,2 = Masse und 5volt, 3,4,5 Kommunikation, 6 Lautsprecher)

                      1 Reply Last reply Reply Quote 0
                      • Meistertr
                        Meistertr Developer @Marc79 last edited by

                        @marc79
                        hier das case
                        https://www.thingiverse.com/thing:5379037

                        M 1 Reply Last reply Reply Quote 0
                        • M
                          Marc79 @Meistertr last edited by

                          @meistertr

                          Vielen lieben Dank. Damit hast du mir mega weitergeholfen. 😃
                          Daran, in ein kleines Stück Platine die Widerstände zu setzen und daran die Drähte zu löten, hab ich gar nicht gedacht. Es kann so einfach sein. 🤦‍♂️

                          Vielen Dank auch für die Vorlage. So sieht das Ganze direkt viel professioneller aus. 🤝

                          Schönen Abend

                          1 Reply Last reply Reply Quote 0
                          • E
                            emblitz last edited by

                            Hallo,

                            ich habe ebenfalls heute meinem Santorini smart gemacht. Super Projekt.
                            In IOBroker bekomme ich über MQTT zwar die Datenpunkte aber keine Werte.
                            Kann mir jemand verraten, was ich nun machen muss um die Werte angezeigt zu bekommen?
                            Wenn ich das o.g. Skript verwenden muss, ist mir nicht klar wie.
                            In den Objekten sieht es dann so aus:
                            2022-05-10-Image 001.jpg
                            LG
                            emblitz.

                            Meistertr T 2 Replies Last reply Reply Quote 0
                            • B
                              BruderBleistift last edited by

                              Ich würde das Projekt ebenfalls gern umsetzen.

                              Ich habe einen Bahamas aus 2021 mit der Pumpe S100101.

                              Habt Ihr einen Tipp, wo ich die Platine günstig anfertigen lassen kann? Bei JLCPCB muss ich leider mind. 5 Stück abnehmen. Da ich aber nur einen Pool habe, reicht mir auch eine Platine 🙂

                              E naofireblade 2 Replies Last reply Reply Quote 0
                              • E
                                emblitz @BruderBleistift last edited by

                                @bruderbleistift
                                Ich hatte genau das gleiche Problem und habe eine einfache Lochrasterplatine bei ebay bestellt und mit Drähten verdrahtet.
                                So viel Arbeit war es nicht und ich musste nicht auf eine Platine lange Zeit warten.

                                LG
                                emblitz

                                1 Reply Last reply Reply Quote 0
                                • naofireblade
                                  naofireblade @BruderBleistift last edited by

                                  @bruderbleistift Hi. Ich habe Interesse an einer Platine und würde mir die Kosten mit dir Teilen, wenn du sie mir in einem Briefumschlag schickst.

                                  M 1 Reply Last reply Reply Quote 0
                                  • M
                                    Marc79 @naofireblade last edited by

                                    @naofireblade
                                    @BruderBleistift

                                    Meine Platinen von JLCPCB sind gerade auf dem Weg zu mir. Könnte euch gegen eine kleine Beteiligung und die Versandkosten jeweils eine schicken. Interesse?

                                    VG
                                    Marc

                                    Crizz K 2 Replies Last reply Reply Quote 0
                                    • Crizz
                                      Crizz @Marc79 last edited by

                                      @marc79
                                      Habe mich extra angemeldet um mitzuteilen, dass meine 5 Platinen heute angekommen sind.
                                      Ich werde davon maximal zwei selber brauchen. Meldet euch falls ihr eine braucht.

                                      Gruß, Chris

                                      Northfox 1 Reply Last reply Reply Quote 0
                                      • Northfox
                                        Northfox @Crizz last edited by

                                        @crizz
                                        Moin!

                                        Ich interessiere mich für eine der Platinen, scheint mir die bessere Lösung als selber nochmal fünf auf den Weg zu bringen.

                                        Gruß

                                        Erik

                                        P 1 Reply Last reply Reply Quote 0
                                        • B
                                          BruderBleistift last edited by

                                          @Marc79 @Crizz Würde euch gern eine Platine abnehmen, aber leider scheinen meine privaten Nachrichten bei euch nicht anzukommen?

                                          Crizz 1 Reply Last reply Reply Quote 0
                                          • Meistertr
                                            Meistertr Developer @emblitz last edited by

                                            @emblitz Wieso hast du es denn über den Hoemassistant adapter angebunden? machs doch direkt über den mqtt adapter..

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            540
                                            Online

                                            31.6k
                                            Users

                                            79.4k
                                            Topics

                                            1.3m
                                            Posts

                                            71
                                            202
                                            26029
                                            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