Application Setup

Copy to Raspi

Use the helper script to copy everything needed to the Raspi:

cd path/to/safechicken
raspberry/ <IP of your Raspberry>

This script also installs the package python3-venv and installs the virtual environment.

Manual Start

cd ~/safechicken
source venv/bin/activate
python3 -m safechicken.main config.json

Check the console logs it it’s running or not and also the status LEDs.

System Auto Start

The following code is automatically executed in the script, but could be done manually on the Raspberry side:

sudo cp /home/pi/safechicken/raspberry/safechicken.service /etc/systemd/system/
sudo chmod +x /etc/systemd/system/safechicken.service
sudo systemctl daemon-reload
sudo systemctl enable safechicken.service

Safe Chicken Configuration

Set your home coordinates in the config.json file otherwise the open/close times according to sunrise/sunset times does not match. Also set the MQTT broker host name according to your home network.

  "time_control": {
    "latitude": 47.0,
    "longitude": 7.0,
    "minutes_after_sunrise": 15,
    "minutes_after_sunset": 30
  "mqtt_client": {
    "broker_hostname": "",
    "broker_port": 1883,
    "client_name": "SafeChickenController"
  "topic_conf": {
    "sun_times": "safechicken/sun_times",
    "door_sun_times_conf": "safechicken/door_sun_times_conf",
    "door_prio": "safechicken/door_prio",
    "static_time": "safechicken/static_time",
    "force_operation": "safechicken/force_operation",
    "command_out": "safechicken/command_out",
    "last_commands": "safechicken/last_commands",
    "door_closed_log": "safechicken/door_closed_log",
    "door_lifesign": "safechicken/door_lifesign"
  "controller": {
    "force_time_expire_minutes": 180
  "dispatcher": {
    "start_action_delay": 2
  "io": {
    "out_ready_led": 4,
    "out_network_status_led": 17,
    "out_open_command": 5,
    "out_close_command": 6,
    "in_door_closed": {"pin": 25, "active_state": true},
    "command_out_pulse_time_s": 2