package Ġde . mic rom ata . mer lin . sm arth ome . examples . homeassistant _ k nx Ċ Ċ import Ġde . mic rom ata . mer lin . excel . Excel Workbook Ċ import Ġde . mic rom ata . mer lin . sm arth ome . examples . homeassistant _ k nx . data . Data Storage Ċ import Ġde . mic rom ata . mer lin . sm arth ome . examples . homeassistant _ k nx . data . K nx Item Ċ import Ġde . mic rom ata . mer lin . sm arth ome . examples . homeassistant _ k nx . data . K nx Item Category Ċ import Ġde . mic rom ata . mer lin . velocity . Velocity Helper Ċ import Ġmu . Kotlin Logging Ċ import Ġorg . apache . velocity . Velocity Context Ċ import Ġjava . io . File Ċ import Ġkotlin . system . exit Process Ċ Ċ private Ġval Ġlog Ġ= ĠKotlin Logging . logger Ġ{} Ċ Ċ class ĠHome Assistant Builder ( val Ġtemplate Dir : ĠFile ) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġout Dir : ĠFile Ġ= ĠFile (" out ") ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! out Dir . exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog . info (" Creating Ġoutput Ġdirectory Ġ'${ out Dir . absolute Path }. ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġout Dir . mkdir () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġlog . info (" Using Ġoutput Ġdirectory Ġ'${ out Dir . absolute Path }. ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrun ( xls File : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġexcel Workbook Ġ= ĠExcel Workbook ( xls File ) ĊĠĠĠĠĠĠĠ ĠK nx Items Reader (). read K NX Items ( excel Workbook ) ĊĊĠĠĠĠĠĠĠ Ġcreate Entity Yaml ( K nx Item Category . BINARY _ SENSOR , Ġ" k nx _ binary _ sensor . yaml ") ĊĠĠĠĠĠĠĠ Ġcreate Entity Yaml ( K nx Item Category . SENSOR , Ġ" k nx _ sensor . yaml ") ĊĠĠĠĠĠĠĠ Ġcreate Entity Yaml ( K nx Item Category . SWITCH , Ġ" k nx _ switch . yaml ") ĊĠĠĠĠĠĠĠ Ġcreate Entity Yaml ( K nx Item Category . LIGHT , Ġ" k nx _ light . yaml ") ĊĊĠĠĠĠĠĠĠ Ġcreate Lo vel ace Yaml (" UG ") ĊĠĠĠĠĠĠĠ Ġcreate Lo vel ace Yaml (" EG ") ĊĠĠĠĠĠĠĠ Ġcreate Lo vel ace Yaml (" OG ") ĊĠĠĠĠĠĠĠ Ġcreate Lo vel ace Yaml (" NB ") ĊĠĠĠĠĠĠĠ Ġcreate Lo vel ace Yaml (" Gar age ") ĊĠĠĠĠĠĠĠ Ġcreate Lo vel ace Yaml (" UG ", Ġ" EG ", Ġ" OG ", Ġ" NB ", Ġ" Gar age ") ĊĠĠĠĠĠĠĠ Ġcreate Lo vel ace Yaml (" B WM ") ĊĊĠĠĠĠĠĠĠ Ġ/* ĊĠĠĠĠĠĠĠ Ġval Ġtemplate Dir Ġ= ĠFile (" mer lin - sm arth ome / examples / open hab - k nx /") ĊĠĠĠĠĠĠĠ Ġval Ġout Dir Ġ= ĠFile (" mer lin - sm arth ome / out / examples / open hab - k nx ") ĊĠĠĠĠĠĠĠ Ġval Ġconfig Dir Ġ= Ġcreate Dir ( out Dir , Ġ" config ") ĊĠĠĠĠĠĠĠ Ġval Ġitems Dir Ġ= Ġcreate Dir ( config Dir , Ġ" items ") ĊĠĠĠĠĠĠĠ Ġval Ġpersistence Dir Ġ= Ġcreate Dir ( config Dir , Ġ" persistence ") ĊĠĠĠĠĠĠĠ Ġval Ġs item aps Dir Ġ= Ġcreate Dir ( config Dir , Ġ" s item aps ") ĊĠĠĠĠĠĠĠ Ġval Ġthings Dir Ġ= Ġcreate Dir ( config Dir , Ġ" things ") ĊĠĠĠĠĠĠĠ ĠVe locity Helper . merge ( template Dir , Ġ" k nx . things ", Ġthings Dir , Ġcontext ) ĊĠĠĠĠĠĠĠ ĠVe locity Helper . merge ( template Dir , Ġ" k nx . items ", Ġitems Dir , Ġcontext ) ĊĠĠĠĠĠĠĠ ĠVe locity Helper . merge ( template Dir , Ġ" zon em inder . things ", Ġthings Dir , Ġcontext ) ĊĠĠĠĠĠĠĠ ĠVe locity Helper . merge ( template Dir , Ġ" jdbc . persist ", Ġpersistence Dir , Ġcontext ) ĊĠĠĠĠĠĠĠ ĠVe locity Helper . merge ( template Dir , Ġ" home . sitemap ", Ġs item aps Dir , Ġcontext ) */ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Entity Yaml ( category : ĠK nx Item Category , Ġtemplate File : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġitems Ġ= ĠData Storage . instance . filter Items ( category ) ĊĠĠĠĠĠĠĠ Ġwrite ( items , Ġtemplate File , Ġtemplate File ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Lo vel ace Yaml ( var arg Ġareas : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġorig Items Ġ= ĠData Storage . instance . filter Items ( K nx Item Category . BINARY _ SENSOR ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . state Filter Ġ== Ġtrue Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġitems Ġ= Ġmutable ListOf < K nx Item >() ĊĠĠĠĠĠĠĠ Ġareas . forEach Ġ{ Ġarea Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġorig Items . forEach Ġ{ Ġitem Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( item . area Ġ== Ġarea ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitems . add ( item ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġwrite ( items , Ġ" ui _ lo vel ace _ area _ E MA . yaml ", Ġ" ui _ lo vel ace _${ areas . join ToString ("_ ") }_ E MA . yaml ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġwrite ( items : ĠList < K nx Item >, Ġtemplate File : ĠString , Ġout File : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcontext Ġ= ĠVe locity Context () ĊĠĠĠĠĠĠĠ Ġcontext . put (" data ", ĠData Storage . instance ) ĊĠĠĠĠĠĠĠ Ġcontext . put (" items ", Ġitems ) ĊĠĠĠĠĠĠĠ Ġlog . info Ġ{ Ġ" Processing Ġ${ items . size } Ġitems ..." Ġ} ĊĠĠĠĠĠĠĠ ĠVe locity Helper . merge ( File ( template Dir , Ġtemplate File ), ĠFile ( out Dir , Ġout File ), Ġcontext ) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġmain ( args : ĠArray < String >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( args . size Ġ< Ġ 1 Ġ|| Ġargs . size Ġ> Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog . error (" Please Ġcall Ġwith Ġoptional Ġtemplate Ġdir Ġas Ġfirst Ġargument Ġand ĠExcel - file Ġto Ġparse Ġas Ġse con de Ġargument : Ġgradle Ġrun Ġ-- args =\" < template - dir > Ġ< xls - file > \" ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexit Process ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtemplate Dir Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( args . size Ġ== Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFile (" mer lin - sm arth ome / examples / homeassistant - k nx /") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFile ( args [ 0 ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! template Dir . exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog . error (" Template Ġdirectory Ġ'${ template Dir . absolute Path }' Ġdoesn 't Ġexist .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexit Process ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog . info (" Using Ġtemplate Ġdirectory : Ġ${ template Dir . absolute Path }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfilename Ġ= Ġargs [ args . size Ġ- Ġ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġx ls File Ġ= ĠFile ( filename ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! xls File . can Read ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog . error (" Can 't Ġread Ġx ls Ġfile Ġ'${ xls File . absolute File }'. ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexit Process ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog . info Ġ{ Ġ" Reading Ġx ls Ġfile : Ġ'${ xls File . absolute File }' ..." Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠHome Assistant Builder ( template Dir ). run ( filename ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ