From 925f421e514f71281d3cf1c4bfec4cd3905a091b Mon Sep 17 00:00:00 2001 From: Martijn Poppen Date: Sat, 23 Nov 2024 15:06:01 +0100 Subject: [PATCH] NEW: Add new trigger cards for Washer and Dryer --- app.json | 168 ++++++++++++++++++++++++ drivers/dryer/device.js | 35 ++++- drivers/dryer/driver.flow.compose.json | 51 +++++++ drivers/washer/device.js | 39 +++++- drivers/washer/driver.flow.compose.json | 68 ++++++++++ 5 files changed, 349 insertions(+), 12 deletions(-) diff --git a/app.json b/app.json index 63dc62c..2edcc7d 100644 --- a/app.json +++ b/app.json @@ -78,6 +78,78 @@ } ] }, + { + "id": "samsung_dryer_job_started", + "title": { + "en": "A drying job has started", + "nl": "Een droogklus is gestart", + "da": "En tørreopgave er startet", + "de": "Ein Trocknungsvorgang hat begonnen", + "es": "Un trabajo de secado ha comenzado", + "fr": "Un travail de séchage a commencé", + "it": "Un lavoro di asciugatura è iniziato", + "no": "En tørkejobb har startet", + "sv": "Ett torkjobb har startat", + "pl": "Rozpoczęto suszenie", + "ru": "Сушка начата", + "ko": "건조 작업이 시작되었습니다" + }, + "args": [ + { + "type": "device", + "name": "device", + "filter": "driver_id=dryer" + } + ] + }, + { + "id": "samsung_dryer_job_spin", + "title": { + "en": "A drying job is spinning", + "nl": "Een droogklus draait", + "da": "En tørreopgave spinner", + "de": "Ein Trocknungsvorgang dreht", + "es": "Un trabajo de secado está girando", + "fr": "Un travail de séchage tourne", + "it": "Un lavoro di asciugatura sta girando", + "no": "En tørkejobb spinner", + "sv": "Ett torkjobb snurrar", + "pl": "Suszenie się kręci", + "ru": "Сушка крутится", + "ko": "건조 작업이 회전 중입니다" + }, + "args": [ + { + "type": "device", + "name": "device", + "filter": "driver_id=dryer" + } + ] + }, + { + "id": "samsung_dryer_job_rinse", + "title": { + "en": "A drying job is rinsing", + "nl": "Een droogklus spoelt", + "da": "En tørreopgave skyller", + "de": "Ein Trocknungsvorgang spült", + "es": "Un trabajo de secado está enjuagando", + "fr": "Un travail de séchage rince", + "it": "Un lavoro di asciugatura sta risciacquando", + "no": "En tørkejobb skyller", + "sv": "Ett torkjobb sköljer", + "pl": "Suszenie płucze", + "ru": "Сушка промывается", + "ko": "건조 작업이 헹구는 중입니다" + }, + "args": [ + { + "type": "device", + "name": "device", + "filter": "driver_id=dryer" + } + ] + }, { "id": "samsung_oven_job_finished", "title": { @@ -126,6 +198,102 @@ } ] }, + { + "id": "samsung_washer_job_started", + "title": { + "en": "A washing job has started", + "nl": "Een wasbeurt is gestart", + "da": "En vaskeopgave er startet", + "de": "Ein Waschgang hat begonnen", + "es": "Un trabajo de lavado ha comenzado", + "fr": "Un cycle de lavage a commencé", + "it": "Un lavaggio è iniziato", + "no": "En vask har startet", + "sv": "En tvätt har startat", + "pl": "Rozpoczęto pranie", + "ru": "Стирка начата", + "ko": "세탁 작업이 시작되었습니다" + }, + "args": [ + { + "type": "device", + "name": "device", + "filter": "driver_id=washer" + } + ] + }, + { + "id": "samsung_washer_job_weight_sensing", + "title": { + "en": "Weight sensing", + "nl": "Gewichtsdetectie", + "da": "Vægtregistrering", + "de": "Gewichtserkennung", + "es": "Detección de peso", + "fr": "Détection de poids", + "it": "Rilevamento del peso", + "no": "Vektdeteksjon", + "sv": "Viktdetektering", + "pl": "Wykrywanie wagi", + "ru": "Определение веса", + "ko": "중량 감지" + }, + "args": [ + { + "type": "device", + "name": "device", + "filter": "driver_id=washer" + } + ] + }, + { + "id": "samsung_washer_job_pre_wash", + "title": { + "en": "PreWash", + "nl": "Voorwas", + "da": "Forvask", + "de": "Vorwäsche", + "es": "Prelavado", + "fr": "Prélavage", + "it": "Prelavaggio", + "no": "Forvask", + "sv": "Förtvätt", + "pl": "Pranie wstępne", + "ru": "Предварительная стирка", + "ko": "사전 세탁" + }, + "args": [ + { + "type": "device", + "name": "device", + "filter": "driver_id=washer" + } + ] + }, + { + "id": "samsung_washer_job_rinse", + "title": { + "en": "Started rinsing", + "nl": "Begonnen met spoelen", + "da": "Begyndte at skylle", + "de": "Hat mit dem Spülen begonnen", + "es": "Comenzó a enjuagar", + "fr": "A commencé à rincer", + "it": "Ha iniziato a sciacquare", + "no": "Startet skylling", + "sv": "Började skölja", + "pl": "Rozpoczęto płukanie", + "ru": "Начался процесс полоскания", + "ko": "헹굼 시작됨" + }, + "args": [ + { + "type": "device", + "name": "device", + "filter": "driver_id=washer" + } + ] + }, { "id": "alarm_samsung_washer_addwash_door_open_true", "title": { diff --git a/drivers/dryer/device.js b/drivers/dryer/device.js index 5db68cd..bd4ba78 100644 --- a/drivers/dryer/device.js +++ b/drivers/dryer/device.js @@ -29,12 +29,35 @@ module.exports = class SmartThingsDeviceDryer extends SmartThingsDevice { smartThingsCapabilityId: 'samsungce.dryerOperatingState', smartThingsAttributeId: 'washerJobState', async onReport({ value }) { - if (value === 'finished') { - this.homey.flow - .getDeviceTriggerCard('samsung_dryer_job_finished') - .trigger(this) - .catch(this.error); - } + const homeyCapabilityId = 'samsung_dryer_current_job_state'; + + const flowArray = [ + { + value: 'finished', + flow: 'samsung_dryer_job_finished', + }, + { + value: 'dry', + flow: 'samsung_dryer_job_started', + }, + { + value: 'spin', + flow: 'samsung_dryer_job_spin', + }, + { + value: 'rinse', + flow: 'samsung_dryer_job_rinse', + }, + ]; + + flowArray.forEach(f => { + if (value === f.value && this.getCapabilityValue(homeyCapabilityId) !== f.value) { + this.homey.flow + .getDeviceTriggerCard(f.flow) + .trigger(this) + .catch(this.error); + } + }); return value; }, diff --git a/drivers/dryer/driver.flow.compose.json b/drivers/dryer/driver.flow.compose.json index ad35b19..9def7d9 100644 --- a/drivers/dryer/driver.flow.compose.json +++ b/drivers/dryer/driver.flow.compose.json @@ -16,6 +16,57 @@ "ru": "Сушка завершена", "ko": "건조 작업이 완료되었습니다" } + }, + { + "id": "samsung_dryer_job_started", + "title": { + "en": "A drying job has started", + "nl": "Een droogklus is gestart", + "da": "En tørreopgave er startet", + "de": "Ein Trocknungsvorgang hat begonnen", + "es": "Un trabajo de secado ha comenzado", + "fr": "Un travail de séchage a commencé", + "it": "Un lavoro di asciugatura è iniziato", + "no": "En tørkejobb har startet", + "sv": "Ett torkjobb har startat", + "pl": "Rozpoczęto suszenie", + "ru": "Сушка начата", + "ko": "건조 작업이 시작되었습니다" + } + }, + { + "id": "samsung_dryer_job_spin", + "title": { + "en": "A drying job is spinning", + "nl": "Een droogklus draait", + "da": "En tørreopgave spinner", + "de": "Ein Trocknungsvorgang dreht", + "es": "Un trabajo de secado está girando", + "fr": "Un travail de séchage tourne", + "it": "Un lavoro di asciugatura sta girando", + "no": "En tørkejobb spinner", + "sv": "Ett torkjobb snurrar", + "pl": "Suszenie się kręci", + "ru": "Сушка крутится", + "ko": "건조 작업이 회전 중입니다" + } + }, + { + "id": "samsung_dryer_job_rinse", + "title": { + "en": "A drying job is rinsing", + "nl": "Een droogklus spoelt", + "da": "En tørreopgave skyller", + "de": "Ein Trocknungsvorgang spült", + "es": "Un trabajo de secado está enjuagando", + "fr": "Un travail de séchage rince", + "it": "Un lavoro di asciugatura sta risciacquando", + "no": "En tørkejobb skyller", + "sv": "Ett torkjobb sköljer", + "pl": "Suszenie płucze", + "ru": "Сушка промывается", + "ko": "건조 작업이 헹구는 중입니다" + } } ] } \ No newline at end of file diff --git a/drivers/washer/device.js b/drivers/washer/device.js index 2e88fa3..40b6efb 100644 --- a/drivers/washer/device.js +++ b/drivers/washer/device.js @@ -29,12 +29,39 @@ module.exports = class SmartThingsDeviceWasher extends SmartThingsDevice { smartThingsCapabilityId: 'samsungce.washerOperatingState', smartThingsAttributeId: 'washerJobState', async onReport({ value }) { - if (value === 'finished') { - this.homey.flow - .getDeviceTriggerCard('samsung_washer_job_finished') - .trigger(this) - .catch(this.error); - } + const homeyCapabilityId = 'samsung_washer_current_job_state'; + + const flowArray = [ + { + value: 'finished', + flow: 'samsung_washer_job_finished', + }, + { + value: 'wash', + flow: 'samsung_washer_job_started', + }, + { + value: 'weightSensing', + flow: 'samsung_washer_job_weight_sensing', + }, + { + value: 'preWash', + flow: 'samsung_washer_job_pre_wash', + }, + { + value: 'rinse', + flow: 'samsung_washer_job_rinse', + }, + ]; + + flowArray.forEach(f => { + if (value === f.value && this.getCapabilityValue(homeyCapabilityId) !== f.value) { + this.homey.flow + .getDeviceTriggerCard(f.flow) + .trigger(this) + .catch(this.error); + } + }); return value; }, diff --git a/drivers/washer/driver.flow.compose.json b/drivers/washer/driver.flow.compose.json index caff301..93e19e6 100644 --- a/drivers/washer/driver.flow.compose.json +++ b/drivers/washer/driver.flow.compose.json @@ -17,6 +17,74 @@ "ko": "세탁 작업이 완료되었습니다" } }, + { + "id": "samsung_washer_job_started", + "title": { + "en": "A washing job has started", + "nl": "Een wasbeurt is gestart", + "da": "En vaskeopgave er startet", + "de": "Ein Waschgang hat begonnen", + "es": "Un trabajo de lavado ha comenzado", + "fr": "Un cycle de lavage a commencé", + "it": "Un lavaggio è iniziato", + "no": "En vask har startet", + "sv": "En tvätt har startat", + "pl": "Rozpoczęto pranie", + "ru": "Стирка начата", + "ko": "세탁 작업이 시작되었습니다" + } + }, + { + "id": "samsung_washer_job_weight_sensing", + "title": { + "en": "Weight sensing", + "nl": "Gewichtsdetectie", + "da": "Vægtregistrering", + "de": "Gewichtserkennung", + "es": "Detección de peso", + "fr": "Détection de poids", + "it": "Rilevamento del peso", + "no": "Vektdeteksjon", + "sv": "Viktdetektering", + "pl": "Wykrywanie wagi", + "ru": "Определение веса", + "ko": "중량 감지" + } + }, + { + "id": "samsung_washer_job_pre_wash", + "title": { + "en": "PreWash", + "nl": "Voorwas", + "da": "Forvask", + "de": "Vorwäsche", + "es": "Prelavado", + "fr": "Prélavage", + "it": "Prelavaggio", + "no": "Forvask", + "sv": "Förtvätt", + "pl": "Pranie wstępne", + "ru": "Предварительная стирка", + "ko": "사전 세탁" + } + }, + { + "id": "samsung_washer_job_rinse", + "title": { + "en": "Started rinsing", + "nl": "Begonnen met spoelen", + "da": "Begyndte at skylle", + "de": "Hat mit dem Spülen begonnen", + "es": "Comenzó a enjuagar", + "fr": "A commencé à rincer", + "it": "Ha iniziato a sciacquare", + "no": "Startet skylling", + "sv": "Började skölja", + "pl": "Rozpoczęto płukanie", + "ru": "Начался процесс полоскания", + "ko": "헹굼 시작됨" + } + }, { "id": "alarm_samsung_washer_addwash_door_open_true", "title": {