Since switching a light outside the house I had troubles that in 90% the switch command was successful, but in 10% it failed.
I don’t know exactly why this happens, because the sender is not very far away from the switch, but it happens. Maybe it’s the concrete ceiling of our cellar that causes this.
Some time ago I installed a second pimatic on a raspi in the cellar, mainly for developing issues. When I switch my lights with this pimatic it never fails. But the whole control (rules etc.) should be from my main pimatic installation, so that the second is just a slave obeying commands.
So I wrote this shell script which is passing the commands to the “slave” pimatic to switch devices configured on that:
#!/bin/bash
###################################################################
#
# Shell script for switching a switch at another pimatic raspi
#
# Arguments:
# DEVICEID: Id of the remote switch device
# COMMAND: "on" or "off" for switching $DEVICEID on/off
#
# e.g.: /path_to_script/script.sh funksteckdose1 on
# Switches the switch with ID funksteckdose1 on
####################################################################
## Edit this ##
PIMATIC_URL="http://xxx.xxx.xxx.xxx:port" # with http:// or https://
PIMATIC_USER="pimatic_username"
PIMATIC_PASS="pimatic_password"
## Script, no editing from here on if you don't know what you're doing ;-) ##
DEVICEID="$1"
COMMAND="$2"
USAGE="\nShell script for switching a remote switch at another pimatic raspi\n\nUsage: /path_to_script/name_of_script DEVICEID COMMAND\n\nArguments:\nDEVICEID: Id of the remote switch device\nCOMMAND: \"on\" or \$
## Check for help
if [[ $1 == "--help" ]]
then
echo -e $USAGE
exit 0
fi
## Checking device id
if [[ $DEVICEID == "" ]]
then
echo "Argument 1 (device id) musst be an alphanumeric string!"
echo -e $USAGE
exit 1
fi
## Checking on/off command
shopt -s nocasematch
if [[ "$COMMAND" == "on" ]]
then
METHOD="turnOn"
else
if [[ "$COMMAND" == "off" ]]
then
METHOD="turnOff"
else
echo "No command found, exiting!"
echo -e $USAGE
shopt -u nocasematch
exit 1
fi
fi
shopt -u nocasematch
## Switch device on remote pimatic
if [[ $DEVICEID != "" ]]
then
pimRsp=$(curl --insecure \
--request GET \
--user "${PIMATIC_USER}:${PIMATIC_PASS}" \
$PIMATIC_URL/api/device/$DEVICEID/$METHOD 2>/dev/null)
## debug ##
#echo $pimRsp
result=$(echo $pimRsp | sed -r 's/^.*("success": (true|false)).*$/\2/')
## debug ##
echo "Trying to switch $DEVICEID to $COMMAND on $PIMATIC_URL: $result. " #>> /tmp/dswebapi.json
#exit 0
fi
exit 0
This is my buttons device on the “master” pimatic:
{
"id": "aussenlichtcontrol",
"name": "Aussenbeleuchtung Weg",
"class": "ButtonsDevice",
"buttons": [
{
"id": "turnOn",
"text": "Licht Weg an"
},
{
"id": "turnOff",
"text": "Licht Weg aus"
}
]
}
These are the rules I use:
{
"id": "aussenbeleuchtung-an",
"name": "Aussenbeleuchtung an",
"rule": "if Licht Weg an button is pressed and FSD Aussenbeleuchtung Weg is turned off then execute \"/root/scripts/switch_switcher.sh fsd07 on\"",
"active": true,
"logging": true
},
{
"id": "aussenbeleuchtung-aus",
"name": "Aussenbeleuchtung aus",
"rule": "if Licht Weg aus button is pressed and FSD Aussenbeleuchtung Weg is turned on then execute \"/root/scripts/switch_switcher.sh fsd07 off\"",
"active": true,
"logging": true
},
And I combine that with rules to switch the lights at the right time:
{
"id": "led-aussenbeleuchtung-an",
"name": "LED Aussenbeleuchtung an",
"rule": "if its sunset starts then press button Licht Weg an",
"active": true,
"logging": true
},
{
"id": "led-aussenbeleuchtung-aus",
"name": "LED Aussenbeleuchtung aus",
"rule": "if its sunrise ends then press button Licht Weg aus",
"active": true,
"logging": true
},
Maybe someone can use this.
Martin