From 10aabde26add6eb3dacdbf9b6602497a14ff68ae Mon Sep 17 00:00:00 2001 From: theyosh Date: Sun, 9 Sep 2018 21:43:36 +0200 Subject: [PATCH] Second attempt light state for webcams. #184 --- locales/en_US/LC_MESSAGES/terrariumpi.mo | Bin 76091 -> 76187 bytes locales/en_US/LC_MESSAGES/terrariumpi.po | 193 ++++++++++++----------- locales/terrariumpi.pot | 189 +++++++++++----------- terrariumEngine.py | 9 ++ terrariumTranslations.py | 1 + terrariumWebcam.py | 21 ++- views/webcam_settings.tpl | 16 +- 7 files changed, 232 insertions(+), 197 deletions(-) diff --git a/locales/en_US/LC_MESSAGES/terrariumpi.mo b/locales/en_US/LC_MESSAGES/terrariumpi.mo index 537292bfed53ddbeadd18e46b6596cc83ac2e942..a2769c09612d75664b6620d768532ef7b2f4121b 100644 GIT binary patch delta 14905 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 diff --git a/locales/en_US/LC_MESSAGES/terrariumpi.po b/locales/en_US/LC_MESSAGES/terrariumpi.po index d38781989..ef94e5579 100644 --- a/locales/en_US/LC_MESSAGES/terrariumpi.po +++ b/locales/en_US/LC_MESSAGES/terrariumpi.po @@ -5,8 +5,8 @@ msgid "" msgstr "" "Project-Id-Version: TerrariumPI 3.8.4\n" -"POT-Creation-Date: 2018-09-09 13:52+CEST\n" -"PO-Revision-Date: 2018-09-09 13:52+0200\n" +"POT-Creation-Date: 2018-09-09 21:40+CEST\n" +"PO-Revision-Date: 2018-09-09 21:40+0200\n" "Last-Translator: Joshua (TheYOSH) Rubingh \n" "Language-Team: \n" "Language: en_US\n" @@ -16,16 +16,16 @@ msgstr "" "Generated-By: pygettext.py 1.5\n" -#: terrariumEngine.py:457 views/dashboard.tpl:7 +#: terrariumEngine.py:466 views/dashboard.tpl:7 #: views/inc/usage_dashboard.tpl:87 views/system_status.tpl:230 msgid "Uptime" msgstr "Uptime" -#: terrariumEngine.py:458 +#: terrariumEngine.py:467 msgid "Load" msgstr "Load" -#: terrariumEngine.py:459 +#: terrariumEngine.py:468 msgid "CPU Temp." msgstr "CPU Temp." @@ -209,40 +209,44 @@ msgstr "Shows the webcam preview image." msgid "Enabled or disable image archiving based on motion detection." msgstr "Enabled or disable image archiving based on motion detection." -#: terrariumTranslations.py:77 +#: terrariumTranslations.py:74 +msgid "Select the environment light state when enabling archiving." +msgstr "Select the environment light state when enabling archiving." + +#: terrariumTranslations.py:78 msgid "Holds the audio playlist name." msgstr "Holds the audio playlist name." -#: terrariumTranslations.py:78 +#: terrariumTranslations.py:79 msgid "Holds the time when the playlist should be started." msgstr "Holds the time when the playlist should be started." -#: terrariumTranslations.py:79 +#: terrariumTranslations.py:80 msgid "Holds the time when the playlist should be stopped." msgstr "Holds the time when the playlist should be stopped." -#: terrariumTranslations.py:80 +#: terrariumTranslations.py:81 msgid "Holds the volume for this playlist." msgstr "Holds the volume for this playlist." -#: terrariumTranslations.py:81 +#: terrariumTranslations.py:82 msgid "Toggle on to enable repeating of the audio files." msgstr "Toggle on to enable repeating of the audio files." -#: terrariumTranslations.py:82 +#: terrariumTranslations.py:83 msgid "Toggle on to enable shuffeling of the audio files." msgstr "Toggle on to enable shuffeling of the audio files." -#: terrariumTranslations.py:83 +#: terrariumTranslations.py:84 msgid "Select the audio files for this playlist. It is possible to select the same audio file in multiple playlists." msgstr "Select the audio files for this playlist. It is possible to select the same audio file in multiple playlists." -#: terrariumTranslations.py:87 +#: terrariumTranslations.py:88 msgid "Select the mode on which this environment part be put on and off. Select '%s' to use the sun rise and sun set at your location. This will make the amount of lighting variable to the actual amount of daylight. When selecting '%s', the light will put on and off at selected times." msgstr "Select the mode on which this environment part be put on and off. Select '%s' to use the sun rise and sun set at your location. This will make the amount of lighting variable to the actual amount of daylight. When selecting '%s', the light will put on and off at selected times." -#: terrariumTranslations.py:87 terrariumTranslations.py:91 -#: terrariumTranslations.py:92 views/dashboard.tpl:83 views/dashboard.tpl:118 +#: terrariumTranslations.py:88 terrariumTranslations.py:92 +#: terrariumTranslations.py:93 views/dashboard.tpl:83 views/dashboard.tpl:118 #: views/dashboard.tpl:171 views/dashboard.tpl:224 views/dashboard.tpl:277 #: views/dashboard.tpl:330 views/dashboard.tpl:383 views/dashboard.tpl:436 #: views/dashboard.tpl:489 views/inc/usage_environment.tpl:34 @@ -256,7 +260,7 @@ msgstr "Select the mode on which this environment part be put on and off. Select msgid "Timer" msgstr "Timer" -#: terrariumTranslations.py:87 terrariumTranslations.py:99 +#: terrariumTranslations.py:88 terrariumTranslations.py:100 #: views/inc/menu.tpl:30 views/inc/usage_environment.tpl:35 #: views/inc/usage_environment.tpl:231 views/inc/usage_environment.tpl:325 #: views/inc/usage_weather.tpl:13 views/inc/usage_weather.tpl:82 @@ -268,243 +272,243 @@ msgstr "Timer" msgid "Weather" msgstr "Weather" -#: terrariumTranslations.py:88 +#: terrariumTranslations.py:89 msgid "Select the sensors that are used to control this environment part. When selecting multiple sensors, the average is calculated to determine the final values." msgstr "Select the sensors that are used to control this environment part. When selecting multiple sensors, the average is calculated to determine the final values." -#: terrariumTranslations.py:89 +#: terrariumTranslations.py:90 msgid "Holds the value in degrees which the sensors are changing when it become night. Use positive numbers to increase the values and negative numbers to lower the values." msgstr "Holds the value in degrees which the sensors are changing when it become night. Use positive numbers to increase the values and negative numbers to lower the values." -#: terrariumTranslations.py:90 +#: terrariumTranslations.py:91 msgid "Holds the soure that is used to determing when it is day or night." msgstr "Holds the soure that is used to determing when it is day or night." -#: terrariumTranslations.py:91 +#: terrariumTranslations.py:92 msgid "Enter the time when this environment part should be put on. Only available when running in '%s' mode." msgstr "Enter the time when this environment part should be put on. Only available when running in '%s' mode." -#: terrariumTranslations.py:92 +#: terrariumTranslations.py:93 msgid "Enter the time when this environment part should be put off. Only available when running in '%s' mode." msgstr "Enter the time when this environment part should be put off. Only available when running in '%s' mode." -#: terrariumTranslations.py:93 +#: terrariumTranslations.py:94 msgid "Holds the period in minutes that this environment part is powered on withing the total timer window." msgstr "Holds the period in minutes that this environment part is powered on withing the total timer window." -#: terrariumTranslations.py:94 +#: terrariumTranslations.py:95 msgid "Holds the period in minutes that this environment part is powered off withing the total timer window." msgstr "Holds the period in minutes that this environment part is powered off withing the total timer window." -#: terrariumTranslations.py:95 +#: terrariumTranslations.py:96 msgid "How much time must there be between two actions and after start up. Enter the amount of seconds in which this environment part can settle." msgstr "How much time must there be between two actions and after start up. Enter the amount of seconds in which this environment part can settle." -#: terrariumTranslations.py:96 +#: terrariumTranslations.py:97 msgid "Holds the amount of seconds that this environment part is powered on when the value is out of range." msgstr "Holds the amount of seconds that this environment part is powered on when the value is out of range." -#: terrariumTranslations.py:97 +#: terrariumTranslations.py:98 msgid "Enter the maximum amount of time in hours. When the time between on and off is more then this maximum, the on and off time will be shifted more to each other." msgstr "Enter the maximum amount of time in hours. When the time between on and off is more then this maximum, the on and off time will be shifted more to each other." -#: terrariumTranslations.py:98 +#: terrariumTranslations.py:99 msgid "Enter the minimum amount of time in hours. When the time between on and off is less then this amount of hours, the on and off time will be widened until the minimum amount of hours entered here." msgstr "Enter the minimum amount of time in hours. When the time between on and off is less then this amount of hours, the on and off time will be widened until the minimum amount of hours entered here." -#: terrariumTranslations.py:99 +#: terrariumTranslations.py:100 msgid "Enter the amount of hours that the power on and off times should shift. Is only needed when running in the '%s' mode. Enter a positive number for adding hours to the start time. Use negative numbers for subtracting from the start time." msgstr "Enter the amount of hours that the power on and off times should shift. Is only needed when running in the '%s' mode. Enter a positive number for adding hours to the start time. Use negative numbers for subtracting from the start time." -#: terrariumTranslations.py:100 +#: terrariumTranslations.py:101 msgid "Select the power switches that should be used when the alarms or timers are hit. Select all needed switches below." msgstr "Select the power switches that should be used when the alarms or timers are hit. Select all needed switches below." -#: terrariumTranslations.py:101 +#: terrariumTranslations.py:102 msgid "Holds the water volume in liters." msgstr "Holds the water volume in liters." -#: terrariumTranslations.py:102 +#: terrariumTranslations.py:103 msgid "Holds the water tank height in cm or inches." msgstr "Holds the water tank height in cm or inches." -#: terrariumTranslations.py:103 +#: terrariumTranslations.py:104 msgid "Holds the distance between top of the liquid when full and the sensor in cm or inches." msgstr "Holds the distance between top of the liquid when full and the sensor in cm or inches." -#: terrariumTranslations.py:104 +#: terrariumTranslations.py:105 msgid "Select when the power switches can toggle. When lights are on, off or just always" msgstr "Select when the power switches can toggle. When lights are on, off or just always" -#: terrariumTranslations.py:105 +#: terrariumTranslations.py:106 msgid "Select when the power switches can toggle. When the door is open, cosed or just always" msgstr "Select when the power switches can toggle. When the door is open, cosed or just always" -#: terrariumTranslations.py:109 +#: terrariumTranslations.py:110 msgid "Holds the email address on which you would like to receive messages." msgstr "Holds the email address on which you would like to receive messages." -#: terrariumTranslations.py:110 +#: terrariumTranslations.py:111 msgid "Holds the mail server hostname or IP." msgstr "Holds the mail server hostname or IP." -#: terrariumTranslations.py:111 +#: terrariumTranslations.py:112 msgid "Holds the mail server portnumber. SSL and TLS will be autodetected." msgstr "Holds the mail server portnumber. SSL and TLS will be autodetected." -#: terrariumTranslations.py:112 +#: terrariumTranslations.py:113 msgid "Holds the username for authentication with the mailserver if needed." msgstr "Holds the username for authentication with the mailserver if needed." -#: terrariumTranslations.py:113 +#: terrariumTranslations.py:114 msgid "Holds the password for authentication with the mailserver if needed." msgstr "Holds the password for authentication with the mailserver if needed." -#: terrariumTranslations.py:115 +#: terrariumTranslations.py:116 msgid "Holds the I2C address of the LCD screen. Use the value found with i2cdetect. Add ,[NR] to change the I2C bus." msgstr "Holds the I2C address of the LCD screen. Use the value found with i2cdetect. Add ,[NR] to change the I2C bus." -#: terrariumTranslations.py:116 +#: terrariumTranslations.py:117 msgid "Holds the LCD screen resolution." msgstr "Holds the LCD screen resolution." -#: terrariumTranslations.py:117 +#: terrariumTranslations.py:118 msgid "Reserve first LCD line for static title." msgstr "Reserve first LCD line for static title." -#: terrariumTranslations.py:119 +#: terrariumTranslations.py:120 msgid "Holds your Twitter consumer key. More information %shere%s" msgstr "Holds your Twitter consumer key. More information %shere%s" -#: terrariumTranslations.py:120 +#: terrariumTranslations.py:121 msgid "Holds your Twitter consumer secret. More information %shere%s" msgstr "Holds your Twitter consumer secret. More information %shere%s" -#: terrariumTranslations.py:121 +#: terrariumTranslations.py:122 msgid "Holds your Twitter access token. More information %shere%s" msgstr "Holds your Twitter access token. More information %shere%s" -#: terrariumTranslations.py:122 +#: terrariumTranslations.py:123 msgid "Holds your Twitter access token secret. More information %shere%s" msgstr "Holds your Twitter access token secret. More information %shere%s" -#: terrariumTranslations.py:124 +#: terrariumTranslations.py:125 msgid "Holds the PushOver API token. More information %shere%s" msgstr "Holds the PushOver API token. More information %shere%s" -#: terrariumTranslations.py:125 +#: terrariumTranslations.py:126 msgid "Holds the PushOver API user key. More information %shere%s" msgstr "Holds the PushOver API user key. More information %shere%s" -#: terrariumTranslations.py:127 +#: terrariumTranslations.py:128 msgid "Holds the Telegram Bot token. More information %shere%s" msgstr "Holds the Telegram Bot token. More information %shere%s" -#: terrariumTranslations.py:128 +#: terrariumTranslations.py:129 msgid "Holds the Telegram username that is allowed for receiving messages. Can be multiple usernames seperated by a comma. More information %shere%s" msgstr "Holds the Telegram username that is allowed for receiving messages. Can be multiple usernames seperated by a comma. More information %shere%s" -#: terrariumTranslations.py:129 +#: terrariumTranslations.py:130 msgid "Holds the proxy address in form of [schema]://[user]:[password]@[server.com]:[port]. Can either be socks5 or http(s) for schema." msgstr "Holds the proxy address in form of [schema]://[user]:[password]@[server.com]:[port]. Can either be socks5 or http(s) for schema." -#: terrariumTranslations.py:133 +#: terrariumTranslations.py:134 msgid "Choose your interface language." msgstr "Choose your interface language." -#: terrariumTranslations.py:134 +#: terrariumTranslations.py:135 msgid "Holds the distance type used by distance sensors." msgstr "Holds the distance type used by distance sensors." -#: terrariumTranslations.py:135 terrariumTranslations.py:136 +#: terrariumTranslations.py:136 terrariumTranslations.py:137 msgid "Holds the username which can make changes (Administrator)." msgstr "Holds the username which can make changes (Administrator)." -#: terrariumTranslations.py:137 +#: terrariumTranslations.py:138 msgid "Enter the new password for the administration user. Leaving empty will not change the password!" msgstr "Enter the new password for the administration user. Leaving empty will not change the password!" -#: terrariumTranslations.py:138 +#: terrariumTranslations.py:139 msgid "Enter the current password in order to change the password." msgstr "Enter the current password in order to change the password." -#: terrariumTranslations.py:139 +#: terrariumTranslations.py:140 msgid "Toggle on or off full authentication. When on, you need to authenticate at all times." msgstr "Toggle on or off full authentication. When on, you need to authenticate at all times." -#: terrariumTranslations.py:140 +#: terrariumTranslations.py:141 msgid "Holds the external calendar url." msgstr "Holds the external calendar url." -#: terrariumTranslations.py:141 +#: terrariumTranslations.py:142 msgid "Toggle on or off horizontal graph legends. Reload the webinterface after changing the setting." msgstr "Toggle on or off horizontal graph legends. Reload the webinterface after changing the setting." -#: terrariumTranslations.py:142 +#: terrariumTranslations.py:143 msgid "Holds the soundcard that is used for playing audio." msgstr "Holds the soundcard that is used for playing audio." -#: terrariumTranslations.py:143 +#: terrariumTranslations.py:144 msgid "Holds the amount of power in Wattage that the Raspberry PI uses including all USB equipment." msgstr "Holds the amount of power in Wattage that the Raspberry PI uses including all USB equipment." -#: terrariumTranslations.py:144 +#: terrariumTranslations.py:145 msgid "Holds the amount of euro/dollar per 1 kW/h (1 Kilowatt per hour)." msgstr "Holds the amount of euro/dollar per 1 kW/h (1 Kilowatt per hour)." -#: terrariumTranslations.py:145 +#: terrariumTranslations.py:146 msgid "Holds the amount of euro/dollar per 1000 liters water." msgstr "Holds the amount of euro/dollar per 1000 liters water." -#: terrariumTranslations.py:146 +#: terrariumTranslations.py:147 msgid "Choose the temperature indicator. The software will recalculate to the chosen indicator." msgstr "Choose the temperature indicator. The software will recalculate to the chosen indicator." -#: terrariumTranslations.py:147 +#: terrariumTranslations.py:148 msgid "Holds the host name or IP address on which the software will listen for connections. Enter :: for all addresses to bind." msgstr "Holds the host name or IP address on which the software will listen for connections. Enter :: for all addresses to bind." -#: terrariumTranslations.py:148 +#: terrariumTranslations.py:149 msgid "Holds the port number on which the software is listening for connections." msgstr "Holds the port number on which the software is listening for connections." -#: terrariumTranslations.py:149 +#: terrariumTranslations.py:150 msgid "Holds the port number on which the OWFS software is running. Leave empty to disable OWFS support." msgstr "Holds the port number on which the OWFS software is running. Leave empty to disable OWFS support." -#: terrariumTranslations.py:153 +#: terrariumTranslations.py:154 msgid "Holds the name of the animal." msgstr "Holds the name of the animal." -#: terrariumTranslations.py:154 +#: terrariumTranslations.py:155 msgid "Holds the type of the animal" msgstr "Holds the type of the animal" -#: terrariumTranslations.py:155 +#: terrariumTranslations.py:156 msgid "Holds the gender of the animal." msgstr "Holds the gender of the animal." -#: terrariumTranslations.py:156 +#: terrariumTranslations.py:157 msgid "Holds the day of birth of the animal." msgstr "Holds the day of birth of the animal." -#: terrariumTranslations.py:157 +#: terrariumTranslations.py:158 msgid "Holds the species name of the animal." msgstr "Holds the species name of the animal." -#: terrariumTranslations.py:158 +#: terrariumTranslations.py:159 msgid "Holds the latin name of the animal." msgstr "Holds the latin name of the animal." -#: terrariumTranslations.py:159 +#: terrariumTranslations.py:160 msgid "Holds a small description about the animal." msgstr "Holds a small description about the animal." -#: terrariumTranslations.py:160 +#: terrariumTranslations.py:161 msgid "Holds a link to more information." msgstr "Holds a link to more information." -#: terrariumWebcam.py:282 +#: terrariumWebcam.py:284 msgid "Offline since" msgstr "Offline since" @@ -777,7 +781,7 @@ msgstr "new" #: views/audio_playlist.tpl:112 views/sensor_settings.tpl:99 #: views/sensor_settings.tpl:128 views/switch_settings.tpl:109 #: views/switch_settings.tpl:143 views/webcam_settings.tpl:105 -#: views/webcam_settings.tpl:119 +#: views/webcam_settings.tpl:119 views/webcam_settings.tpl:138 msgid "Select an option" msgstr "Select an option" @@ -785,13 +789,13 @@ msgstr "Select an option" #: views/inc/usage_doors.tpl:70 views/inc/usage_sensors.tpl:81 #: views/inc/usage_switches.tpl:70 views/inc/usage_webcams.tpl:66 #: views/sensor_settings.tpl:188 views/switch_settings.tpl:200 -#: views/webcam_settings.tpl:142 +#: views/webcam_settings.tpl:152 msgid "Close" msgstr "Close" #: views/audio_playlist.tpl:124 views/door_settings.tpl:95 #: views/sensor_settings.tpl:189 views/switch_settings.tpl:201 -#: views/webcam_settings.tpl:143 +#: views/webcam_settings.tpl:153 msgid "Add" msgstr "Add" @@ -2623,6 +2627,7 @@ msgstr "Light state" #: views/system_environment.tpl:1088 views/system_environment.tpl:1164 #: views/system_environment.tpl:1463 views/system_environment.tpl:1539 #: views/system_environment.tpl:1674 views/system_environment.tpl:1750 +#: views/webcam_settings.tpl:140 msgid "On" msgstr "On" @@ -2633,6 +2638,7 @@ msgstr "On" #: views/system_environment.tpl:1089 views/system_environment.tpl:1165 #: views/system_environment.tpl:1464 views/system_environment.tpl:1540 #: views/system_environment.tpl:1675 views/system_environment.tpl:1751 +#: views/webcam_settings.tpl:141 msgid "Off" msgstr "Off" @@ -2650,6 +2656,7 @@ msgstr "Off" #: views/system_environment.tpl:1541 views/system_environment.tpl:1553 #: views/system_environment.tpl:1676 views/system_environment.tpl:1688 #: views/system_environment.tpl:1752 views/system_environment.tpl:1764 +#: views/webcam_settings.tpl:139 msgid "Ignore" msgstr "Ignore" @@ -2890,49 +2897,45 @@ msgid "Motion" msgstr "Motion" #: views/webcam_settings.tpl:122 -msgid "Motion daytime" -msgstr "Motion daytime" - -#: views/webcam_settings.tpl:123 -msgid "Motion nighttime" -msgstr "Motion nighttime" - -#: views/webcam_settings.tpl:124 msgid "1 minute" msgstr "1 minute" -#: views/webcam_settings.tpl:125 +#: views/webcam_settings.tpl:123 msgid "5 minutes" msgstr "5 minutes" -#: views/webcam_settings.tpl:126 +#: views/webcam_settings.tpl:124 msgid "15 minutes" msgstr "15 minutes" -#: views/webcam_settings.tpl:127 +#: views/webcam_settings.tpl:125 msgid "30 minutes" msgstr "30 minutes" -#: views/webcam_settings.tpl:128 +#: views/webcam_settings.tpl:126 msgid "1 hour" msgstr "1 hour" -#: views/webcam_settings.tpl:129 +#: views/webcam_settings.tpl:127 msgid "3 hours" msgstr "3 hours" -#: views/webcam_settings.tpl:130 +#: views/webcam_settings.tpl:128 msgid "6 hours" msgstr "6 hours" -#: views/webcam_settings.tpl:131 +#: views/webcam_settings.tpl:129 msgid "12 hours" msgstr "12 hours" -#: views/webcam_settings.tpl:132 +#: views/webcam_settings.tpl:130 msgid "1 day" msgstr "1 day" +#: views/webcam_settings.tpl:135 +msgid "Archive light state" +msgstr "Archive light state" + #: Missing text string msgid "1Wire bus" msgstr "1Wire bus" diff --git a/locales/terrariumpi.pot b/locales/terrariumpi.pot index c30b5cb74..7491cedc0 100644 --- a/locales/terrariumpi.pot +++ b/locales/terrariumpi.pot @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: TerrariumPI 3.8.4\n" -"POT-Creation-Date: 2018-09-09 13:52+CEST\n" +"POT-Creation-Date: 2018-09-09 21:40+CEST\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -15,16 +15,16 @@ msgstr "" "Generated-By: pygettext.py 1.5\n" -#: terrariumEngine.py:457 views/dashboard.tpl:7 +#: terrariumEngine.py:466 views/dashboard.tpl:7 #: views/inc/usage_dashboard.tpl:87 views/system_status.tpl:230 msgid "Uptime" msgstr "" -#: terrariumEngine.py:458 +#: terrariumEngine.py:467 msgid "Load" msgstr "" -#: terrariumEngine.py:459 +#: terrariumEngine.py:468 msgid "CPU Temp." msgstr "" @@ -208,40 +208,44 @@ msgstr "" msgid "Enabled or disable image archiving based on motion detection." msgstr "" -#: terrariumTranslations.py:77 -msgid "Holds the audio playlist name." +#: terrariumTranslations.py:74 +msgid "Select the environment light state when enabling archiving." msgstr "" #: terrariumTranslations.py:78 -msgid "Holds the time when the playlist should be started." +msgid "Holds the audio playlist name." msgstr "" #: terrariumTranslations.py:79 -msgid "Holds the time when the playlist should be stopped." +msgid "Holds the time when the playlist should be started." msgstr "" #: terrariumTranslations.py:80 -msgid "Holds the volume for this playlist." +msgid "Holds the time when the playlist should be stopped." msgstr "" #: terrariumTranslations.py:81 -msgid "Toggle on to enable repeating of the audio files." +msgid "Holds the volume for this playlist." msgstr "" #: terrariumTranslations.py:82 -msgid "Toggle on to enable shuffeling of the audio files." +msgid "Toggle on to enable repeating of the audio files." msgstr "" #: terrariumTranslations.py:83 +msgid "Toggle on to enable shuffeling of the audio files." +msgstr "" + +#: terrariumTranslations.py:84 msgid "Select the audio files for this playlist. It is possible to select the same audio file in multiple playlists." msgstr "" -#: terrariumTranslations.py:87 +#: terrariumTranslations.py:88 msgid "Select the mode on which this environment part be put on and off. Select '%s' to use the sun rise and sun set at your location. This will make the amount of lighting variable to the actual amount of daylight. When selecting '%s', the light will put on and off at selected times." msgstr "" -#: terrariumTranslations.py:87 terrariumTranslations.py:91 -#: terrariumTranslations.py:92 views/dashboard.tpl:83 views/dashboard.tpl:118 +#: terrariumTranslations.py:88 terrariumTranslations.py:92 +#: terrariumTranslations.py:93 views/dashboard.tpl:83 views/dashboard.tpl:118 #: views/dashboard.tpl:171 views/dashboard.tpl:224 views/dashboard.tpl:277 #: views/dashboard.tpl:330 views/dashboard.tpl:383 views/dashboard.tpl:436 #: views/dashboard.tpl:489 views/inc/usage_environment.tpl:34 @@ -255,7 +259,7 @@ msgstr "" msgid "Timer" msgstr "" -#: terrariumTranslations.py:87 terrariumTranslations.py:99 +#: terrariumTranslations.py:88 terrariumTranslations.py:100 #: views/inc/menu.tpl:30 views/inc/usage_environment.tpl:35 #: views/inc/usage_environment.tpl:231 views/inc/usage_environment.tpl:325 #: views/inc/usage_weather.tpl:13 views/inc/usage_weather.tpl:82 @@ -267,243 +271,243 @@ msgstr "" msgid "Weather" msgstr "" -#: terrariumTranslations.py:88 +#: terrariumTranslations.py:89 msgid "Select the sensors that are used to control this environment part. When selecting multiple sensors, the average is calculated to determine the final values." msgstr "" -#: terrariumTranslations.py:89 +#: terrariumTranslations.py:90 msgid "Holds the value in degrees which the sensors are changing when it become night. Use positive numbers to increase the values and negative numbers to lower the values." msgstr "" -#: terrariumTranslations.py:90 +#: terrariumTranslations.py:91 msgid "Holds the soure that is used to determing when it is day or night." msgstr "" -#: terrariumTranslations.py:91 +#: terrariumTranslations.py:92 msgid "Enter the time when this environment part should be put on. Only available when running in '%s' mode." msgstr "" -#: terrariumTranslations.py:92 +#: terrariumTranslations.py:93 msgid "Enter the time when this environment part should be put off. Only available when running in '%s' mode." msgstr "" -#: terrariumTranslations.py:93 +#: terrariumTranslations.py:94 msgid "Holds the period in minutes that this environment part is powered on withing the total timer window." msgstr "" -#: terrariumTranslations.py:94 +#: terrariumTranslations.py:95 msgid "Holds the period in minutes that this environment part is powered off withing the total timer window." msgstr "" -#: terrariumTranslations.py:95 +#: terrariumTranslations.py:96 msgid "How much time must there be between two actions and after start up. Enter the amount of seconds in which this environment part can settle." msgstr "" -#: terrariumTranslations.py:96 +#: terrariumTranslations.py:97 msgid "Holds the amount of seconds that this environment part is powered on when the value is out of range." msgstr "" -#: terrariumTranslations.py:97 +#: terrariumTranslations.py:98 msgid "Enter the maximum amount of time in hours. When the time between on and off is more then this maximum, the on and off time will be shifted more to each other." msgstr "" -#: terrariumTranslations.py:98 +#: terrariumTranslations.py:99 msgid "Enter the minimum amount of time in hours. When the time between on and off is less then this amount of hours, the on and off time will be widened until the minimum amount of hours entered here." msgstr "" -#: terrariumTranslations.py:99 +#: terrariumTranslations.py:100 msgid "Enter the amount of hours that the power on and off times should shift. Is only needed when running in the '%s' mode. Enter a positive number for adding hours to the start time. Use negative numbers for subtracting from the start time." msgstr "" -#: terrariumTranslations.py:100 +#: terrariumTranslations.py:101 msgid "Select the power switches that should be used when the alarms or timers are hit. Select all needed switches below." msgstr "" -#: terrariumTranslations.py:101 +#: terrariumTranslations.py:102 msgid "Holds the water volume in liters." msgstr "" -#: terrariumTranslations.py:102 +#: terrariumTranslations.py:103 msgid "Holds the water tank height in cm or inches." msgstr "" -#: terrariumTranslations.py:103 +#: terrariumTranslations.py:104 msgid "Holds the distance between top of the liquid when full and the sensor in cm or inches." msgstr "" -#: terrariumTranslations.py:104 +#: terrariumTranslations.py:105 msgid "Select when the power switches can toggle. When lights are on, off or just always" msgstr "" -#: terrariumTranslations.py:105 +#: terrariumTranslations.py:106 msgid "Select when the power switches can toggle. When the door is open, cosed or just always" msgstr "" -#: terrariumTranslations.py:109 +#: terrariumTranslations.py:110 msgid "Holds the email address on which you would like to receive messages." msgstr "" -#: terrariumTranslations.py:110 +#: terrariumTranslations.py:111 msgid "Holds the mail server hostname or IP." msgstr "" -#: terrariumTranslations.py:111 +#: terrariumTranslations.py:112 msgid "Holds the mail server portnumber. SSL and TLS will be autodetected." msgstr "" -#: terrariumTranslations.py:112 +#: terrariumTranslations.py:113 msgid "Holds the username for authentication with the mailserver if needed." msgstr "" -#: terrariumTranslations.py:113 +#: terrariumTranslations.py:114 msgid "Holds the password for authentication with the mailserver if needed." msgstr "" -#: terrariumTranslations.py:115 +#: terrariumTranslations.py:116 msgid "Holds the I2C address of the LCD screen. Use the value found with i2cdetect. Add ,[NR] to change the I2C bus." msgstr "" -#: terrariumTranslations.py:116 +#: terrariumTranslations.py:117 msgid "Holds the LCD screen resolution." msgstr "" -#: terrariumTranslations.py:117 +#: terrariumTranslations.py:118 msgid "Reserve first LCD line for static title." msgstr "" -#: terrariumTranslations.py:119 +#: terrariumTranslations.py:120 msgid "Holds your Twitter consumer key. More information %shere%s" msgstr "" -#: terrariumTranslations.py:120 +#: terrariumTranslations.py:121 msgid "Holds your Twitter consumer secret. More information %shere%s" msgstr "" -#: terrariumTranslations.py:121 +#: terrariumTranslations.py:122 msgid "Holds your Twitter access token. More information %shere%s" msgstr "" -#: terrariumTranslations.py:122 +#: terrariumTranslations.py:123 msgid "Holds your Twitter access token secret. More information %shere%s" msgstr "" -#: terrariumTranslations.py:124 +#: terrariumTranslations.py:125 msgid "Holds the PushOver API token. More information %shere%s" msgstr "" -#: terrariumTranslations.py:125 +#: terrariumTranslations.py:126 msgid "Holds the PushOver API user key. More information %shere%s" msgstr "" -#: terrariumTranslations.py:127 +#: terrariumTranslations.py:128 msgid "Holds the Telegram Bot token. More information %shere%s" msgstr "" -#: terrariumTranslations.py:128 +#: terrariumTranslations.py:129 msgid "Holds the Telegram username that is allowed for receiving messages. Can be multiple usernames seperated by a comma. More information %shere%s" msgstr "" -#: terrariumTranslations.py:129 +#: terrariumTranslations.py:130 msgid "Holds the proxy address in form of [schema]://[user]:[password]@[server.com]:[port]. Can either be socks5 or http(s) for schema." msgstr "" -#: terrariumTranslations.py:133 +#: terrariumTranslations.py:134 msgid "Choose your interface language." msgstr "" -#: terrariumTranslations.py:134 +#: terrariumTranslations.py:135 msgid "Holds the distance type used by distance sensors." msgstr "" -#: terrariumTranslations.py:135 terrariumTranslations.py:136 +#: terrariumTranslations.py:136 terrariumTranslations.py:137 msgid "Holds the username which can make changes (Administrator)." msgstr "" -#: terrariumTranslations.py:137 +#: terrariumTranslations.py:138 msgid "Enter the new password for the administration user. Leaving empty will not change the password!" msgstr "" -#: terrariumTranslations.py:138 +#: terrariumTranslations.py:139 msgid "Enter the current password in order to change the password." msgstr "" -#: terrariumTranslations.py:139 +#: terrariumTranslations.py:140 msgid "Toggle on or off full authentication. When on, you need to authenticate at all times." msgstr "" -#: terrariumTranslations.py:140 +#: terrariumTranslations.py:141 msgid "Holds the external calendar url." msgstr "" -#: terrariumTranslations.py:141 +#: terrariumTranslations.py:142 msgid "Toggle on or off horizontal graph legends. Reload the webinterface after changing the setting." msgstr "" -#: terrariumTranslations.py:142 +#: terrariumTranslations.py:143 msgid "Holds the soundcard that is used for playing audio." msgstr "" -#: terrariumTranslations.py:143 +#: terrariumTranslations.py:144 msgid "Holds the amount of power in Wattage that the Raspberry PI uses including all USB equipment." msgstr "" -#: terrariumTranslations.py:144 +#: terrariumTranslations.py:145 msgid "Holds the amount of euro/dollar per 1 kW/h (1 Kilowatt per hour)." msgstr "" -#: terrariumTranslations.py:145 +#: terrariumTranslations.py:146 msgid "Holds the amount of euro/dollar per 1000 liters water." msgstr "" -#: terrariumTranslations.py:146 +#: terrariumTranslations.py:147 msgid "Choose the temperature indicator. The software will recalculate to the chosen indicator." msgstr "" -#: terrariumTranslations.py:147 +#: terrariumTranslations.py:148 msgid "Holds the host name or IP address on which the software will listen for connections. Enter :: for all addresses to bind." msgstr "" -#: terrariumTranslations.py:148 +#: terrariumTranslations.py:149 msgid "Holds the port number on which the software is listening for connections." msgstr "" -#: terrariumTranslations.py:149 +#: terrariumTranslations.py:150 msgid "Holds the port number on which the OWFS software is running. Leave empty to disable OWFS support." msgstr "" -#: terrariumTranslations.py:153 +#: terrariumTranslations.py:154 msgid "Holds the name of the animal." msgstr "" -#: terrariumTranslations.py:154 +#: terrariumTranslations.py:155 msgid "Holds the type of the animal" msgstr "" -#: terrariumTranslations.py:155 +#: terrariumTranslations.py:156 msgid "Holds the gender of the animal." msgstr "" -#: terrariumTranslations.py:156 +#: terrariumTranslations.py:157 msgid "Holds the day of birth of the animal." msgstr "" -#: terrariumTranslations.py:157 +#: terrariumTranslations.py:158 msgid "Holds the species name of the animal." msgstr "" -#: terrariumTranslations.py:158 +#: terrariumTranslations.py:159 msgid "Holds the latin name of the animal." msgstr "" -#: terrariumTranslations.py:159 +#: terrariumTranslations.py:160 msgid "Holds a small description about the animal." msgstr "" -#: terrariumTranslations.py:160 +#: terrariumTranslations.py:161 msgid "Holds a link to more information." msgstr "" -#: terrariumWebcam.py:282 +#: terrariumWebcam.py:284 msgid "Offline since" msgstr "" @@ -776,7 +780,7 @@ msgstr "" #: views/audio_playlist.tpl:112 views/sensor_settings.tpl:99 #: views/sensor_settings.tpl:128 views/switch_settings.tpl:109 #: views/switch_settings.tpl:143 views/webcam_settings.tpl:105 -#: views/webcam_settings.tpl:119 +#: views/webcam_settings.tpl:119 views/webcam_settings.tpl:138 msgid "Select an option" msgstr "" @@ -784,13 +788,13 @@ msgstr "" #: views/inc/usage_doors.tpl:70 views/inc/usage_sensors.tpl:81 #: views/inc/usage_switches.tpl:70 views/inc/usage_webcams.tpl:66 #: views/sensor_settings.tpl:188 views/switch_settings.tpl:200 -#: views/webcam_settings.tpl:142 +#: views/webcam_settings.tpl:152 msgid "Close" msgstr "" #: views/audio_playlist.tpl:124 views/door_settings.tpl:95 #: views/sensor_settings.tpl:189 views/switch_settings.tpl:201 -#: views/webcam_settings.tpl:143 +#: views/webcam_settings.tpl:153 msgid "Add" msgstr "" @@ -2622,6 +2626,7 @@ msgstr "" #: views/system_environment.tpl:1088 views/system_environment.tpl:1164 #: views/system_environment.tpl:1463 views/system_environment.tpl:1539 #: views/system_environment.tpl:1674 views/system_environment.tpl:1750 +#: views/webcam_settings.tpl:140 msgid "On" msgstr "" @@ -2632,6 +2637,7 @@ msgstr "" #: views/system_environment.tpl:1089 views/system_environment.tpl:1165 #: views/system_environment.tpl:1464 views/system_environment.tpl:1540 #: views/system_environment.tpl:1675 views/system_environment.tpl:1751 +#: views/webcam_settings.tpl:141 msgid "Off" msgstr "" @@ -2649,6 +2655,7 @@ msgstr "" #: views/system_environment.tpl:1541 views/system_environment.tpl:1553 #: views/system_environment.tpl:1676 views/system_environment.tpl:1688 #: views/system_environment.tpl:1752 views/system_environment.tpl:1764 +#: views/webcam_settings.tpl:139 msgid "Ignore" msgstr "" @@ -2889,47 +2896,43 @@ msgid "Motion" msgstr "" #: views/webcam_settings.tpl:122 -msgid "Motion daytime" +msgid "1 minute" msgstr "" #: views/webcam_settings.tpl:123 -msgid "Motion nighttime" +msgid "5 minutes" msgstr "" #: views/webcam_settings.tpl:124 -msgid "1 minute" +msgid "15 minutes" msgstr "" #: views/webcam_settings.tpl:125 -msgid "5 minutes" +msgid "30 minutes" msgstr "" #: views/webcam_settings.tpl:126 -msgid "15 minutes" +msgid "1 hour" msgstr "" #: views/webcam_settings.tpl:127 -msgid "30 minutes" +msgid "3 hours" msgstr "" #: views/webcam_settings.tpl:128 -msgid "1 hour" +msgid "6 hours" msgstr "" #: views/webcam_settings.tpl:129 -msgid "3 hours" +msgid "12 hours" msgstr "" #: views/webcam_settings.tpl:130 -msgid "6 hours" -msgstr "" - -#: views/webcam_settings.tpl:131 -msgid "12 hours" +msgid "1 day" msgstr "" -#: views/webcam_settings.tpl:132 -msgid "1 day" +#: views/webcam_settings.tpl:135 +msgid "Archive light state" msgstr "" #: Missing text string diff --git a/terrariumEngine.py b/terrariumEngine.py index 3a2d0acd8..63492c1e7 100644 --- a/terrariumEngine.py +++ b/terrariumEngine.py @@ -331,6 +331,8 @@ def __load_webcams(self, data = None): width = 640 height = 480 archive = False + archive_light = 'ignore' + if 'resolution_width' in webcamdata and 'resolution_height' in webcamdata: width = webcamdata['resolution_width'] height = webcamdata['resolution_height'] @@ -338,12 +340,16 @@ def __load_webcams(self, data = None): if 'archive' in webcamdata: archive = webcamdata['archive'] + if 'archivelight' in webcamdata: + archive_light = webcamdata['archivelight'] + webcam = terrariumWebcam(None, webcamdata['location'], webcamdata['name'], webcamdata['rotation'], width,height, archive, + archive_light, self.environment) self.webcams[webcam.get_id()] = webcam else: @@ -362,6 +368,9 @@ def __load_webcams(self, data = None): if 'archive' in webcamdata: webcam.set_archive(webcamdata['archive']) + if 'archivelight' in webcamdata: + webcam.set_archive_light(webcamdata['archivelight']) + seen_webcams.append(webcam.get_id()) if reloading: diff --git a/terrariumTranslations.py b/terrariumTranslations.py index 43e3eb576..6bf7be2d0 100644 --- a/terrariumTranslations.py +++ b/terrariumTranslations.py @@ -71,6 +71,7 @@ def __load(self): self.translations['webcam_field_rotation'] = _('Holds the webcam rotation of the image.') self.translations['webcam_field_preview'] = _('Shows the webcam preview image.') self.translations['webcam_field_archive'] = _('Enabled or disable image archiving based on motion detection.') + self.translations['webcam_field_archive_light'] = _('Select the environment light state when enabling archiving.') # End webcam # Audio diff --git a/terrariumWebcam.py b/terrariumWebcam.py index c6dd0386b..aa1eb01fa 100644 --- a/terrariumWebcam.py +++ b/terrariumWebcam.py @@ -33,7 +33,7 @@ class terrariumWebcam(object): UPDATE_TIMEOUT = 60 VALID_ROTATIONS = ['0','90','180','270','h','v'] - def __init__(self, id, location, name = '', rotation = '0', width = 640, height = 480, archive = False, environment = None): + def __init__(self, id, location, name = '', rotation = '0', width = 640, height = 480, archive = False, archive_light = 'ignore', environment = None): self.id = id self.type = None self.environment = environment @@ -58,6 +58,7 @@ def __init__(self, id, location, name = '', rotation = '0', width = 640, height self.set_name(name) self.set_rotation(rotation) self.set_archive(archive) + self.set_archive_light(archive_light) if self.id is None: self.id = md5(b'' + self.get_location()).hexdigest() @@ -126,7 +127,10 @@ def __get_raw_image(self): self.raw_image.save(self.get_raw_image(),'jpeg',quality=terrariumWebcam.JPEG_QUALITY) logger.debug('Saved raw image %s to disk: %s' % (self.get_name(),self.get_raw_image())) - if self.get_archive() != 'disabled': + if self.get_archive() != 'disabled' and \ + (self.get_archive_light() == 'ignore' or \ + self.get_archive_light() == 'on' and self.environment is not None and self.environment.light_on() or \ + self.get_archive_light() == 'off' and self.environment is not None and not self.environment.light_on()): image_path = terrariumWebcam.ARCHIVE_LOCATION + (datetime.datetime.now()).strftime("%Y/%m/%d") if not os.path.isdir(image_path): try: @@ -136,9 +140,7 @@ def __get_raw_image(self): image_path += '/' + self.get_id() + '_archive_' + str(int(time.time())) + '.jpg' - if (self.get_archive() == 'motion') or \ - (self.get_archive() == 'motion-day' and self.environment is not None and self.environment.light_on()) or \ - (self.get_archive() == 'motion-night' and self.environment is not None and not self.environment.light_on()): + if self.get_archive() == 'motion': # https://www.pyimagesearch.com/2015/05/25/basic-motion-detection-and-tracking-with-python-and-opencv/ try: current_image = cv2.imread(self.get_raw_image()) @@ -175,7 +177,7 @@ def __get_raw_image(self): except Exception, ex: print ex - elif 'motion' not in self.get_archive() and int(time.time()) - self.__last_archive >= int(self.get_archive()): + elif int(time.time()) - self.__last_archive >= int(self.get_archive()): shutil.copyfile(self.get_raw_image(),image_path) logger.info('Saved webcam %s image for archive due to timer interval %s seconds' % (self.get_name(),self.get_archive())) self.__last_archive = int(time.time()) @@ -392,6 +394,7 @@ def get_data(self,archive = False): 'image': self.get_raw_image(), 'preview': self.get_preview_image(), 'archive': self.get_archive(), + 'archivelight': self.get_archive_light(), 'archive_images' : [] } @@ -449,6 +452,12 @@ def get_archive(self): def set_archive(self,enabled): self.archive = enabled + def get_archive_light(self): + return self.archive_state + + def set_archive_light(self,state): + self.archive_state = state + def get_state(self): return terrariumWebcam.ONLINE if self.state else terrariumWebcam.OFFLINE diff --git a/views/webcam_settings.tpl b/views/webcam_settings.tpl index bdf92f4d7..ea204382b 100644 --- a/views/webcam_settings.tpl +++ b/views/webcam_settings.tpl @@ -112,15 +112,13 @@ -
+
+
+ +
+ +
+
+