NEWS
Lay-Z-Spa Wifi Control
-
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-SPAWollte am Wochenende mal ein Testaufbau machen... und werde berichten...
PS: ich selbst habe einen Palm-Springs
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 oder hat jemand einen tip wo man gut und günstig platinen bekommt, hab noch nie welche bestellt...
-
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 -
@laudes wie lange war die leiferzeit? Ich hoffe dass meine bis zum Wochenende kommen und ich es auch endlich fertig bekomme...
-
@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. -
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)
-
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 ..
-
@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 -
@marc79 3x 560 Ohm zwischen die Kommunikationsleitungen (1,2 = Masse und 5volt, 3,4,5 Kommunikation, 6 Lautsprecher)
-
@marc79
hier das case
https://www.thingiverse.com/thing:5379037 -
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
-
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:
LG
emblitz. -
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
-
@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 -
@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.
-
@naofireblade
@BruderBleistiftMeine 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 -
@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
-
@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
-
-
@emblitz Wieso hast du es denn über den Hoemassistant adapter angebunden? machs doch direkt über den mqtt adapter..