Gc-simple-home (GCSH) implements a pretty REST server for the Comelit ecosystem (Simple Home, Vedo, and VIP). You can use the GCSH to enable the Voice Control (such as Amazon Alexa or Google Assistant) over the Comelit Simple Home (see the IFTTT section).
GCSH receives a POST call and executes a GET from the serial bridge.
The configuration file (conf/configuration.json) includes all system parameters (such as Comelit Serial Bridge address, module addresses, custom commands, and so on). The configuration can change at runtime (the system will re-load it when something changes). Every env (an env can be a room, i.e., the kitchen) can be addressed with more names. You can set many names by separating them using the | symbol (i.e., kitchen|kitchen one|small kitchen). Below an example, inside the light section, for correctly set light's parameters for the kitchen.
{
"kitchen|kitchen one|small kitchen":
"id":"3",
"type":"env"
}
NOTE: the id should be fetched from the serial bridge. You can use the browser and look at the URL request. You can create your custom env or command.
GCSH loads the configuration at runtime.
- network: includes the listening port, certificates, and token (it can be blank, but it is recommended to set it).
- domotica: it includes the targetAddress (the serial bridge address) . It also includes all "env" such as light, shutter, alarm, scenario, and so on. You can create your custom env.
{
"network":{
"http-port":60001,
"https-port":60002,
"https-key-file":"conf/host.key",
"https-cert-file":"conf/host.crt",
"token":"EA8YpvgiN475TRYujKJs2XP1meQswg"
},
"domotica":{
"systemParameters":{
"targetAddress":"192.168.188.15"
},
"entities":{
"light":{
"commands":{
"on":"http://{targetAddress}/user/action.cgi?type=light&{type}1={id}&_=1548916457530",
"off":"http://{targetAddress}/user/action.cgi?type=light&{type}0={id}&_=1548916457530"
},
"env":{
"ingresso":{
"id":"1",
"type":"env"
},
"cucina":{
"id":"3",
"type":"env"
},
"lavanderia":{
"id":"7",
"type":"env"
},
"bagno|bagno 1":{
"id":"12",
"type":"env"
},
"camera 1|camera matrimoniale":{
"id":"5",
"type":"env"
},
"cabina|cabina armadio":{
"id":"6",
"type":"env"
},
"camera 2":{
"id":"11",
"type":"env"
},
"salotto":{
"id":"1",
"type":"num"
},
"studio":{
"id":"12",
"type":"env"
},
"camera 3":{
"id":"14",
"type":"env"
},
"bagno mansarda|bagno 2":{
"id":"13",
"type":"env"
},
"ripostiglio mansarda|ripostiglio due":{
"id":"12",
"type":"env"
},
"garage":{
"id":"14",
"type":"env"
},
"bagno 3|bagno garage":{
"id":"16",
"type":"env"
}
}
},
"shutter":{
"commands":{
"up":"http://{targetAddress}/user/action.cgi?type=shutter&{type}1={id}&_=1548925715292",
"down":"http://{targetAddress}/user/action.cgi?type=shutter&{type}0={id}&_=1548925715292"
},
"env":{
"salotto":{
"id":"2",
"type":"env"
},
"cucina":{
"id":"3",
"type":"env"
}
}
},
"automation":{
"commands":{
"up":"http://{targetAddress}/user/action.cgi?type=automation&{type}1={id}&_=1573979496806",
"down":"http://{targetAddress}/user/action.cgi?type=automation&{type}1={id}&_=1573979496806"
},
"env":{
"garage":{
"id":"0",
"type":"num"
}
}
},
"clima":{
"commands":{
"on":"http://{targetAddress}/user/action.cgi?type=other&{type}1={id}&_=1548926656038",
"off":"http://{targetAddress}/user/action.cgi?type=other&{type}0={id}&_=1548926656050"
},
"env":{
"home":{
"id":"0",
"type":"num"
}
}
},
"alarm":{
"commands":{
"on":"http://{targetAddress}/user/action.cgi?vedo=1&tot={id}&_=1548938060394",
"off":"http://{targetAddress}/user/action.cgi?vedo=1&dis={id}&_=1548938060479"
},
"env":{
"garage":{
"id":"2",
"type":""
},
"casa":{
"id":"4",
"type":""
},
"mansarda":{
"id":"0",
"type":""
}
}
},
"scenario":{
"commands":{
"on":"http://{targetAddress}/user/action.cgi?scenario={id}&_=1548939193034"
},
"env":{
"luci":{
"id":"0",
"type":""
},
"salotto":{
"id":"4",
"type":""
},
"mansarda":{
"id":"5",
"type":""
}
}
}
}
}
}
The GCSH currentry supports only the POST. Allowed parameters are:
- entity: the entity name such as light, shutter, scenario. (It can be customizable)
- cmd: the command such as on, off. (It can be customizable).
- token: it authenticates the request. It can be left black (dangerous). Please change the default token.
{
"target":"kitchen",
"token":"EA8YpvgiN475TRYujKJs2XP1meQswg",
"cmd":"on",
"entity":"light"
}
If This Then That, also known as IFTTT, is a free web-based service to create chains of simple conditional statements, called applets. An applet is triggered by changes that occur within other web services such as Google Assistant, Amazon Alexa, Gmail, Facebook, Telegram, Instagram, or Pinterest.
- Go to IFTTT.com
- At the top right, click your username New Applet.
- Click this.
- Search for "Google Assistant."
- Click Google Assistant .
- Choose a trigger.
- Set the URL request (e.g. https://myddns.com:/60001)
- Set the POST method
- Set application/json as Content Type
- Set the body
{
"target":"{{TextField}}",
"token":"EA8YpvgiN475TRYujKJs2XP1meQswg",
"cmd":"on",
"entity":"light"
}
- Complete the trigger fields: Enter up to three ways to say your phrase. ...
- Click Create trigger.
Note: you can change/add the entity name according to the configuration JSON file.
You can build the code by using the GO Lang compiler.
go build --ldflags '-w -linkmode external -extldflags "-static"' -o gcsh-alpine main.go
go build -o gcsh-alpine main.go
Run gcsh. It will look at the configuration.json file.
gcsh
GCSH is also available containerized on Docker. https://cloud.docker.com/repository/docker/gcammarata/gcsh
Start the container and expose the port:
docker run -d -i -t -p 60001:60001 --name gcsh gcammarata/gcsh
I suggest using a volume ant than edit the file inside it. In any case, you can pull the configuration.json file, edit it, and push it to the container. GCSH will reload the configuration at runtime.
docker cp gcsh:/root/conf/configuration.json .
docker cp configuration.json gcsh:/root/conf/
Below the docker-compose.yml file
version: '3'
services:
####
# GCSH
####
gcsh:
image: gcammarata/gcsh
network_mode: host
restart: always
volumes:
- gcsh-conf:/root/conf
ports:
- 60001:60001 # GCSH rest server
#========
# Volumes
#========
volumes:
gcsh-conf:
Do not miss to edit the conf/configuration.json file inside the gcsh-conf volume.