diff --git a/docs/_static/faq/notifications-notify-my-android-create-key.png b/docs/_static/faq/notifications-notify-my-android-create-key.png deleted file mode 100644 index 1fccd0aa2..000000000 Binary files a/docs/_static/faq/notifications-notify-my-android-create-key.png and /dev/null differ diff --git a/docs/_static/faq/notifications-notify-my-android-get-key.png b/docs/_static/faq/notifications-notify-my-android-get-key.png deleted file mode 100644 index 4d415931c..000000000 Binary files a/docs/_static/faq/notifications-notify-my-android-get-key.png and /dev/null differ diff --git a/docs/_static/faq/notifications-pushover-get-key.png b/docs/_static/faq/notifications-pushover-get-key.png new file mode 100644 index 000000000..a43f5d237 Binary files /dev/null and b/docs/_static/faq/notifications-pushover-get-key.png differ diff --git a/docs/changelog.rst b/docs/changelog.rst index 6b77c79fd..b4438faf7 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -18,6 +18,16 @@ Please make sure you have a fresh **database backup** before upgrading! Upgradin +v1.18.0 - 2018-06-05 +^^^^^^^^^^^^^^^^^^^^ + +**Tickets resolved in this release:** + +- [`#246 `_] Add support for Pushover +- [`#479 `_] Tijdsnotatie grafieken gelijktrekken +- [`#480 `_] Requirements update (June 2018) + + v1.17.0 - 2018-05-25 ^^^^^^^^^^^^^^^^^^^^ diff --git a/docs/conf.py b/docs/conf.py index f90f26756..65597c993 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -15,6 +15,7 @@ import sys import os +import datetime # If extensions (or modules to document with autodoc) are in another directory, # add these directories to sys.path here. If the directory is relative to the @@ -48,7 +49,7 @@ # General information about the project. project = 'DSMR Reader' -copyright = '2016, Dennis Siemensma' +copyright = '2015 - {}, Dennis Siemensma'.format(datetime.datetime.now().year) author = 'Dennis Siemensma' # The version info for the project you're documenting, acts as replacement for diff --git a/docs/credits.rst b/docs/credits.rst index 84341b04e..7dbc789eb 100644 --- a/docs/credits.rst +++ b/docs/credits.rst @@ -48,7 +48,7 @@ Listed in any order, sorted by name. - `Paul Vinken `_ - `perryodk `_ - `pyrocumulus `_ -- `raoulteeuwen `_ +- `raoulteeuwen `_ - `Sander de Leeuw `_ - `Sevickson `_ - `ThinkPadNL `_ diff --git a/docs/locale/nl/LC_MESSAGES/application.mo b/docs/locale/nl/LC_MESSAGES/application.mo index 6fc3ebe2f..d2a025b25 100644 Binary files a/docs/locale/nl/LC_MESSAGES/application.mo and b/docs/locale/nl/LC_MESSAGES/application.mo differ diff --git a/docs/locale/nl/LC_MESSAGES/application.po b/docs/locale/nl/LC_MESSAGES/application.po index c878a6c5e..653ee64c8 100644 --- a/docs/locale/nl/LC_MESSAGES/application.po +++ b/docs/locale/nl/LC_MESSAGES/application.po @@ -1,3 +1,4 @@ + msgid "" msgstr "" "Project-Id-Version: DSMR Reader v1.x\n" @@ -5,12 +6,11 @@ msgstr "" "Last-Translator: Dennis Siemensma \n" "Language: nl\n" "Language-Team: Dennis Siemensma \n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"Plural-Forms: nplurals=2; plural=(n != 1)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.5.1\n" -"X-Generator: Poedit 1.8.7.1\n" #: ../../application.rst:2 msgid "Using the application" @@ -22,19 +22,20 @@ msgstr "DSMR 2.x (oude meters)" #: ../../application.rst:14 msgid "" -"Note: The application's default DSMR version used is 4.x. This version is also " -"the **default** for any recent smart meters placed at your home." +"Note: The application's default DSMR version used is 4.x. This version is" +" also the **default** for any recent smart meters placed at your home." msgstr "" -"N.B.: De standaard DSMR-versie die de applicatie gebruikt is DSMR 4.x. Dit is " -"namelijk de **standaardversie** voor nieuwe/recent geplaatste slimme meters." +"N.B.: De standaard DSMR-versie die de applicatie gebruikt is DSMR 4.x. " +"Dit is namelijk de **standaardversie** voor nieuwe/recent geplaatste " +"slimme meters." #: ../../application.rst:18 msgid "" -"Make sure to alter this setting in the backend's configuration page to DSMR 2.x " -"when required!" +"Make sure to alter this setting in the backend's configuration page to " +"DSMR 2.x when required!" msgstr "" -"Wanneer je een meter met DSMR 2.x hebt, zul je deze in het beheerderpaneel " -"onder ``dataloggerconfiguratie`` moet instellen." +"Wanneer je een meter met DSMR 2.x hebt, zul je deze in het " +"beheerderpaneel onder ``dataloggerconfiguratie`` moet instellen." #: ../../application.rst:22 msgid "Viewing the application" @@ -42,32 +43,34 @@ msgstr "Bekijk applicatie" #: ../../application.rst:23 msgid "" -"Now it's time to view the application in your browser to check whether the GUI " -"works as well. Just enter the ip address or hostname of your RaspberryPi in " -"your browser." +"Now it's time to view the application in your browser to check whether " +"the GUI works as well. Just enter the ip address or hostname of your " +"RaspberryPi in your browser." msgstr "" -"Dit is het moment om de applicatie te bekijken in je browser om te zien of " -"alles naar behoren werkt. Vul het IP-adres van je RaspberryPi in je browser." +"Dit is het moment om de applicatie te bekijken in je browser om te zien " +"of alles naar behoren werkt. Vul het IP-adres van je RaspberryPi in je " +"browser." #: ../../application.rst:25 msgid "" -"Did you install using a monitor attached to the RaspberryPi and you don't know " -"what address your device has? Just type ``ifconfig | grep addr`` and it should " -"display an ip address, for example::" +"Did you install using a monitor attached to the RaspberryPi and you don't" +" know what address your device has? Just type ``ifconfig | grep addr`` " +"and it should display an ip address, for example::" msgstr "" -"Heb je de applicatie geinstalleerd met een monitor aan je RaspberryPi en weet " -"je het IP-adres niet? Typ in dat geval het volgende in en je krijgt het IP-" -"adres te zien: ``ifconfig | grep addr``" +"Heb je de applicatie geinstalleerd met een monitor aan je RaspberryPi en " +"weet je het IP-adres niet? Typ in dat geval het volgende in en je krijgt " +"het IP-adres te zien: ``ifconfig | grep addr``" #: ../../application.rst:31 msgid "" -"In this example the ip address is ``192.168.178.150``. If possible, you should " -"assign a static ip address to your device in your router. This will make sure " -"you will always be able to find the application at the same location." +"In this example the ip address is ``192.168.178.150``. If possible, you " +"should assign a static ip address to your device in your router. This " +"will make sure you will always be able to find the application at the " +"same location." msgstr "" -"In dit voorbeeld is het IP-adres ``192.168.178.150``. Het is aan te raden om je " -"apparaat een vast IP-adres te geven in je router. Dit zorgt ervoor dat je de " -"applicatie altijd op dezelfde locatie kan terugvinden." +"In dit voorbeeld is het IP-adres ``192.168.178.150``. Het is aan te raden" +" om je apparaat een vast IP-adres te geven in je router. Dit zorgt ervoor" +" dat je de applicatie altijd op dezelfde locatie kan terugvinden." #: ../../application.rst:35 msgid "Reboot test" @@ -75,14 +78,14 @@ msgstr "Herstart-test" #: ../../application.rst:36 msgid "" -"You surely want to ``reboot`` your device and check whether everything comes up " -"automatically again with ``sudo supervisorctl status``. This will make sure " -"your data logger 'survives' any power surges." +"You surely want to ``reboot`` your device and check whether everything " +"comes up automatically again with ``sudo supervisorctl status``. This " +"will make sure your data logger 'survives' any power surges." msgstr "" -"Herstart het apparaat met ``reboot`` om te testen of alles automatisch opstart. " -"Je zou na de herstart alles moeten zien draaien via ``sudo supervisorctl " -"status``. Dit zorgt ervoor dat je datalogger eventuele stroomstoringen " -"overleeft (of wanneer je zelf de stroom eraf haalt)." +"Herstart het apparaat met ``reboot`` om te testen of alles automatisch " +"opstart. Je zou na de herstart alles moeten zien draaien via ``sudo " +"supervisorctl status``. Dit zorgt ervoor dat je datalogger eventuele " +"stroomstoringen overleeft (of wanneer je zelf de stroom eraf haalt)." #: ../../application.rst:40 msgid "Data preservation & backups" @@ -90,23 +93,23 @@ msgstr "Databehoud & backups" #: ../../application.rst:44 msgid "" -"You **should (or must)** make sure to periodically BACKUP your data! It's one " -"of the most common mistakes to skip or ignore this. Actually, it happened to " -"myself quite soon after I started, as I somehow managed to corrupt my SD " -"storage card, losing all my data on it. It luckily happened only a month after " -"running my own readings, but imagine all the data you'll lose when it will " -"contain readings taken over several years." +"You **should (or must)** make sure to periodically BACKUP your data! It's" +" one of the most common mistakes to skip or ignore this. Actually, it " +"happened to myself quite soon after I started, as I somehow managed to " +"corrupt my SD storage card, losing all my data on it. It luckily happened" +" only a month after running my own readings, but imagine all the data " +"you'll lose when it will contain readings taken over several years." msgstr "" -"Zorg ervoor dat je regelmatig **back-ups maakt**! Het is een veelvoorkomende " -"fout om dat niet te doen en zelf liep ik er ook al vrij snel tegenaan. Gelukkig " -"gebeurde dat vrij vroeg in het traject en was ik 'slechts' een maand aan " -"gegevens kwijt. Stel je voor dat je jaren met historische data kwijtraakt, zou " -"zonde zijn!" +"Zorg ervoor dat je regelmatig **back-ups maakt**! Het is een " +"veelvoorkomende fout om dat niet te doen en zelf liep ik er ook al vrij " +"snel tegenaan. Gelukkig gebeurde dat vrij vroeg in het traject en was ik " +"'slechts' een maand aan gegevens kwijt. Stel je voor dat je jaren met " +"historische data kwijtraakt, zou zonde zijn!" #: ../../application.rst:48 msgid "" -"The SD card is by far **the weakest link** of this setup and **will** fail you " -"some day." +"The SD card is by far **the weakest link** of this setup and **will** " +"fail you some day." msgstr "" "De SD-kaart is verreweg **de zwakste schakel** in dit geheel and **gaat " "gegarandeerd kapot** op een dag." @@ -117,86 +120,88 @@ msgstr "De applicatie maakt standaard elke nacht een back-up." #: ../../application.rst:52 msgid "" -"You can find them in the ``backups`` folder of the application. They either " -"have a ``.sql`` or ``.gz`` extension, depending on whether compression is " -"enabled in the backup configuration." +"You can find them in the ``backups`` folder of the application. They " +"either have a ``.sql`` or ``.gz`` extension, depending on whether " +"compression is enabled in the backup configuration." msgstr "" -"Je kunt ze terugvinden in de ``backups`` map van de applicatie. Ze zijn te " -"herkennen aan een ``.sql`` of ``.gz`` extensie, afhankelijk de gekozen " -"compressie-instellingen in de back-upconfiguratie." +"Je kunt ze terugvinden in de ``backups`` map van de applicatie. Ze zijn " +"te herkennen aan een ``.sql`` of ``.gz`` extensie, afhankelijk de gekozen" +" compressie-instellingen in de back-upconfiguratie." #: ../../application.rst:53 msgid "" -"However, as the data is still stored **locally** on your 'vulnerable' SD card, " -"you must export it off your RaspberryPi as well." +"However, as the data is still stored **locally** on your 'vulnerable' SD " +"card, you must export it off your RaspberryPi as well." msgstr "" -"Echter, hiermee staan de gegevens nog steeds **lokaal** op je 'kwestsbare' SD-" -"kaart. Je zult die data dus moeten kopieren naar een locatie buiten je " -"RaspberryPi om." +"Echter, hiermee staan de gegevens nog steeds **lokaal** op je " +"'kwestsbare' SD-kaart. Je zult die data dus moeten kopieren naar een " +"locatie buiten je RaspberryPi om." #: ../../application.rst:55 msgid "" -"There is an builtin option to have backups synced to your **Dropbox**, *without " -"exposing your Dropbox account and your private files in it*." +"There is an builtin option to have backups synced to your **Dropbox**, " +"*without exposing your Dropbox account and your private files in it*." msgstr "" -"Er is ingebouwde ondersteuning om back-ups naar je **Dropbox**-account te " -"uploaden. *Zonder dat de applicatie toegang tot je (privé) bestanden in je " -"Dropbox-account heeft*." +"Er is ingebouwde ondersteuning om back-ups naar je **Dropbox**-account " +"te uploaden. *Zonder dat de applicatie toegang tot je (privé) bestanden " +"in je Dropbox-account heeft*." #: ../../application.rst:57 msgid "" -"Please either use this service or manage offloading backups on your own (see " -"below)." +"Please either use this service or manage offloading backups on your own " +"(see below)." msgstr "" -"Zorg ervoor dat je ofwel deze feature gebruikt ofwel zelf back-ups maakt en ze " -"regelmatig ergens heen kopieert (zie hieronder)." +"Zorg ervoor dat je ofwel deze feature gebruikt ofwel zelf back-ups maakt " +"en ze regelmatig ergens heen kopieert (zie hieronder)." #: ../../application.rst:59 msgid "You may also decide to run backups outside the application." msgstr "" -"Je kunt er tevens voor kiezen om zelf backups buiten de applicatie om te maken." +"Je kunt er tevens voor kiezen om zelf backups buiten de applicatie om te " +"maken." #: ../../application.rst:61 msgid "" -"There are example backup scripts available in ``dsmrreader/provisioning/" -"postgresql/psql-backup.sh`` for **PostgreSQL**, which I dump to a separately " -"USB stick mounted on my RaspberryPi." +"There are example backup scripts available in " +"``dsmrreader/provisioning/postgresql/psql-backup.sh`` for **PostgreSQL**," +" which I dump to a separately USB stick mounted on my RaspberryPi." msgstr "" -"Er zijn voorbeeldscripts voor back-ups beschikbaar in ``dsmrreader/provisioning/" -"postgresql/psql-backup.sh`` voor **PostgreSQL**. Deze gebruik ik zelf om " -"handmatig een back-up te maken naar een USB-stick die aan mijn RaspberryPi " -"hangt." +"Er zijn voorbeeldscripts voor back-ups beschikbaar in " +"``dsmrreader/provisioning/postgresql/psql-backup.sh`` voor " +"**PostgreSQL**. Deze gebruik ik zelf om handmatig een back-up te maken " +"naar een USB-stick die aan mijn RaspberryPi hangt." #: ../../application.rst:63 msgid "" -"For **MySQL/MariaDB** you can use ``dsmrreader/provisioning/mysql/mysql-backup." -"sh``." +"For **MySQL/MariaDB** you can use ``dsmrreader/provisioning/mysql/mysql-" +"backup.sh``." msgstr "" -"Voor **MySQL/MariaDB** kun je dit script gebruiken: ``dsmrreader/provisioning/" -"mysql/mysql-backup.sh``." +"Voor **MySQL/MariaDB** kun je dit script gebruiken: " +"``dsmrreader/provisioning/mysql/mysql-backup.sh``." #: ../../application.rst:65 msgid "" -"Make sure to schedule the backup scripts as cronjob and also verify that it " -"actually works, by running ``run-parts -v /etc/cron.daily``." +"Make sure to schedule the backup scripts as cronjob and also verify that " +"it actually works, by running ``run-parts -v /etc/cron.daily``." msgstr "" -"Zorg ervoor dat je de back-ups via een 'daily cronjob' hebt ingepland en test " -"dat door het volgende uit te voeren: ``run-parts -v /etc/cron.daily``." +"Zorg ervoor dat je de back-ups via een 'daily cronjob' hebt ingepland en " +"test dat door het volgende uit te voeren: ``run-parts -v " +"/etc/cron.daily``." #: ../../application.rst:67 msgid "" -"Also, check your free disk space once in a while. I will implement automatic " -"cleanup settings later, allowing you to choose your own retention (for all the " -"source readings)." +"Also, check your free disk space once in a while. I will implement " +"automatic cleanup settings later, allowing you to choose your own " +"retention (for all the source readings)." msgstr "" -"Kijk ook af en toe of je nog voldoende schijfruimte hebt. Later zal ik de " -"mogelijkheid toevoegen om oude metingen (niet de dagtotalen) te verwijderen na " -"een X-periode." +"Kijk ook af en toe of je nog voldoende schijfruimte hebt. Later zal ik de" +" mogelijkheid toevoegen om oude metingen (niet de dagtotalen) te " +"verwijderen na een X-periode." #: ../../application.rst:69 msgid "" -"Everything OK? Congratulations, this was the hardest part and now the fun " -"begins by monitoring your energy consumption." +"Everything OK? Congratulations, this was the hardest part and now the fun" +" begins by monitoring your energy consumption." msgstr "" "Alles gelukt? Gefeliciteerd! Dit was het lastigste gedeelte en nu kun je " "eindelijk gebruikmaken van de applicatie en je energieverbruik meten." @@ -207,13 +212,13 @@ msgstr "Optioneel: Een USB-drive gebruiken voor backup's" #: ../../application.rst:77 msgid "" -"For more information about (optionally) setting up an USB drive for backups, " -"see `Data preservation/backups #268 `_." +"For more information about (optionally) setting up an USB drive for " +"backups, see `Data preservation/backups #268 " +"`_." msgstr "" -"Voor meer informatie om (optioneel) een USB-drive te gebruiken voor backup's, " -"zie `Data preservation/backups #268 `_." +"Voor meer informatie om (optioneel) een USB-drive te gebruiken voor " +"backup's, zie `Data preservation/backups #268 " +"`_." #: ../../application.rst:82 msgid "Application updates (bug fixes & new features)" @@ -229,50 +234,52 @@ msgstr "Waarschuwing voor publiekelijke toegang" #: ../../application.rst:94 msgid "" -"If you expose your application to the outside world or a public network, you " -"might want to take additional steps:" +"If you expose your application to the outside world or a public network, " +"you might want to take additional steps:" msgstr "" "Wanneer je de applicatie koppelt aan het Internet wil je sowieso extra " "maatregelen nemen:" #: ../../application.rst:96 msgid "" -"Please make sure to **alter** the ``SECRET_KEY`` setting in your ``dsmrreader/" -"settings.py``." +"Please make sure to **alter** the ``SECRET_KEY`` setting in your " +"``dsmrreader/settings.py``." msgstr "" "Zorg ervoor dat je de instelling ``SECRET_KEY`` wijzigt in het bestand " "``dsmrreader/settings.py``." #: ../../application.rst:98 msgid "" -"Don't forget to run ``./post-deploy.sh`` in the project's root, which will " -"force the application to gracefully reload itself and apply the new settings " -"instantly." +"Don't forget to run ``./post-deploy.sh`` in the project's root, which " +"will force the application to gracefully reload itself and apply the new " +"settings instantly." msgstr "" -"Vergeet vooral niet om daarna ``./post-deploy.sh`` uit te voeren (staat in " -"hoogste map van project), die ervoor zorgt dat de hele applicatie zichzelf " -"herlaadt en daarmee de nieuwe instellingen per direct gebruikt." +"Vergeet vooral niet om daarna ``./post-deploy.sh`` uit te voeren (staat " +"in hoogste map van project), die ervoor zorgt dat de hele applicatie " +"zichzelf herlaadt en daarmee de nieuwe instellingen per direct gebruikt." #: ../../application.rst:100 msgid "" -"Install a firewall, such as ``ufw`` `UncomplicatedFirewall `_ and restrict traffic to port ``22`` (only for " -"yourself) and port ``80``." +"Install a firewall, such as ``ufw`` `UncomplicatedFirewall " +"`_ and restrict traffic to" +" port ``22`` (only for yourself) and port ``80``." msgstr "" -"Installeer een firewall, zoals ``ufw`` (`UncomplicatedFirewall `_) and beperk al het toegestane verkeer tot " -"poort ``22`` (puur voor jezelf) en poort ``80``." +"Installeer een firewall, zoals ``ufw`` (`UncomplicatedFirewall " +"`_) and beperk al het " +"toegestane verkeer tot poort ``22`` (puur voor jezelf) en poort ``80``." #: ../../application.rst:102 +#, fuzzy msgid "" -"You should also have Nginx restrict application access when exposing it to the " -"Internet. Simply generate an htpasswd string `using one of the many generators " -"found online `_." +"You should also have Nginx restrict application access when exposing it " +"to the Internet. Simply generate an htpasswd string `using one of the " +"many generators found online `_." msgstr "" -"Je zou in Nginx de toegang moeten beperken door altijd inloggegevens te vragen " -"voor het bekijken van de applicatie. Genereer een zogenaamde htpasswd-" -"tekenreeks via `een van de vele websites die dit voor je kunnen doen `_." +"Je zou in Nginx de toegang moeten beperken door altijd inloggegevens te " +"vragen voor het bekijken van de applicatie. Genereer een zogenaamde " +"htpasswd-tekenreeks via `een van de vele websites die dit voor je kunnen " +"doen `_." #: ../../application.rst:104 msgid "Paste the htpasswd string in ``/etc/nginx/htpasswd``." @@ -280,23 +287,25 @@ msgstr "Plak de htpasswd-tekenreeks in het bestand ``/etc/nginx/htpasswd``." #: ../../application.rst:108 msgid "" -"It's safe to a htpasswd generator, **just make sure to NEVER enter personal " -"credentials** there **used for other applications or personal accounts**." +"It's safe to a htpasswd generator, **just make sure to NEVER enter " +"personal credentials** there **used for other applications or personal " +"accounts**." msgstr "" "Je kunt een htpassw-generator veilig gebruiken **zolang je maar NOOIT " -"persoonlijke informatie of gegevens invoert die je ook op andere websites " -"gebruikt**!" +"persoonlijke informatie of gegevens invoert die je ook op andere websites" +" gebruikt**!" #: ../../application.rst:112 msgid "" -"Alternatively you can generate a ``htpasswd`` file locally, by installing " -"``sudo apt-get install apache2-utils`` and running ``sudo htpasswd -c /etc/" -"nginx/htpasswd USERNAME`` (where ``USERNAME`` is your desired username)." +"Alternatively you can generate a ``htpasswd`` file locally, by installing" +" ``sudo apt-get install apache2-utils`` and running ``sudo htpasswd -c " +"/etc/nginx/htpasswd USERNAME`` (where ``USERNAME`` is your desired " +"username)." msgstr "" -"Als alternatief kun je ook lokaal een ``htpasswd`` bestand genereren, door " -"``sudo apt-get install apache2-utils`` te installeren en vervolgens het command " -"``sudo htpasswd -c /etc/nginx/htpasswd USERNAME`` uit te voeren (waarbij " -"``USERNAME`` je gewenste gebruikersnaam is)." +"Als alternatief kun je ook lokaal een ``htpasswd`` bestand genereren, " +"door ``sudo apt-get install apache2-utils`` te installeren en vervolgens " +"het command ``sudo htpasswd -c /etc/nginx/htpasswd USERNAME`` uit te " +"voeren (waarbij ``USERNAME`` je gewenste gebruikersnaam is)." #: ../../application.rst:114 msgid "The command will prompt you to enter a password for it." @@ -304,27 +313,29 @@ msgstr "Het command vraagt vervolgens om een wachtwoord voor het account." #: ../../application.rst:117 msgid "" -"Open the site's vhost in ``/etc/nginx/sites-enabled/dsmr-webinterface`` and " -"**uncomment** the following lines (remove the ##)::" +"Open the site's vhost in ``/etc/nginx/sites-enabled/dsmr-webinterface`` " +"and **uncomment** the following lines (remove the ##)::" msgstr "" -"Open de website's vhost in ``/etc/nginx/sites-enabled/dsmr-webinterface`` en " -"schakel de volgende regels in (verwijder de ## tekens)::" +"Open de website's vhost in ``/etc/nginx/sites-enabled/dsmr-webinterface``" +" en schakel de volgende regels in (verwijder de ## tekens)::" -#: ../../application.rst:122 +#: ../../application.rst:125 msgid "Now make sure you didn't insert any typo's by running::" msgstr "Zorg ervoor dat je geen typefouten hebt gemaakt door te controleren met::" -#: ../../application.rst:126 +#: ../../application.rst:129 msgid "And reload with::" msgstr "En herlaad met::" -#: ../../application.rst:130 +#: ../../application.rst:133 msgid "" "You should be prompted for login credentials the next time your browser " -"accesses the application. For more information regarding this topic, see the " -"`Nginx docs `_." +"accesses the application. For more information regarding this topic, see " +"the `Nginx docs `_." msgstr "" -"Als het goed is krijg je de volgende keer dat je de applicatie bekijkt een pop-" -"up te zien, waarin je gevraagd wordt om in te loggen. Voor meer informatie over " -"dit onderwerp `zie de Nginx documentatie `_." +"Als het goed is krijg je de volgende keer dat je de applicatie bekijkt " +"een pop-up te zien, waarin je gevraagd wordt om in te loggen. Voor meer " +"informatie over dit onderwerp `zie de Nginx documentatie " +"`_." + diff --git a/docs/locale/nl/LC_MESSAGES/changelog.po b/docs/locale/nl/LC_MESSAGES/changelog.po index e0d1405b0..9ec0dd966 100644 --- a/docs/locale/nl/LC_MESSAGES/changelog.po +++ b/docs/locale/nl/LC_MESSAGES/changelog.po @@ -52,24 +52,230 @@ msgstr "" "reader.readthedocs.io/en/latest/application.html#application-updates-bug-" "fixes-new-features>`_." -#: ../../changelog.rst:22 -msgid "v1.13.0 - 2018-xx-xx" -msgstr "" - -#: ../../changelog.rst:24 ../../changelog.rst:35 ../../changelog.rst:52 -#: ../../changelog.rst:73 ../../changelog.rst:92 ../../changelog.rst:118 -#: ../../changelog.rst:127 ../../changelog.rst:136 ../../changelog.rst:159 -#: ../../changelog.rst:168 ../../changelog.rst:178 ../../changelog.rst:200 -#: ../../changelog.rst:218 ../../changelog.rst:227 ../../changelog.rst:237 -#: ../../changelog.rst:246 ../../changelog.rst:256 ../../changelog.rst:265 -#: ../../changelog.rst:283 ../../changelog.rst:302 ../../changelog.rst:327 -#: ../../changelog.rst:340 ../../changelog.rst:355 ../../changelog.rst:363 -#: ../../changelog.rst:374 ../../changelog.rst:386 ../../changelog.rst:403 -#: ../../changelog.rst:411 ../../changelog.rst:419 ../../changelog.rst:433 +#: ../../changelog.rst:23 +msgid "v1.18.0 - 2018-06-xx" +msgstr "" + +#: ../../changelog.rst:25 ../../changelog.rst:35 ../../changelog.rst:45 +#: ../../changelog.rst:57 ../../changelog.rst:68 ../../changelog.rst:83 +#: ../../changelog.rst:92 ../../changelog.rst:101 ../../changelog.rst:114 +#: ../../changelog.rst:131 ../../changelog.rst:152 ../../changelog.rst:171 +#: ../../changelog.rst:197 ../../changelog.rst:206 ../../changelog.rst:215 +#: ../../changelog.rst:238 ../../changelog.rst:247 ../../changelog.rst:257 +#: ../../changelog.rst:279 ../../changelog.rst:297 ../../changelog.rst:306 +#: ../../changelog.rst:316 ../../changelog.rst:325 ../../changelog.rst:335 +#: ../../changelog.rst:344 ../../changelog.rst:362 ../../changelog.rst:381 +#: ../../changelog.rst:406 ../../changelog.rst:419 ../../changelog.rst:434 +#: ../../changelog.rst:442 ../../changelog.rst:453 ../../changelog.rst:465 +#: ../../changelog.rst:482 ../../changelog.rst:490 ../../changelog.rst:498 +#: ../../changelog.rst:512 msgid "**Tickets resolved in this release:**" msgstr "**Tickets die opgelost zijn in deze release:**" -#: ../../changelog.rst:26 +#: ../../changelog.rst:27 +#, fuzzy +msgid "" +"[`#479 `_] " +"Tijdsnotatie grafieken gelijktrekken" +msgstr "" +"De ondersteuning voor ``Python 3.3`` is **vervallen** wegens de Django " +"upgrade (`#103 `_)." + +#: ../../changelog.rst:33 +msgid "v1.17.0 - 2018-05-25" +msgstr "" + +#: ../../changelog.rst:37 +#, fuzzy +msgid "" +"[`#475 `_] " +"Notify my android service ended" +msgstr "" +"De ondersteuning voor ``Python 3.3`` is **vervallen** wegens de Django " +"upgrade (`#103 `_)." + +#: ../../changelog.rst:38 +#, fuzzy +msgid "" +"[`#471 `_] " +"Requirements update (May 2018)" +msgstr "" +"De ondersteuning voor ``Python 3.3`` is **vervallen** wegens de Django " +"upgrade (`#103 `_)." + +#: ../../changelog.rst:43 +msgid "v1.16.0 - 2018-04-04" +msgstr "" + +#: ../../changelog.rst:47 +#, fuzzy +msgid "" +"[`#458 `_] " +"DSMR v2.x parse-fout - by mrvanes" +msgstr "" +"De ondersteuning voor ``Python 3.3`` is **vervallen** wegens de Django " +"upgrade (`#103 `_)." + +#: ../../changelog.rst:48 +#, fuzzy +msgid "" +"[`#455 `_] " +"DOCS: Handleiding Nginx authenticatie uitbreiden - by FutureCow" +msgstr "" +"De ondersteuning voor ``Python 3.3`` is **vervallen** wegens de Django " +"upgrade (`#103 `_)." + +#: ../../changelog.rst:49 +#, fuzzy +msgid "" +"[`#461 `_] " +"Requirements update April 2018" +msgstr "" +"De ondersteuning voor ``Python 3.3`` is **vervallen** wegens de Django " +"upgrade (`#103 `_)." + +#: ../../changelog.rst:50 +msgid "Fixed some missing names on the contribution page in the DOCS" +msgstr "" + +#: ../../changelog.rst:55 +msgid "v1.15.0 - 2018-03-21" +msgstr "" + +#: ../../changelog.rst:59 ../../changelog.rst:72 +#, fuzzy +msgid "" +"[`#449 `_] " +"Meterstatistieken via MQTT beschikbaar" +msgstr "" +"De ondersteuning voor ``Python 3.3`` is **vervallen** wegens de Django " +"upgrade (`#103 `_)." + +#: ../../changelog.rst:60 +#, fuzzy +msgid "" +"[`#208 `_] " +"Notificatie bij uitblijven gegevens uit slimme meter" +msgstr "" +"De ondersteuning voor ``Python 3.3`` is **vervallen** wegens de Django " +"upgrade (`#103 `_)." + +#: ../../changelog.rst:61 +#, fuzzy +msgid "" +"[`#342 `_] " +"Backup to dropbox never finish (free plan no more space)" +msgstr "" +"De ondersteuning voor ``Python 3.3`` is **vervallen** wegens de Django " +"upgrade (`#103 `_)." + +#: ../../changelog.rst:66 +msgid "v1.14.0 - 2018-03-11" +msgstr "" + +#: ../../changelog.rst:70 +#, fuzzy +msgid "" +"[`#441 `_] " +"PVOutput exports schedulen naar ingestelde upload interval - by " +"pyrocumulus" +msgstr "" +"De ondersteuning voor ``Python 3.3`` is **vervallen** wegens de Django " +"upgrade (`#103 `_)." + +#: ../../changelog.rst:71 +#, fuzzy +msgid "" +"[`#436 `_] " +"Update docs: authentication method for public webinterface" +msgstr "" +"De ondersteuning voor ``Python 3.3`` is **vervallen** wegens de Django " +"upgrade (`#103 `_)." + +#: ../../changelog.rst:73 +#, fuzzy +msgid "" +"[`#445 `_] " +"Upload/export to PVoutput doesn't work" +msgstr "" +"De ondersteuning voor ``Python 3.3`` is **vervallen** wegens de Django " +"upgrade (`#103 `_)." + +#: ../../changelog.rst:74 +#, fuzzy +msgid "" +"[`#432 `_] " +"[API] Gas cost missing at start of day" +msgstr "" +"De ondersteuning voor ``Python 3.3`` is **vervallen** wegens de Django " +"upgrade (`#103 `_)." + +#: ../../changelog.rst:75 +#, fuzzy +msgid "" +"[`#367 `_] " +"Dagverbruik en teruglevering via MQTT" +msgstr "" +"De ondersteuning voor ``Python 3.3`` is **vervallen** wegens de Django " +"upgrade (`#103 `_)." + +#: ../../changelog.rst:76 +#, fuzzy +msgid "" +"[`#447 `_] " +"Kosten via MQTT" +msgstr "" +"De ondersteuning voor ``Python 3.3`` is **vervallen** wegens de Django " +"upgrade (`#103 `_)." + +#: ../../changelog.rst:81 +msgid "v1.13.2 - 2018-02-02" +msgstr "" + +#: ../../changelog.rst:85 +#, fuzzy +msgid "" +"[`#431 `_] " +"Django security releases issued: 2.0.2" +msgstr "" +"De ondersteuning voor ``Python 3.3`` is **vervallen** wegens de Django " +"upgrade (`#103 `_)." + +#: ../../changelog.rst:90 +msgid "v1.13.1 - 2018-01-28" +msgstr "" + +#: ../../changelog.rst:94 +#, fuzzy +msgid "" +"[`#428 `_] " +"Django 2.0: Null characters are not allowed in telegram (esp8266)" +msgstr "" +"De ondersteuning voor ``Python 3.3`` is **vervallen** wegens de Django " +"upgrade (`#103 `_)." + +#: ../../changelog.rst:99 +msgid "v1.13.0 - 2018-01-23" +msgstr "" + +#: ../../changelog.rst:103 #, fuzzy msgid "" "[`#203 `_] " @@ -79,7 +285,7 @@ msgstr "" "upgrade (`#103 `_)." -#: ../../changelog.rst:27 +#: ../../changelog.rst:104 #, fuzzy msgid "" "[`#396 `_] " @@ -89,7 +295,7 @@ msgstr "" "upgrade (`#103 `_)." -#: ../../changelog.rst:28 +#: ../../changelog.rst:105 #, fuzzy msgid "" "[`#268 `_] " @@ -99,11 +305,41 @@ msgstr "" "upgrade (`#103 `_)." -#: ../../changelog.rst:33 +#: ../../changelog.rst:106 +#, fuzzy +msgid "" +"[`#425 `_] " +"Requests for donating a beer or coffee" +msgstr "" +"De ondersteuning voor ``Python 3.3`` is **vervallen** wegens de Django " +"upgrade (`#103 `_)." + +#: ../../changelog.rst:107 +#, fuzzy +msgid "" +"[`#427 `_] " +"Reconnect to postgresql" +msgstr "" +"De ondersteuning voor ``Python 3.3`` is **vervallen** wegens de Django " +"upgrade (`#103 `_)." + +#: ../../changelog.rst:108 +#, fuzzy +msgid "" +"[`#394 `_] " +"Django 2.0" +msgstr "" +"De ondersteuning voor ``Python 3.3`` is **vervallen** wegens de Django " +"upgrade (`#103 `_)." + +#: ../../changelog.rst:112 msgid "v1.12.0 - 2018-01-14" msgstr "" -#: ../../changelog.rst:37 +#: ../../changelog.rst:116 #, fuzzy msgid "" "[`#72 `_] " @@ -113,7 +349,7 @@ msgstr "" "upgrade (`#103 `_)." -#: ../../changelog.rst:38 +#: ../../changelog.rst:117 #, fuzzy msgid "" "[`#414 `_] add" @@ -123,7 +359,7 @@ msgstr "" "upgrade (`#103 `_)." -#: ../../changelog.rst:39 +#: ../../changelog.rst:118 #, fuzzy msgid "" "[`#405 `_] " @@ -133,7 +369,7 @@ msgstr "" "upgrade (`#103 `_)." -#: ../../changelog.rst:40 +#: ../../changelog.rst:119 #, fuzzy msgid "" "[`#404 `_] Fix" @@ -143,7 +379,7 @@ msgstr "" "upgrade (`#103 `_)." -#: ../../changelog.rst:41 +#: ../../changelog.rst:120 #, fuzzy msgid "" "[`#398 `_] iOS" @@ -154,7 +390,7 @@ msgstr "" "upgrade (`#103 `_)." -#: ../../changelog.rst:42 +#: ../../changelog.rst:121 #, fuzzy msgid "" "[`#399 `_] " @@ -164,7 +400,7 @@ msgstr "" "upgrade (`#103 `_)." -#: ../../changelog.rst:43 +#: ../../changelog.rst:122 #, fuzzy msgid "" "[`#406 `_] " @@ -174,7 +410,7 @@ msgstr "" "upgrade (`#103 `_)." -#: ../../changelog.rst:44 +#: ../../changelog.rst:123 #, fuzzy msgid "" "[`#413 `_] " @@ -184,7 +420,7 @@ msgstr "" "upgrade (`#103 `_)." -#: ../../changelog.rst:45 +#: ../../changelog.rst:124 #, fuzzy msgid "" "[`#419 `_] " @@ -194,11 +430,11 @@ msgstr "" "upgrade (`#103 `_)." -#: ../../changelog.rst:50 +#: ../../changelog.rst:129 msgid "v1.11.0 - 2017-11-24" msgstr "" -#: ../../changelog.rst:54 +#: ../../changelog.rst:133 #, fuzzy msgid "" "[`#382 `_] " @@ -208,7 +444,7 @@ msgstr "" "upgrade (`#103 `_)." -#: ../../changelog.rst:55 +#: ../../changelog.rst:134 #, fuzzy msgid "" "[`#385 `_] " @@ -218,7 +454,7 @@ msgstr "" "upgrade (`#103 `_)." -#: ../../changelog.rst:56 +#: ../../changelog.rst:135 #, fuzzy msgid "" "[`#387 `_] " @@ -228,7 +464,7 @@ msgstr "" "upgrade (`#103 `_)." -#: ../../changelog.rst:57 +#: ../../changelog.rst:136 #, fuzzy msgid "" "[`#368 `_] " @@ -238,7 +474,7 @@ msgstr "" "upgrade (`#103 `_)." -#: ../../changelog.rst:58 +#: ../../changelog.rst:137 #, fuzzy msgid "" "[`#370 `_] " @@ -248,7 +484,7 @@ msgstr "" "upgrade (`#103 `_)." -#: ../../changelog.rst:59 +#: ../../changelog.rst:138 #, fuzzy msgid "" "[`#371 `_] " @@ -258,7 +494,7 @@ msgstr "" "upgrade (`#103 `_)." -#: ../../changelog.rst:60 +#: ../../changelog.rst:139 #, fuzzy msgid "" "[`#378 `_] " @@ -268,18 +504,18 @@ msgstr "" "upgrade (`#103 `_)." -#: ../../changelog.rst:65 +#: ../../changelog.rst:144 msgid "v1.10.0 - 2017-10-19" msgstr "" -#: ../../changelog.rst:69 +#: ../../changelog.rst:148 msgid "" "This releases turns telegram logging **off by default**. If you wish to " "continue using this feature, add ``DSMRREADER_LOG_TELEGRAMS = True`` to " "your ``settings.py`` and reload the application." msgstr "" -#: ../../changelog.rst:75 +#: ../../changelog.rst:154 #, fuzzy msgid "" "[`#363 `_] " @@ -289,7 +525,7 @@ msgstr "" "upgrade (`#103 `_)." -#: ../../changelog.rst:76 +#: ../../changelog.rst:155 #, fuzzy msgid "" "[`#305 `_] " @@ -299,7 +535,7 @@ msgstr "" "upgrade (`#103 `_)." -#: ../../changelog.rst:77 +#: ../../changelog.rst:156 #, fuzzy msgid "" "[`#194 `_] Add" @@ -309,7 +545,7 @@ msgstr "" "upgrade (`#103 `_)." -#: ../../changelog.rst:78 +#: ../../changelog.rst:157 #, fuzzy msgid "" "[`#365 `_] " @@ -319,7 +555,7 @@ msgstr "" "upgrade (`#103 `_)." -#: ../../changelog.rst:79 +#: ../../changelog.rst:158 #, fuzzy msgid "" "[`#366 `_] " @@ -329,11 +565,11 @@ msgstr "" "upgrade (`#103 `_)." -#: ../../changelog.rst:84 +#: ../../changelog.rst:163 msgid "v1.9.0 - 2017-10-08" msgstr "" -#: ../../changelog.rst:88 +#: ../../changelog.rst:167 msgid "" "This release contains an update for the API framework, which `has a fix " "for some timezone issues `_] Data " @@ -351,7 +587,7 @@ msgstr "" "upgrade (`#103 `_)." -#: ../../changelog.rst:95 +#: ../../changelog.rst:174 #, fuzzy msgid "" "[`#163 `_] " @@ -361,7 +597,7 @@ msgstr "" "upgrade (`#103 `_)." -#: ../../changelog.rst:96 +#: ../../changelog.rst:175 #, fuzzy msgid "" "[`#337 `_] API" @@ -371,7 +607,7 @@ msgstr "" "upgrade (`#103 `_)." -#: ../../changelog.rst:97 +#: ../../changelog.rst:176 #, fuzzy msgid "" "[`#284 `_] " @@ -381,7 +617,7 @@ msgstr "" "upgrade (`#103 `_)." -#: ../../changelog.rst:98 +#: ../../changelog.rst:177 #, fuzzy msgid "" "[`#279 `_] " @@ -392,7 +628,7 @@ msgstr "" "upgrade (`#103 `_)." -#: ../../changelog.rst:99 +#: ../../changelog.rst:178 #, fuzzy msgid "" "[`#245 `_] " @@ -402,7 +638,7 @@ msgstr "" "upgrade (`#103 `_)." -#: ../../changelog.rst:100 +#: ../../changelog.rst:179 #, fuzzy msgid "" "[`#272 `_] " @@ -412,7 +648,7 @@ msgstr "" "upgrade (`#103 `_)." -#: ../../changelog.rst:101 +#: ../../changelog.rst:180 #, fuzzy msgid "" "[`#273 `_] " @@ -422,7 +658,7 @@ msgstr "" "upgrade (`#103 `_)." -#: ../../changelog.rst:102 +#: ../../changelog.rst:181 #, fuzzy msgid "" "[`#286 `_] Na " @@ -433,7 +669,7 @@ msgstr "" "upgrade (`#103 `_)." -#: ../../changelog.rst:103 +#: ../../changelog.rst:182 #, fuzzy msgid "" "[`#332 `_] " @@ -443,7 +679,7 @@ msgstr "" "upgrade (`#103 `_)." -#: ../../changelog.rst:104 +#: ../../changelog.rst:183 #, fuzzy msgid "" "[`#276 `_] " @@ -453,7 +689,7 @@ msgstr "" "upgrade (`#103 `_)." -#: ../../changelog.rst:105 +#: ../../changelog.rst:184 #, fuzzy msgid "" "[`#288 `_] Add" @@ -463,7 +699,7 @@ msgstr "" "upgrade (`#103 `_)." -#: ../../changelog.rst:106 +#: ../../changelog.rst:185 #, fuzzy msgid "" "[`#320 `_] " @@ -473,7 +709,7 @@ msgstr "" "upgrade (`#103 `_)." -#: ../../changelog.rst:107 +#: ../../changelog.rst:186 #, fuzzy msgid "" "[`#314 `_] Add" @@ -483,7 +719,7 @@ msgstr "" "upgrade (`#103 `_)." -#: ../../changelog.rst:108 +#: ../../changelog.rst:187 #, fuzzy msgid "" "[`#358 `_] " @@ -493,7 +729,7 @@ msgstr "" "upgrade (`#103 `_)." -#: ../../changelog.rst:109 +#: ../../changelog.rst:188 #, fuzzy msgid "" "[`#270 `_] " @@ -503,7 +739,7 @@ msgstr "" "upgrade (`#103 `_)." -#: ../../changelog.rst:110 +#: ../../changelog.rst:189 #, fuzzy msgid "" "[`#231 `_] " @@ -513,7 +749,7 @@ msgstr "" "upgrade (`#103 `_)." -#: ../../changelog.rst:111 +#: ../../changelog.rst:190 #, fuzzy msgid "" "[`#300 `_] " @@ -523,11 +759,11 @@ msgstr "" "upgrade (`#103 `_)." -#: ../../changelog.rst:116 +#: ../../changelog.rst:195 msgid "v1.8.2 - 2017-08-12" msgstr "" -#: ../../changelog.rst:120 +#: ../../changelog.rst:199 #, fuzzy msgid "" "[`#346 `_] " @@ -537,11 +773,11 @@ msgstr "" "upgrade (`#103 `_)." -#: ../../changelog.rst:125 +#: ../../changelog.rst:204 msgid "v1.8.1 - 2017-07-04" msgstr "" -#: ../../changelog.rst:129 +#: ../../changelog.rst:208 #, fuzzy msgid "" "[`#339 `_] " @@ -551,11 +787,11 @@ msgstr "" "upgrade (`#103 `_)." -#: ../../changelog.rst:134 +#: ../../changelog.rst:213 msgid "v1.8.0 - 2017-06-14" msgstr "" -#: ../../changelog.rst:138 +#: ../../changelog.rst:217 #, fuzzy msgid "" "[`#141 `_] Add" @@ -565,7 +801,7 @@ msgstr "" "upgrade (`#103 `_)." -#: ../../changelog.rst:139 +#: ../../changelog.rst:218 #, fuzzy msgid "" "[`#331 `_] " @@ -575,7 +811,7 @@ msgstr "" "upgrade (`#103 `_)." -#: ../../changelog.rst:140 +#: ../../changelog.rst:219 #, fuzzy msgid "" "[`#299 `_] " @@ -585,31 +821,31 @@ msgstr "" "upgrade (`#103 `_)." -#: ../../changelog.rst:145 +#: ../../changelog.rst:224 msgid "v1.7.0 - 2017-05-04" msgstr "" -#: ../../changelog.rst:149 +#: ../../changelog.rst:228 msgid "" "Please note that the ``dsmr_datalogger.0007_dsmrreading_timestamp_index``" " migration **will take quite some time**, as it adds an index on one of " "the largest database tables!" msgstr "" -#: ../../changelog.rst:151 +#: ../../changelog.rst:230 msgid "" "It takes **around two minutes** on a RaspberryPi 2 & 3 with ``> 4.3 " "million`` readings on PostgreSQL. Results may differ on **slower " "RaspberryPi's** or **with MySQL**." msgstr "" -#: ../../changelog.rst:156 +#: ../../changelog.rst:235 msgid "" "The API-docs for the new v2 API `can be found here `_." msgstr "" -#: ../../changelog.rst:161 +#: ../../changelog.rst:240 #, fuzzy msgid "" "[`#230 `_] " @@ -619,11 +855,11 @@ msgstr "" "upgrade (`#103 `_)." -#: ../../changelog.rst:166 +#: ../../changelog.rst:245 msgid "v1.6.2 - 2017-04-23" msgstr "" -#: ../../changelog.rst:170 +#: ../../changelog.rst:249 #, fuzzy msgid "" "[`#269 `_] " @@ -633,7 +869,7 @@ msgstr "" "upgrade (`#103 `_)." -#: ../../changelog.rst:171 +#: ../../changelog.rst:250 #, fuzzy msgid "" "[`#303 `_] " @@ -643,11 +879,11 @@ msgstr "" "upgrade (`#103 `_)." -#: ../../changelog.rst:176 +#: ../../changelog.rst:255 msgid "v1.6.1 - 2017-04-06" msgstr "" -#: ../../changelog.rst:180 +#: ../../changelog.rst:259 #, fuzzy msgid "" "[`#298 `_] " @@ -657,11 +893,11 @@ msgstr "" "upgrade (`#103 `_)." -#: ../../changelog.rst:185 +#: ../../changelog.rst:264 msgid "v1.6.0 - 2017-03-18" msgstr "" -#: ../../changelog.rst:189 +#: ../../changelog.rst:268 msgid "" "Support for ``MySQL`` has been **deprecated** since ``DSMR-reader v1.6`` " "and will be discontinued completely in a later release. Please use a " @@ -669,14 +905,14 @@ msgid "" "supported in easily migrating to PostgreSQL in the future." msgstr "" -#: ../../changelog.rst:194 +#: ../../changelog.rst:273 msgid "" "**Change in API:** The telegram creation API now returns an ``HTTP 201`` " "response when successful. An ``HTTP 200`` was returned in former " "versions. :doc:`View API docs`." msgstr "" -#: ../../changelog.rst:202 +#: ../../changelog.rst:281 #, fuzzy msgid "" "[`#221 `_] " @@ -686,7 +922,7 @@ msgstr "" "upgrade (`#103 `_)." -#: ../../changelog.rst:203 +#: ../../changelog.rst:282 #, fuzzy msgid "" "[`#237 `_] " @@ -696,7 +932,7 @@ msgstr "" "upgrade (`#103 `_)." -#: ../../changelog.rst:204 +#: ../../changelog.rst:283 #, fuzzy msgid "" "[`#249 `_] " @@ -706,7 +942,7 @@ msgstr "" "upgrade (`#103 `_)." -#: ../../changelog.rst:205 +#: ../../changelog.rst:284 #, fuzzy msgid "" "[`#232 `_] " @@ -716,19 +952,19 @@ msgstr "" "upgrade (`#103 `_)." -#: ../../changelog.rst:206 +#: ../../changelog.rst:285 msgid "" "[`#260 `_] Add" " link to readthedocs in Django for Dropbox instructions." msgstr "" -#: ../../changelog.rst:207 +#: ../../changelog.rst:286 msgid "" "[`#211 `_] API" " request should return HTTP 201 instead of HTTP 200." msgstr "" -#: ../../changelog.rst:208 +#: ../../changelog.rst:287 #, fuzzy msgid "" "[`#191 `_] " @@ -738,7 +974,7 @@ msgstr "" "upgrade (`#103 `_)." -#: ../../changelog.rst:209 +#: ../../changelog.rst:288 #, fuzzy msgid "" "[`#251 `_] " @@ -748,7 +984,7 @@ msgstr "" "upgrade (`#103 `_)." -#: ../../changelog.rst:210 +#: ../../changelog.rst:289 #, fuzzy msgid "" "[`#257 `_] " @@ -758,7 +994,7 @@ msgstr "" "upgrade (`#103 `_)." -#: ../../changelog.rst:211 +#: ../../changelog.rst:290 #, fuzzy msgid "" "[`#274 `_] " @@ -768,81 +1004,81 @@ msgstr "" "upgrade (`#103 `_)." -#: ../../changelog.rst:216 ../../changelog.rst:235 +#: ../../changelog.rst:295 ../../changelog.rst:314 msgid "v1.5.5 - 2017-01-19" msgstr "" -#: ../../changelog.rst:220 ../../changelog.rst:239 +#: ../../changelog.rst:299 ../../changelog.rst:318 msgid "" "Remove readonly restriction for editing statistics in admin interface " "(`#242 `_)." msgstr "" -#: ../../changelog.rst:225 ../../changelog.rst:244 +#: ../../changelog.rst:304 ../../changelog.rst:323 msgid "v1.5.4 - 2017-01-12" msgstr "" -#: ../../changelog.rst:229 ../../changelog.rst:248 +#: ../../changelog.rst:308 ../../changelog.rst:327 msgid "" "Improve datalogger for DSMR v5.0 (`#212 " "`_)." msgstr "" -#: ../../changelog.rst:230 ../../changelog.rst:249 +#: ../../changelog.rst:309 ../../changelog.rst:328 msgid "" "Fixed another bug in MinderGas API client implementation (`#228 " "`_)." msgstr "" -#: ../../changelog.rst:254 +#: ../../changelog.rst:333 msgid "v1.5.3 - 2017-01-11" msgstr "" -#: ../../changelog.rst:258 +#: ../../changelog.rst:337 msgid "" "Improve MinderGas API client implementation (`#228 " "`_)." msgstr "" -#: ../../changelog.rst:263 +#: ../../changelog.rst:342 msgid "v1.5.2 - 2017-01-09" msgstr "" -#: ../../changelog.rst:267 +#: ../../changelog.rst:346 msgid "" "Automatic refresh of dashboard charts (`#210 " "`_)." msgstr "" -#: ../../changelog.rst:268 +#: ../../changelog.rst:347 msgid "" "Mindergas.nl API: Tijdstip van verzending willekeurig maken (`#204 " "`_)." msgstr "" -#: ../../changelog.rst:269 +#: ../../changelog.rst:348 msgid "" "Extend API docs with additional example (`#185 " "`_)." msgstr "" -#: ../../changelog.rst:270 +#: ../../changelog.rst:349 msgid "" "Docs: How to restore backup (`#190 `_)." msgstr "" -#: ../../changelog.rst:271 +#: ../../changelog.rst:350 msgid "" "Log errors occured to file (`#181 `_)." msgstr "" -#: ../../changelog.rst:276 +#: ../../changelog.rst:355 msgid "v1.5.1 - 2017-01-04" msgstr "" -#: ../../changelog.rst:280 +#: ../../changelog.rst:359 msgid "" "This patch contains no new features and **only solves upgrading issues** " "for some users." @@ -850,7 +1086,7 @@ msgstr "" "Deze patch bevat geen nieuwe features en **lost alleen upgrade-problemen " "op** voor sommige gebruikers." -#: ../../changelog.rst:285 +#: ../../changelog.rst:364 msgid "" "Fix for issues `#200 `_ & `#217 `_)." -#: ../../changelog.rst:295 +#: ../../changelog.rst:374 msgid "" "There is **experimental support** for ``Python 3.6`` and ``Python 3.7 " "(nightly)`` as the unittests are `now built against those versions `_ (`#167 `_)." -#: ../../changelog.rst:297 +#: ../../changelog.rst:376 msgid "**Legacy warning**" msgstr "**Waarschuwing voor legacy**" -#: ../../changelog.rst:299 +#: ../../changelog.rst:378 msgid "" "The migrations that were squashed together in (`#31 " "`_) have been " @@ -912,7 +1148,7 @@ msgstr "" "**verwijderd**. Hier heb je alleen maar te maken wanneer je nog gebruik " "maakt van een dsmrreader-versie **vóór** ``v0.13 (β)``." -#: ../../changelog.rst:300 +#: ../../changelog.rst:379 msgid "" "If you are indeed still running ``< v0.13 (β)``, please upgrade to " "``v1.4`` first (!), followed by an upgrade to ``v1.5``." @@ -920,409 +1156,409 @@ msgstr "" "Wanneer je nog steeds een versie van vóór ``< v0.13 (β)`` draait, upgrade" " dan eerst naar ``v1.4`` (!), gevolgd door een upgrade naar ``v1.5``." -#: ../../changelog.rst:304 +#: ../../changelog.rst:383 msgid "" "Verify telegrams' CRC (`#188 `_)." msgstr "" -#: ../../changelog.rst:305 +#: ../../changelog.rst:384 msgid "" "Display last 24 hours on dashboard (`#164 " "`_)." msgstr "" -#: ../../changelog.rst:306 +#: ../../changelog.rst:385 msgid "" "Status page visualisation (`#172 `_)." msgstr "" -#: ../../changelog.rst:307 +#: ../../changelog.rst:386 msgid "" "Store and display phases consumption (`#161 " "`_)." msgstr "" -#: ../../changelog.rst:308 +#: ../../changelog.rst:387 msgid "" "Weather graph not showing when no gas data is available (`#170 " "`_)." msgstr "" -#: ../../changelog.rst:309 +#: ../../changelog.rst:388 msgid "" "Upgrade to ChartJs 2.0 (`#127 `_)." msgstr "" -#: ../../changelog.rst:310 +#: ../../changelog.rst:389 msgid "" "Improve Statistics page performance (`#173 " "`_)." msgstr "" -#: ../../changelog.rst:311 +#: ../../changelog.rst:390 msgid "" "Version checker at github (`#166 `_)." msgstr "" -#: ../../changelog.rst:312 +#: ../../changelog.rst:391 msgid "" "Remove required login for dismissal of in-app notifications (`#179 " "`_)." msgstr "" -#: ../../changelog.rst:313 +#: ../../changelog.rst:392 msgid "" "Round numbers displayed in GUI to 2 decimals (`#183 " "`_)." msgstr "" -#: ../../changelog.rst:314 +#: ../../changelog.rst:393 msgid "" "Switch Nosetests to Pytest (+ pytest-cov) (`#167 " "`_)." msgstr "" -#: ../../changelog.rst:315 +#: ../../changelog.rst:394 msgid "" "PyLama code audit (+ pytest-cov) (`#158 " "`_)." msgstr "" -#: ../../changelog.rst:316 +#: ../../changelog.rst:395 msgid "" "Double upgrade of Django framework ``Django 1.8`` -> ``Django 1.9`` -> " "``Django 1.10`` (`#103 `_)." msgstr "" -#: ../../changelog.rst:317 +#: ../../changelog.rst:396 msgid "" "Force ``PYTHONUNBUFFERED`` for supervisor commands (`#176 " "`_)." msgstr "" -#: ../../changelog.rst:318 +#: ../../changelog.rst:397 msgid "" "Documentation updates for v1.5 (`#171 `_)." msgstr "" -#: ../../changelog.rst:319 +#: ../../changelog.rst:398 msgid "" "Requirements update for v1.5 (december 2016) (`#182 " "`_)." msgstr "" -#: ../../changelog.rst:320 +#: ../../changelog.rst:399 msgid "" "Improved backend process logging (`#184 " "`_)." msgstr "" -#: ../../changelog.rst:325 +#: ../../changelog.rst:404 msgid "v1.4.1 - 2016-12-12" msgstr "" -#: ../../changelog.rst:329 +#: ../../changelog.rst:408 msgid "" "Consumption chart hangs due to unique_key violation (`#174 " "`_)." msgstr "" -#: ../../changelog.rst:330 +#: ../../changelog.rst:409 msgid "" "NoReverseMatch at / Reverse for 'docs' (`#175 " "`_)." msgstr "" -#: ../../changelog.rst:335 +#: ../../changelog.rst:414 msgid "v1.4.0 - 2016-11-28" msgstr "" -#: ../../changelog.rst:338 +#: ../../changelog.rst:417 msgid "" "Support for ``Python 3.5`` has been added officially (`#55 " "`_)." msgstr "" -#: ../../changelog.rst:342 +#: ../../changelog.rst:421 msgid "" "Push notifications for Notify My Android / Prowl (iOS), written by Jeroen" " Peters (`#152 `_)." msgstr "" -#: ../../changelog.rst:343 +#: ../../changelog.rst:422 msgid "" "Support for both single and high/low tariff (`#130 " "`_)." msgstr "" -#: ../../changelog.rst:344 +#: ../../changelog.rst:423 msgid "" "Add new note from Dashboard has wrong time format (`#159 " "`_)." msgstr "" -#: ../../changelog.rst:345 +#: ../../changelog.rst:424 msgid "" "Display estimated price for current usage in Dashboard (`#155 " "`_)." msgstr "" -#: ../../changelog.rst:346 +#: ../../changelog.rst:425 msgid "" "Dropbox API v1 deprecated in June 2017 (`#142 " "`_)." msgstr "" -#: ../../changelog.rst:347 +#: ../../changelog.rst:426 msgid "" "Improve code coverage (`#151 `_)." msgstr "" -#: ../../changelog.rst:348 +#: ../../changelog.rst:427 msgid "" "Restyle configuration overview (`#156 `_)." msgstr "" -#: ../../changelog.rst:349 +#: ../../changelog.rst:428 msgid "" "Capability based push notifications (`#165 " "`_)." msgstr "" -#: ../../changelog.rst:354 +#: ../../changelog.rst:433 msgid "v1.3.2 - 2016-11-08" msgstr "" -#: ../../changelog.rst:357 +#: ../../changelog.rst:436 msgid "" "Requirements update (november 2016) (`#150 " "`_)." msgstr "" -#: ../../changelog.rst:362 +#: ../../changelog.rst:441 msgid "v1.3.1 - 2016-08-16" msgstr "" -#: ../../changelog.rst:365 +#: ../../changelog.rst:444 msgid "" "CSS large margin-bottom (`#144 `_)." msgstr "" -#: ../../changelog.rst:366 +#: ../../changelog.rst:445 msgid "" "Django security releases issued: 1.8.14 (`#147 " "`_)." msgstr "" -#: ../../changelog.rst:367 +#: ../../changelog.rst:446 msgid "" "Requirements update (August 2016) (`#148 " "`_)." msgstr "" -#: ../../changelog.rst:368 +#: ../../changelog.rst:447 msgid "" "Query performance improvements (`#149 `_)." msgstr "" -#: ../../changelog.rst:373 +#: ../../changelog.rst:452 msgid "v1.3.0 - 2016-07-15" msgstr "" -#: ../../changelog.rst:376 +#: ../../changelog.rst:455 msgid "" "API endpoint for datalogger (`#140 `_)." msgstr "" -#: ../../changelog.rst:377 +#: ../../changelog.rst:456 msgid "" "Colors for charts (`#137 `_)." msgstr "" -#: ../../changelog.rst:378 +#: ../../changelog.rst:457 msgid "" "Data export: Mindergas.nl (`#10 `_)." msgstr "" -#: ../../changelog.rst:379 +#: ../../changelog.rst:458 msgid "" "Requirement upgrade (`#143 `_)." msgstr "" -#: ../../changelog.rst:380 +#: ../../changelog.rst:459 msgid "" "Installation wizard for first time use (`#139 " "`_)." msgstr "" -#: ../../changelog.rst:385 +#: ../../changelog.rst:464 msgid "v1.2.0 - 2016-05-18" msgstr "" -#: ../../changelog.rst:388 +#: ../../changelog.rst:467 msgid "" "Energy supplier prices does not indicate tariff type (Django admin) " "(`#126 `_)." msgstr "" -#: ../../changelog.rst:389 +#: ../../changelog.rst:468 msgid "" "Requirements update (`#128 `_)." msgstr "" -#: ../../changelog.rst:390 +#: ../../changelog.rst:469 msgid "" "Force backup (`#123 `_)." msgstr "" -#: ../../changelog.rst:391 +#: ../../changelog.rst:470 msgid "" "Update clean-install.md (`#131 `_)." msgstr "" -#: ../../changelog.rst:392 +#: ../../changelog.rst:471 msgid "" "Improve data export field names (`#132 " "`_)." msgstr "" -#: ../../changelog.rst:393 +#: ../../changelog.rst:472 msgid "" "Display average temperature in archive (`#122 " "`_)." msgstr "" -#: ../../changelog.rst:394 +#: ../../changelog.rst:473 msgid "" "Pie charts on trends page overlap their canvas (`#136 " "`_)." msgstr "" -#: ../../changelog.rst:395 +#: ../../changelog.rst:474 msgid "" "'Slumber' consumption (`#115 `_)." msgstr "" -#: ../../changelog.rst:396 +#: ../../changelog.rst:475 msgid "" "Show lowest & highest Watt peaks (`#138 " "`_)." msgstr "" -#: ../../changelog.rst:397 +#: ../../changelog.rst:476 msgid "" "Allow day & hour statistics reset due to changing energy prices (`#95 " "`_)." msgstr "" -#: ../../changelog.rst:402 +#: ../../changelog.rst:481 msgid "v1.1.2 - 2016-05-01" msgstr "" -#: ../../changelog.rst:405 +#: ../../changelog.rst:484 msgid "" "Trends page giving errors (when lacking data) (`#125 " "`_)." msgstr "" -#: ../../changelog.rst:410 +#: ../../changelog.rst:489 msgid "v1.1.1 - 2016-04-27" msgstr "" -#: ../../changelog.rst:413 +#: ../../changelog.rst:492 msgid "" "Improve readme (`#124 `_)." msgstr "" -#: ../../changelog.rst:418 +#: ../../changelog.rst:497 msgid "v1.1.0 - 2016-04-23" msgstr "" -#: ../../changelog.rst:421 +#: ../../changelog.rst:500 msgid "" "Autorefresh dashboard (`#117 `_)." msgstr "" -#: ../../changelog.rst:422 +#: ../../changelog.rst:501 msgid "" "Improve line graphs' visibility (`#111 " "`_)." msgstr "" -#: ../../changelog.rst:423 +#: ../../changelog.rst:502 msgid "" "Easily add notes (`#110 `_)." msgstr "" -#: ../../changelog.rst:424 +#: ../../changelog.rst:503 msgid "" "Export data points in CSV format (`#2 `_)." msgstr "" -#: ../../changelog.rst:425 +#: ../../changelog.rst:504 msgid "" "Allow day/month/year comparison (`#94 `_)." msgstr "" -#: ../../changelog.rst:426 +#: ../../changelog.rst:505 msgid "" "Docs: Add FAQ and generic application info (`#113 " "`_)." msgstr "" -#: ../../changelog.rst:427 +#: ../../changelog.rst:506 msgid "" "Support for Iskra meter (DSMR 2.x) (`#120 " "`_)." msgstr "" -#: ../../changelog.rst:432 +#: ../../changelog.rst:511 msgid "v1.0.1 - 2016-04-07" msgstr "" -#: ../../changelog.rst:435 +#: ../../changelog.rst:514 msgid "" "Update licence to OSI compatible one (`#119 " "`_)." msgstr "" -#: ../../changelog.rst:440 +#: ../../changelog.rst:519 msgid "v1.0.0 - 2016-04-07" msgstr "" -#: ../../changelog.rst:441 +#: ../../changelog.rst:520 msgid "First official stable release." msgstr "Eerste officiële stabiele release." -#: ../../changelog.rst:446 +#: ../../changelog.rst:525 msgid "[β] v0.1 (2015-10-29) to 0.16 (2016-04-06)" msgstr "" -#: ../../changelog.rst:449 +#: ../../changelog.rst:528 msgid "" "All previous beta releases/changes have been combined to a single list " "below." @@ -1330,444 +1566,444 @@ msgstr "" "Alle vorige bèta releases/veranderingen zijn gecombineerd tot een enkele " "lijst hieronder." -#: ../../changelog.rst:451 +#: ../../changelog.rst:530 msgid "" "Move documentation to wiki or RTD (`#90 " "`_)." msgstr "" -#: ../../changelog.rst:452 +#: ../../changelog.rst:531 msgid "" "Translate README to Dutch (`#16 `_)." msgstr "" -#: ../../changelog.rst:453 +#: ../../changelog.rst:532 msgid "" "Delete (recent) history page (`#112 `_)." msgstr "" -#: ../../changelog.rst:454 +#: ../../changelog.rst:533 msgid "" "Display most recent temperature in dashboard (`#114 " "`_)." msgstr "" -#: ../../changelog.rst:455 +#: ../../changelog.rst:534 msgid "" "Upgrade Django to 1.8.12 (`#118 `_)." msgstr "" -#: ../../changelog.rst:457 +#: ../../changelog.rst:536 msgid "" "Redesign trends page (`#97 `_)." msgstr "" -#: ../../changelog.rst:458 +#: ../../changelog.rst:537 msgid "" "Support for summer time (`#105 `_)." msgstr "" -#: ../../changelog.rst:459 +#: ../../changelog.rst:538 msgid "" "Support for Daylight Saving Time (DST) transition (`#104 " "`_)." msgstr "" -#: ../../changelog.rst:460 +#: ../../changelog.rst:539 msgid "" "Add (error) hints to status page (`#106 " "`_)." msgstr "" -#: ../../changelog.rst:461 +#: ../../changelog.rst:540 msgid "" "Keep track of version (`#108 `_)." msgstr "" -#: ../../changelog.rst:463 +#: ../../changelog.rst:542 msgid "" "Django 1.8.11 released (`#82 `_)." msgstr "" -#: ../../changelog.rst:464 +#: ../../changelog.rst:543 msgid "" "Prevent tests from failing due to moment of execution (`#88 " "`_)." msgstr "" -#: ../../changelog.rst:465 +#: ../../changelog.rst:544 msgid "" "Statistics page meter positions are broken (`#93 " "`_)." msgstr "" -#: ../../changelog.rst:466 +#: ../../changelog.rst:545 msgid "" "Archive only shows graph untill 23:00 (11 pm) (`#77 " "`_)." msgstr "" -#: ../../changelog.rst:467 +#: ../../changelog.rst:546 msgid "" "Trends page crashes due to nullable fields average (`#100 " "`_)." msgstr "" -#: ../../changelog.rst:468 +#: ../../changelog.rst:547 msgid "" "Trends: Plot peak and off-peak relative to each other (`#99 " "`_)." msgstr "" -#: ../../changelog.rst:469 +#: ../../changelog.rst:548 msgid "" "Monitor requirements with requires.io (`#101 " "`_)." msgstr "" -#: ../../changelog.rst:470 +#: ../../changelog.rst:549 msgid "" "Terminology (`#41 `_)." msgstr "" -#: ../../changelog.rst:471 +#: ../../changelog.rst:550 msgid "" "Obsolete signals in dsmr_consumption (`#63 " "`_)." msgstr "" -#: ../../changelog.rst:472 +#: ../../changelog.rst:551 msgid "" "Individual app testing coverage (`#64 `_)." msgstr "" -#: ../../changelog.rst:473 +#: ../../changelog.rst:552 msgid "" "Support for extra devices on other M-bus (0-n:24.1) (`#92 " "`_)." msgstr "" -#: ../../changelog.rst:474 +#: ../../changelog.rst:553 msgid "" "Separate post-deployment commands (`#102 " "`_)." msgstr "" -#: ../../changelog.rst:476 +#: ../../changelog.rst:555 msgid "" "Show exceptions in production (webinterface) (`#87 " "`_)." msgstr "" -#: ../../changelog.rst:477 +#: ../../changelog.rst:556 msgid "" "Keep Supervisor processes running (`#79 " "`_)." msgstr "" -#: ../../changelog.rst:478 +#: ../../changelog.rst:557 msgid "" "Hourly stats of 22:00:00+00 every day lack gas (`#78 " "`_)." msgstr "" -#: ../../changelog.rst:479 +#: ../../changelog.rst:558 msgid "" "Test Travis-CI with MySQL + MariaDB + PostgreSQL (`#54 " "`_)." msgstr "" -#: ../../changelog.rst:480 +#: ../../changelog.rst:559 msgid "" "PostgreSQL tests + nosetests + coverage failure: unrecognized " "configuration parameter \"foreign_key_checks\" (`#62 " "`_)." msgstr "" -#: ../../changelog.rst:481 +#: ../../changelog.rst:560 msgid "" "Performance check (`#83 `_)." msgstr "" -#: ../../changelog.rst:482 +#: ../../changelog.rst:561 msgid "" "Allow month & year archive (`#66 `_)." msgstr "" -#: ../../changelog.rst:483 +#: ../../changelog.rst:562 msgid "" "Graphs keep increasing height on tablet (`#89 " "`_)." msgstr "" -#: ../../changelog.rst:485 +#: ../../changelog.rst:564 msgid "" "Delete StatsSettings(.track) settings model (`#71 " "`_)." msgstr "" -#: ../../changelog.rst:486 +#: ../../changelog.rst:565 msgid "" "Drop deprecated commands (`#22 `_)." msgstr "" -#: ../../changelog.rst:487 +#: ../../changelog.rst:566 msgid "" "Datalogger doesn't work properly with DSMR 4.2 (KAIFA-METER) (`#73 " "`_)." msgstr "" -#: ../../changelog.rst:488 +#: ../../changelog.rst:567 msgid "" "Dashboard month statistics costs does not add up (`#75 " "`_)." msgstr "" -#: ../../changelog.rst:489 +#: ../../changelog.rst:568 msgid "" "Log unhandled exceptions and errors (`#65 " "`_)." msgstr "" -#: ../../changelog.rst:490 +#: ../../changelog.rst:569 msgid "" "Datalogger crashes with IntegrityError because 'timestamp' is null (`#74 " "`_)." msgstr "" -#: ../../changelog.rst:491 +#: ../../changelog.rst:570 msgid "" "Trends are always shown in UTC (`#76 `_)." msgstr "" -#: ../../changelog.rst:492 +#: ../../changelog.rst:571 msgid "" "Squash migrations (`#31 `_)." msgstr "" -#: ../../changelog.rst:493 +#: ../../changelog.rst:572 msgid "" "Display 'electricity returned' graph in dashboard (`#81 " "`_)." msgstr "" -#: ../../changelog.rst:494 +#: ../../changelog.rst:573 msgid "" "Optional gas (and electricity returned) capabilities tracking (`#70 " "`_)." msgstr "" -#: ../../changelog.rst:495 +#: ../../changelog.rst:574 msgid "" "Add 'electricity returned' to trends page (`#84 " "`_)." msgstr "" -#: ../../changelog.rst:497 +#: ../../changelog.rst:576 msgid "" "Archive: View past days details (`#61 `_)." msgstr "" -#: ../../changelog.rst:498 +#: ../../changelog.rst:577 msgid "" "Dashboard: Consumption total for current month (`#60 " "`_)." msgstr "" -#: ../../changelog.rst:499 +#: ../../changelog.rst:578 msgid "" "Check whether gas readings are optional (`#34 " "`_)." msgstr "" -#: ../../changelog.rst:500 +#: ../../changelog.rst:579 msgid "" "Django security releases issued: 1.8.10 (`#68 " "`_)." msgstr "" -#: ../../changelog.rst:501 +#: ../../changelog.rst:580 msgid "" "Notes display in archive (`#69 `_)." msgstr "" -#: ../../changelog.rst:503 +#: ../../changelog.rst:582 msgid "" "Status page/alerts when features are disabled/unavailable (`#45 " "`_)." msgstr "" -#: ../../changelog.rst:504 +#: ../../changelog.rst:583 msgid "" "Integrate Travis CI (`#48 `_)." msgstr "" -#: ../../changelog.rst:505 +#: ../../changelog.rst:584 msgid "" "Testing coverage (`#38 `_)." msgstr "" -#: ../../changelog.rst:506 +#: ../../changelog.rst:585 msgid "" "Implement automatic backups & Dropbox cloud storage (`#44 " "`_)." msgstr "" -#: ../../changelog.rst:507 +#: ../../changelog.rst:586 msgid "" "Link code coverage service to repository (`#56 " "`_)." msgstr "" -#: ../../changelog.rst:508 +#: ../../changelog.rst:587 msgid "" "Explore timezone.localtime() as replacement for datetime.astimezone() " "(`#50 `_)." msgstr "" -#: ../../changelog.rst:509 +#: ../../changelog.rst:588 msgid "" "Align GasConsumption.read_at to represent the start of hour (`#40 " "`_)." msgstr "" -#: ../../changelog.rst:511 +#: ../../changelog.rst:590 msgid "" "Cleanup unused static files (`#47 `_)." msgstr "" -#: ../../changelog.rst:512 +#: ../../changelog.rst:591 msgid "" "Investigated mysql_tzinfo_to_sql — Load the Time Zone Tables (`#35 " "`_)." msgstr "" -#: ../../changelog.rst:513 +#: ../../changelog.rst:592 msgid "" "Make additional DSMR data optional (`#46 " "`_)." msgstr "" -#: ../../changelog.rst:514 +#: ../../changelog.rst:593 msgid "" "Localize graph x-axis (`#42 `_)." msgstr "" -#: ../../changelog.rst:515 +#: ../../changelog.rst:594 msgid "" "Added graph formatting string to gettext file (`#42 " "`_)." msgstr "" -#: ../../changelog.rst:516 +#: ../../changelog.rst:595 msgid "" "Different colors for peak & off-peak electricity (`#52 " "`_)." msgstr "" -#: ../../changelog.rst:517 +#: ../../changelog.rst:596 msgid "" "Admin: Note widget (`#51 `_)." msgstr "" -#: ../../changelog.rst:518 +#: ../../changelog.rst:597 msgid "" "Allow GUI to run without data (`#26 `_)." msgstr "" -#: ../../changelog.rst:520 +#: ../../changelog.rst:599 msgid "" "Moved project to GitHub (`#28 `_)." msgstr "" -#: ../../changelog.rst:521 +#: ../../changelog.rst:600 msgid "Added stdout to dsmr_backend to reflect progress." msgstr "" -#: ../../changelog.rst:522 +#: ../../changelog.rst:601 msgid "" "Restore note usage in GUI (`#39 `_)." msgstr "" -#: ../../changelog.rst:524 +#: ../../changelog.rst:603 msgid "" "Store daily, weekly, monthly and yearly statistics (`#3 " "`_)." msgstr "" -#: ../../changelog.rst:525 +#: ../../changelog.rst:604 msgid "" "Improved Recent History page performance a bit. (as result of `#3 " "`_)" msgstr "" -#: ../../changelog.rst:526 +#: ../../changelog.rst:605 msgid "" "Updates ChartJS library tot 1.1, disposing django-chartjs plugin. Labels " "finally work! (as result of `#3 `_)" msgstr "" -#: ../../changelog.rst:527 +#: ../../changelog.rst:606 msgid "" "Added trends page. (as result of `#3 `_)" msgstr "" -#: ../../changelog.rst:529 +#: ../../changelog.rst:608 msgid "" "Recent history setting: set range (`#29 " "`_)." msgstr "" -#: ../../changelog.rst:530 +#: ../../changelog.rst:609 msgid "" "Mock required for test: dsmr_weather.test_weather_tracking (`#32 " "`_)." msgstr "" -#: ../../changelog.rst:532 +#: ../../changelog.rst:611 msgid "" "Massive refactoring: Separating apps & using signals (`#19 " "`_)." msgstr "" -#: ../../changelog.rst:533 +#: ../../changelog.rst:612 msgid "" "README update: Exit character for cu (`#27 " "`_, by Jeroen " "Peters)." msgstr "" -#: ../../changelog.rst:534 +#: ../../changelog.rst:613 msgid "Fixed untranslated strings in admin interface." msgstr "" -#: ../../changelog.rst:535 +#: ../../changelog.rst:614 msgid "Upgraded Django to 1.8.9." msgstr "" @@ -1783,3 +2019,6 @@ msgstr "" #~ msgid "v1.12.0 - 2018-xx-xx" #~ msgstr "" +#~ msgid "v1.13.0 - 2018-xx-xx" +#~ msgstr "" + diff --git a/docs/locale/nl/LC_MESSAGES/credits.po b/docs/locale/nl/LC_MESSAGES/credits.po index 3d7694948..a4d454e55 100644 --- a/docs/locale/nl/LC_MESSAGES/credits.po +++ b/docs/locale/nl/LC_MESSAGES/credits.po @@ -44,150 +44,186 @@ msgid "`balk77 `_" msgstr "" #: ../../credits.rst:17 -msgid "`Bert-Jan Vos `_" +msgid "`Baseje `_" msgstr "" #: ../../credits.rst:18 -msgid "`dajappie `_" +msgid "`Bert-Jan Vos `_" msgstr "" #: ../../credits.rst:19 -msgid "`Daniel ter Horst `_" +msgid "`Calimerorulez `_" msgstr "" #: ../../credits.rst:20 -msgid "`dbmnl `_" +msgid "`dajappie `_" msgstr "" #: ../../credits.rst:21 -msgid "`emilkwaaitaal `_" +msgid "`Daniel ter Horst `_" msgstr "" #: ../../credits.rst:22 -msgid "`fpompert `_" +msgid "`dbmnl `_" msgstr "" #: ../../credits.rst:23 -msgid "`Gert Schaafsma `_" +msgid "`emilkwaaitaal `_" msgstr "" #: ../../credits.rst:24 -msgid "`gertjuhh `_" +msgid "`Ernst79 `_" msgstr "" #: ../../credits.rst:25 -msgid "`goegol `_" +msgid "`f0nt4 `_" msgstr "" #: ../../credits.rst:26 -msgid "`Hans-Paul Hemelaar `_" +msgid "`fpompert `_" msgstr "" #: ../../credits.rst:27 -msgid "`helmo `_" +msgid "`FutureCow `_" msgstr "" #: ../../credits.rst:28 -msgid "`HugoDaBosss `_" +msgid "`Gert Schaafsma `_" msgstr "" #: ../../credits.rst:29 -msgid "`Jelte Leijenaar `_" +msgid "`gertjuhh `_" msgstr "" #: ../../credits.rst:30 -msgid "`Jeroen Tielen `_" +msgid "`goegol `_" msgstr "" #: ../../credits.rst:31 -msgid "`Joris Vervuurt `_" +msgid "`Hans-Paul Hemelaar `_" msgstr "" #: ../../credits.rst:32 -msgid "`ju5t `_" +msgid "`helmo `_" msgstr "" #: ../../credits.rst:33 -msgid "Koen Volleberg" +msgid "`HugoDaBosss `_" msgstr "" #: ../../credits.rst:34 -msgid "`lckarssen `_" +msgid "`Jelte Leijenaar `_" msgstr "" #: ../../credits.rst:35 -msgid "`MarsWarrior `_" +msgid "`Jeroen Tielen `_" msgstr "" #: ../../credits.rst:36 -msgid "`mbnn `_" +msgid "`joopy `_" msgstr "" #: ../../credits.rst:37 -msgid "`meijjaa `_" +msgid "`Joris Vervuurt `_" msgstr "" #: ../../credits.rst:38 -msgid "`michielvisser `_" +msgid "`ju5t `_" msgstr "" #: ../../credits.rst:39 -msgid "`mkruiver `_" +msgid "`jwveldhuis `_" msgstr "" #: ../../credits.rst:40 -msgid "`Paul Vinken `_" +msgid "Koen Volleberg" msgstr "" #: ../../credits.rst:41 -msgid "`perryodk `_" +msgid "`lckarssen `_" msgstr "" #: ../../credits.rst:42 -msgid "`pyrocumulus `_" +msgid "`MarsWarrior `_" msgstr "" #: ../../credits.rst:43 -msgid "`Sander de Leeuw `_" +msgid "`mbnn `_" msgstr "" #: ../../credits.rst:44 -msgid "`Sevickson `_" +msgid "`meijjaa `_" msgstr "" #: ../../credits.rst:45 -msgid "`ThinkPadNL `_" +msgid "`michielvisser `_" msgstr "" #: ../../credits.rst:46 -msgid "`thommy101 `_" +msgid "`mkruiver `_" msgstr "" #: ../../credits.rst:47 -msgid "`TopdRob `_" +msgid "`mrvanes `_" msgstr "" #: ../../credits.rst:48 -msgid "`trbs `_" +msgid "`Paul Vinken `_" msgstr "" #: ../../credits.rst:49 -msgid "`voipmeister `_" +msgid "`perryodk `_" msgstr "" #: ../../credits.rst:50 -msgid "`WatskeBart `_" +msgid "`pyrocumulus `_" msgstr "" #: ../../credits.rst:51 -msgid "`xirixiz `_" +msgid "`raoulteeuwen `_" +msgstr "" + +#: ../../credits.rst:52 +msgid "`Sander de Leeuw `_" +msgstr "" + +#: ../../credits.rst:53 +msgid "`Sevickson `_" +msgstr "" + +#: ../../credits.rst:54 +msgid "`ThinkPadNL `_" msgstr "" #: ../../credits.rst:55 +msgid "`thommy101 `_" +msgstr "" + +#: ../../credits.rst:56 +msgid "`TopdRob `_" +msgstr "" + +#: ../../credits.rst:57 +msgid "`trbs `_" +msgstr "" + +#: ../../credits.rst:58 +msgid "`voipmeister `_" +msgstr "" + +#: ../../credits.rst:59 +msgid "`WatskeBart `_" +msgstr "" + +#: ../../credits.rst:60 +msgid "`xirixiz `_" +msgstr "" + +#: ../../credits.rst:64 msgid "Software used" msgstr "Gebruikte software" -#: ../../credits.rst:56 +#: ../../credits.rst:65 msgid "" "Please note and respect their licences as well, if any. Credits to the " "following software and projects:" @@ -195,122 +231,128 @@ msgstr "" "Houd rekening met eventuele licenties/restricties van deze software, " "wanneer van toepassing. Met dank aan de volgende software en projecten:" -#: ../../credits.rst:58 +#: ../../credits.rst:67 msgid "`Raspbian `_" msgstr "" -#: ../../credits.rst:59 +#: ../../credits.rst:68 msgid "`Django Project `_" msgstr "" -#: ../../credits.rst:60 +#: ../../credits.rst:69 msgid "`Django Solo `_" msgstr "" -#: ../../credits.rst:61 +#: ../../credits.rst:70 msgid "`Django Colorfield `_" msgstr "" -#: ../../credits.rst:62 +#: ../../credits.rst:71 msgid "`Supervisor `_" msgstr "" -#: ../../credits.rst:63 +#: ../../credits.rst:72 msgid "`MySQL `_" msgstr "" -#: ../../credits.rst:64 +#: ../../credits.rst:73 msgid "`MariaDB `_" msgstr "" -#: ../../credits.rst:65 +#: ../../credits.rst:74 msgid "`PostgreSQL `_" msgstr "" -#: ../../credits.rst:66 +#: ../../credits.rst:75 msgid "" "`Director Responsive Admin `_" msgstr "" -#: ../../credits.rst:67 +#: ../../credits.rst:76 msgid "" "Favicon made by `Freepik `_ from `flaticon.com " "`_" msgstr "" -#: ../../credits.rst:68 +#: ../../credits.rst:77 msgid "`Real Favicon Generator `_" msgstr "" -#: ../../credits.rst:69 +#: ../../credits.rst:78 msgid "`Bootstrap-datepicker `_" msgstr "" -#: ../../credits.rst:70 +#: ../../credits.rst:79 msgid "`Github `_" msgstr "" -#: ../../credits.rst:71 +#: ../../credits.rst:80 msgid "`TravisCI `_" msgstr "" -#: ../../credits.rst:72 +#: ../../credits.rst:81 msgid "`Codecov `_" msgstr "" -#: ../../credits.rst:73 +#: ../../credits.rst:82 msgid "`Read The Docs `_" msgstr "" -#: ../../credits.rst:74 +#: ../../credits.rst:83 msgid "`MW `_" msgstr "" -#: ../../credits.rst:75 +#: ../../credits.rst:84 msgid "" "`Full Page Screen Capture `_" msgstr "" -#: ../../credits.rst:76 +#: ../../credits.rst:85 msgid "`Buienradar `_" msgstr "" -#: ../../credits.rst:77 +#: ../../credits.rst:86 msgid "`Django REST Framework `_" msgstr "" -#: ../../credits.rst:78 +#: ../../credits.rst:87 msgid "`Swagger UI Themes `_" msgstr "" -#: ../../credits.rst:82 +#: ../../credits.rst:91 msgid "Misc" msgstr "Overig" -#: ../../credits.rst:84 +#: ../../credits.rst:93 msgid "Dutch Smart Meter reading specifications, data cables, examples and hints:" msgstr "Dutch Smart Meter reading specifications, data cables, examples and hints:" -#: ../../credits.rst:86 +#: ../../credits.rst:95 msgid "`Gé Janssen `_" msgstr "" -#: ../../credits.rst:88 +#: ../../credits.rst:97 msgid "" "`Joost van der Linde (smartmeterdashboard) " "`_" msgstr "" -#: ../../credits.rst:90 +#: ../../credits.rst:99 msgid "`SOS Solutions `_" msgstr "" -#: ../../credits.rst:92 +#: ../../credits.rst:101 msgid "`Nico Di Rocco `_" msgstr "" #~ msgid "`dbmnl `_" #~ msgstr "" +#~ msgid "`raoulteeuwen `_" +#~ msgstr "" + +#~ msgid "`raoulteeuwen `_" +#~ msgstr "" + diff --git a/docs/locale/nl/LC_MESSAGES/mqtt.mo b/docs/locale/nl/LC_MESSAGES/mqtt.mo index a81046443..60ef31ba3 100644 Binary files a/docs/locale/nl/LC_MESSAGES/mqtt.mo and b/docs/locale/nl/LC_MESSAGES/mqtt.mo differ diff --git a/docs/locale/nl/LC_MESSAGES/mqtt.po b/docs/locale/nl/LC_MESSAGES/mqtt.po index f1d944afb..ba808325e 100644 --- a/docs/locale/nl/LC_MESSAGES/mqtt.po +++ b/docs/locale/nl/LC_MESSAGES/mqtt.po @@ -9,17 +9,17 @@ msgstr "" "Project-Id-Version: DSMR Reader 1.x\n" "Report-Msgid-Bugs-To: \n" "Last-Translator: \n" +"Language: nl\n" "Language-Team: \n" +"Plural-Forms: nplurals=2; plural=(n != 1)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.3.4\n" -"Language: nl\n" -"X-Generator: Poedit 1.8.7.1\n" +"Generated-By: Babel 2.5.1\n" #: ../../mqtt.rst:2 -msgid "MQTT" -msgstr "MQTT" +msgid "Integration: MQTT" +msgstr "" #: ../../mqtt.rst:4 msgid "The application supports sending MQTT messages to your broker." @@ -41,11 +41,11 @@ msgstr "Onbewerkte telegrammen" #: ../../mqtt.rst:15 msgid "" -"Each time a telegram is read via the v1 API or datalogger. You can have the " -"entire telegram string passed on to your MQTT broker." +"Each time a telegram is read via the v1 API or datalogger. You can have " +"the entire telegram string passed on to your MQTT broker." msgstr "" -"Elke keer dat een telegram is is uitgelezen via de v1 API of datalogger. Je " -"kunt het gehele telegram 1-op-1 doorsturen naar je MQTT-broker." +"Elke keer dat een telegram is is uitgelezen via de v1 API of datalogger. " +"Je kunt het gehele telegram 1-op-1 doorsturen naar je MQTT-broker." #: ../../mqtt.rst:19 msgid "Reading creation" @@ -53,13 +53,13 @@ msgstr "Meting aangemaakt" #: ../../mqtt.rst:20 msgid "" -"Each time a new reading is parsed, either created by the datalogger or v1/v2 " -"API. You can have each parsed reading passed on to your broker either in JSON " -"format or on a per-field per-topic basis." +"Each time a new reading is parsed, either created by the datalogger or " +"v1/v2 API. You can have each parsed reading passed on to your broker " +"either in JSON format or on a per-field per-topic basis." msgstr "" -"Elke keer dat er een nieuwe meting is opgeslagen, ofwel via de datalogger " -"ofwel via de v1/v2 API. Je kunt elke nieuwe meting doorsturen naar je broker " -"in ofwel JSON-formaat, ofwel los per veld per topic." +"Elke keer dat er een nieuwe meting is opgeslagen, ofwel via de datalogger" +" ofwel via de v1/v2 API. Je kunt elke nieuwe meting doorsturen naar je " +"broker in ofwel JSON-formaat, ofwel los per veld per topic." #: ../../mqtt.rst:25 msgid "Configuration" @@ -67,11 +67,11 @@ msgstr "Configuratie" #: ../../mqtt.rst:26 msgid "" -"Support for MQTT is disabled by default in the application. You may enable it " -"in your configuration or admin settings." +"Support for MQTT is disabled by default in the application. You may " +"enable it in your configuration or admin settings." msgstr "" -"Ondersteuning voor MQTT is standard uitgeschakeld. Je kunt dit inschakelen in " -"de configuratie/admin-instellingen." +"Ondersteuning voor MQTT is standard uitgeschakeld. Je kunt dit " +"inschakelen in de configuratie/admin-instellingen." #: ../../mqtt.rst:31 msgid "Broker configuration" @@ -82,62 +82,72 @@ msgid "" "The broker configuration allows you to set the hostname and port of your " "broker. Optionally, you can enter any credentials here as well." msgstr "" -"De brokerconfiguratie stelt je in staat om de hostnaam en poort van je broker " -"in te stellen. Optioneel kun je hier ook benodigde inloggegevens invoeren." +"De brokerconfiguratie stelt je in staat om de hostnaam en poort van je " +"broker in te stellen. Optioneel kun je hier ook benodigde inloggegevens " +"invoeren." -#: ../../mqtt.rst:37 +#: ../../mqtt.rst:41 msgid "Raw telegram configuration" msgstr "Onbewerkte telegram configuratie" -#: ../../mqtt.rst:38 +#: ../../mqtt.rst:42 msgid "" -"This allows you to send each raw telegram received to your broker. Just enable " -"it and enter the topic path it should be sent to." +"This allows you to send each raw telegram received to your broker. Just " +"enable it and enter the topic path it should be sent to." msgstr "" -"Dit zorgt ervoor dat elk onbewerkt telegram 1-op-1 wordt doorgestuurd naar je " -"broker. Je hoeft dit alleen in te schakelen en het topic in te voeren waar het " -"naartoe gestuurd mag worden." +"Dit zorgt ervoor dat elk onbewerkt telegram 1-op-1 wordt doorgestuurd " +"naar je broker. Je hoeft dit alleen in te schakelen en het topic in te " +"voeren waar het naartoe gestuurd mag worden." -#: ../../mqtt.rst:43 +#: ../../mqtt.rst:51 msgid "JSON telegram configuration" msgstr "JSON telegram configuratie" -#: ../../mqtt.rst:44 +#: ../../mqtt.rst:52 msgid "" -"This allows you to send each reading created to your broker, in JSON format. " -"You can alter the field names used, by changing their name on the right hand " -"side. You may even remove the lines of the fields you wish to omit at all." +"This allows you to send each reading created to your broker, in JSON " +"format. You can alter the field names used, by changing their name on the" +" right hand side. You may even remove the lines of the fields you wish to" +" omit at all." msgstr "" "Dit stelt je in staat om elke aangemaakte meting naar je broker door te " -"sturen, in JSON-formaat. Je hebt invloed op de naamgeving van de velden, door " -"deze aan de rechterzijde aan te passen. Je kunt ook regels weghalen waarvan je " -"de velden uberhaupt niet wenst te zien." +"sturen, in JSON-formaat. Je hebt invloed op de naamgeving van de velden, " +"door deze aan de rechterzijde aan te passen. Je kunt ook regels weghalen " +"waarvan je de velden uberhaupt niet wenst te zien." -#: ../../mqtt.rst:48 +#: ../../mqtt.rst:60 msgid "" -"For example, this will format the JSON message to only contain these fields::" +"For example, this will format the JSON message to only contain these " +"fields::" msgstr "" -"Voorbeeld: Dit zorgt ervoor dat het JSON-bericht alleen deze velden bevat::" +"Voorbeeld: Dit zorgt ervoor dat het JSON-bericht alleen deze velden " +"bevat::" -#: ../../mqtt.rst:64 +#: ../../mqtt.rst:77 msgid "Split topic telegram configuration" msgstr "Gesplitste topic telegram configuratie" -#: ../../mqtt.rst:65 +#: ../../mqtt.rst:78 msgid "" "This allows you to send each reading created, but splitted in multiple " -"messages. For each field you can designate a separate topic, by changing their " -"path on the right hand side. You can remove the lines of the fields you wish to" +"messages. For each field you can designate a separate topic, by changing " +"their path on the right hand side. You can remove the lines of the fields" +" you wish to" msgstr "" -"Dit stelt je in staat om elke nieuwe meting door te sturen naar je broker, " -"maar in gesplitst formaat over meerdere berichten. Voor elk veld kun je een " -"topic toewijzen waar de waarde naartoe gestuurd kan worden. Verwijder de " -"regels van de velden die je überhaupt niet gebruikt om ze uit te schakelen." +"Dit stelt je in staat om elke nieuwe meting door te sturen naar je " +"broker, maar in gesplitst formaat over meerdere berichten. Voor elk veld " +"kun je een topic toewijzen waar de waarde naartoe gestuurd kan worden. " +"Verwijder de regels van de velden die je überhaupt niet gebruikt om ze " +"uit te schakelen." -#: ../../mqtt.rst:69 +#: ../../mqtt.rst:86 msgid "" -"For example, this will make the application only broadcast these fields to " -"their topics::" +"For example, this will make the application only broadcast these fields " +"to their topics::" msgstr "" -"Voorbeeld: Dit zorgt ervoor dat de applicatie alleen deze velden doorstuurt " -"naar hun topics::" +"Voorbeeld: Dit zorgt ervoor dat de applicatie alleen deze velden " +"doorstuurt naar hun topics::" + +#~ msgid "MQTT" +#~ msgstr "MQTT" + diff --git a/docs/locale/nl/LC_MESSAGES/notifications.mo b/docs/locale/nl/LC_MESSAGES/notifications.mo index 18e7f1f0e..dba54f4cf 100644 Binary files a/docs/locale/nl/LC_MESSAGES/notifications.mo and b/docs/locale/nl/LC_MESSAGES/notifications.mo differ diff --git a/docs/locale/nl/LC_MESSAGES/notifications.po b/docs/locale/nl/LC_MESSAGES/notifications.po index a38419ed3..0233d759f 100644 --- a/docs/locale/nl/LC_MESSAGES/notifications.po +++ b/docs/locale/nl/LC_MESSAGES/notifications.po @@ -9,12 +9,13 @@ msgstr "" "Project-Id-Version: DSMR Reader v1.x\n" "Report-Msgid-Bugs-To: Dennis Siemensma \n" "Last-Translator: Dennis Siemensma \n" +"Language: nl\n" "Language-Team: Dennis Siemensma \n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.3.4\n" -"Language: nl\n" +"Generated-By: Babel 2.5.1\n" "X-Generator: Poedit 1.8.7.1\n" #: ../../notifications.rst:2 @@ -25,97 +26,198 @@ msgstr "Integratie: Notificaties" msgid "Usage notification: Daily usage statistics on your smartphone" msgstr "Verbruiksnotificaties: Dagelijkse verbruiksstatistieken op je smartphone" -#: ../../notifications.rst:11 -msgid "*Which services for sending notifications are supported?*" -msgstr "*Welke services voor het sturen van notificaties worden ondersteund?*" - #: ../../notifications.rst:13 -msgid "" -"Currently, two mobile platforms are supported: Android and iOS. The supported " -"app for Android is `NotifyMyAndroid `_. The " -"supported app for iOS is `Prowl `_." -msgstr "" -"Op dit moment worden twee platforms ondersteund: Android en iOS. De " -"ondersteunde app voor Android is `NotifyMyAndroid `_. De ondersteunde app voor iOS is `Prowl `_." +msgid "Which services for sending notifications are supported?" +msgstr "Welke services voor het sturen van notificaties worden ondersteund?" -#: ../../notifications.rst:18 -msgid "*How do I setup usage notifications?*" -msgstr "*Hoe stel ik verbruiksnotificaties in?*" +#: ../../notifications.rst:15 +msgid "Currently, two mobile platforms are supported: Android and iOS." +msgstr "Momenteel worden de volgende platformen ondersteund: Android en iOS." -#: ../../notifications.rst:20 +#: ../../notifications.rst:17 +msgid "The supported app for Android is `Pushover `_." +msgstr "De ondersteunde app voor Android is `Pushover `_." + +#: ../../notifications.rst:18 msgid "" -"Make sure you either have NotifyMyAndroid or Prowl installed on your " -"smartphone. If you don't, visit your platforms app store to download the app " -"and sign up for an account. Then, make sure to get your API key from the " -"notificationservice that you prefer. For instruction on obtaining the API key, " -"please read below." +"The supported apps for iOS are `Pushover `_ and `Prowl " +"`_." msgstr "" -"Zorg ervoor dat je NotifyMyAndroid of Prowl hebt geïnstalleerd op je " -"smartphone. Als dat niet het geval is, bezoek dan de app store van je " -"platform, download de gewenste app en maak daarvoor een account. Daarna haal " -"je de API key voor de notificatieservice die je wilt gebruiken op. Om te lezen " -"hoe dat werkt, lees dan de instructies bij de volgende kopjes." +"De ondersteunde apps voor iOS zijn `Pushover `_ en " +"`Prowl `_." #: ../../notifications.rst:22 +msgid "How do I setup usage notifications?" +msgstr "Hoe stel ik verbruiksnotificaties in?" + +#: ../../notifications.rst:24 msgid "" -"In the DSMR-reader settings for the Usagenotifications, tick the Send " -"Notifications checkbox and select the notification service you want to use. " -"Then copy the API key from the notification service and paste in into the the " -"textbox for the API key. When you save these settings, your first notification " -"should be sent after midnight. Don't worry, the notification will be sent with " -"low priority and will not wake you up." +"Make sure you either have Pushover or Prowl installed on your smartphone. If " +"you don't, visit your platforms app store to download the app and sign up for " +"an account. Then, make sure to get your API key from the notification service " +"that you prefer. For instruction on obtaining the API key, please read below." msgstr "" -"In de DSMR-reader instellingen voor de Verbruiksnotificaties zet je een vinkje " -"bij Stuur Notificaties en selecteer daaronder welke notificatieservice je wilt " -"gebruiken. Kopieeër daarna de API key van de notificatieservice en plak deze " -"in het tekstveld voor de API key. Als je deze instellingen opslaat zul je na " -"middernacht je eerste notificatie ontvangen. Geen nood, de notificatie wordt " -"altijd verstuurd met lage prioriteit, deze maakt je dus niet wakker." - -#: ../../notifications.rst:25 -msgid "*How do I obtain my API key for NotifyMyAndroid?*" -msgstr "*Hoe haal ik de API key op voor NotifyMyAndroid?*" - -#: ../../notifications.rst:27 +"Zorg ervoor dat je Pushover of Prowl hebt geïnstalleerd op je smartphone. Als " +"dat niet het geval is, bezoek dan de app store van je platform, download de " +"gewenste app en maak daarvoor een account. Daarna haal je de API key op voor " +"de notificatieservice die je wilt gebruiken. Om te lezen hoe dat werkt, lees " +"dan de instructies bij de volgende hoofdstukken hieronder." + +#: ../../notifications.rst:29 msgid "" -"After you have downloaded NotifyMyAndroid and signed up for an account you " -"should be able to `login to your NotifyMyAndroid account `_. Now go to \"`My Account `_\", you should see an overview of your " -"current API keys if you have any. To create an API key for the DSMR-reader, " -"please click **\"Generate New Key\"**." +"In the DSMR-reader **Notifications Apps** settings, select the notification " +"service you want to use. Copy the API key from the notification service and " +"paste in into the the textbox for the API key. When you save these settings, " +"your first notification should be sent after midnight. Don't worry about " +"nightly alerts, the notifications will be sent with low priority and should " +"not wake you up." msgstr "" -"Nadat je NotifyMyAndroid hebt gedownload en een account hebt aangemaakt zou je " -"moeten kunnen `inloggen op je NotifyMyAndroid-account `_. Ga nu naar \"`My Account `_\" om een overzicht van je account de API " -"keys te krijgen als je deze al hebt. Om een API key voor de DSMR-reader te " -"genereren klik je op **\"Generate New Key\"**." - -#: ../../notifications.rst:34 ../../notifications.rst:50 +"Selecteer in de **Notificatie Apps** instellingen binnen DSMR-reader welke " +"notificatieservice je gebruikt. Kopieer de API key van de notificatieservice " +"naar DSMR-reader. Wanneer dit goed ingesteld is, zou je de eerste notificatie " +"na middernacht moeten ontvangen." + +#: ../../notifications.rst:36 +msgid "How do I obtain my API key for Pushover?" +msgstr "Hoe haal ik de API key op voor Pushover?" + +#: ../../notifications.rst:38 msgid "" -"When a new key is generated, you will see it immediatly. Your key is listed " -"like in the screenshot below (the red box marks your API key)." +"After you have downloaded Pushover and signed up for an account you should be " +"able to `login into your Pushover account `_." msgstr "" -"Als er een nieuwe key is gegenereerd, zie je deze direct. De key is te vinden " -"zoals in onderstaande screenshot (er staat een rood kader om de key)." +"Nadat je Pushover gedownload hebt en je registreert voor een account, zou je " +"`moeten kunnen inloggen in je Pushover account `_." -#: ../../notifications.rst:41 -msgid "*How do I obtain my API key for Prowl?*" -msgstr "*Hoe haal ik de API key op voor Prowl?*" +#: ../../notifications.rst:40 +msgid "" +"You should see an overview of containing **Your User Key** (top right) and " +"Applications, if you have any. To create an application in Pushover, for " +"sending notifications to your phone, please click **Create an Application/API " +"Token**." +msgstr "" +"Je zou een overzicht moeten zien, waaronder rechtsbovenin **Your User Key**, " +"en eventueel Applications (indien je die al aangemaakt hebt). Om een " +"applicatie te maken voor het versturen van notificaties naar je telefoon, klik " +"op **Create an Application/API Token**." #: ../../notifications.rst:43 +msgid "Pushover requires you to enter two keys in DSMR-reader." +msgstr "Pushover vereist dat je twee keys in DSMR-reader instelt." + +#: ../../notifications.rst:45 +msgid "" +"You will need the **User Key** displayed on the top right in the screenshot " +"below." +msgstr "" +"Je hebt de **User Key** nodig, te vinden op de locatie rechtsbovenin de " +"onderstaande screenshot." + +#: ../../notifications.rst:46 +msgid "" +"And you will need the **API key** for the application you've created in " +"Pushover." +msgstr "" +"En je hebt de **API key** nodig voor de applicatie die je in Pushover hebt " +"aangemaakt." + +#: ../../notifications.rst:54 +msgid "How do I obtain my API key for Prowl?" +msgstr "Hoe haal ik de API key op voor Prowl?" + +#: ../../notifications.rst:56 msgid "" "After you have downloaded Prowl and signed up for an account you should be " -"able to `login to your Prowl account `_. " +"able to `login into your Prowl account `_." +msgstr "" +"Nadat je Prowl gedownload hebt en je registreert voor een account, zou je " +"`moeten kunnen inloggen in je Prowl account `_." + +#: ../../notifications.rst:58 +msgid "" "Now go to \"`API Keys `_\", you " "should see an overview of your current API keys if you have any. To create an " "API key for the DSMR-reader, input a name and click **\"Generate Key\"**." msgstr "" -"Nadat je Prowl hebt gedownload en een account hebt aangemaakt zou je moeten " -"kunnen `inloggen op je Prowl-account `_. " -"Ga nu naar \"`API Keys `_\" om een " -"overzicht van je API keys te krijgen als je deze al hebt. Om een API key voor " -"de DSMR-reader te genereren geef je een naam op en klik je op **\"Generate Key" +"Ga nu naar \"`API Keys `_\", je zou " +"nu een overzicht moeten zien van je API keys, mits je die al hebt. Om een API " +"key aan te maken voor DSMR-reader, voer een naam in en klik op **\"Generate Key" "\"**." + +#: ../../notifications.rst:65 +msgid "" +"When a new key is generated, you will see it immediatly. Your key is listed " +"like in the screenshot below (the red box marks your API key)." +msgstr "" +"Als er een nieuwe key is gegenereerd, zie je deze direct. De key is te vinden " +"zoals in onderstaande screenshot (er staat een rood kader om de key)." + +#~ msgid "" +#~ "Currently, two mobile platforms are supported: Android and iOS. The " +#~ "supported app for Android is `NotifyMyAndroid `_. The supported app for iOS is `Prowl `_." +#~ msgstr "" +#~ "Op dit moment worden twee platforms ondersteund: Android en iOS. De " +#~ "ondersteunde app voor Android is `NotifyMyAndroid `_. De ondersteunde app voor iOS is `Prowl `_." + +#~ msgid "" +#~ "In the DSMR-reader settings for the Usagenotifications, tick the Send " +#~ "Notifications checkbox and select the notification service you want to use. " +#~ "Then copy the API key from the notification service and paste in into the " +#~ "the textbox for the API key. When you save these settings, your first " +#~ "notification should be sent after midnight. Don't worry, the notification " +#~ "will be sent with low priority and will not wake you up." +#~ msgstr "" +#~ "In de DSMR-reader instellingen voor de Verbruiksnotificaties zet je een " +#~ "vinkje bij Stuur Notificaties en selecteer daaronder welke " +#~ "notificatieservice je wilt gebruiken. Kopieeër daarna de API key van de " +#~ "notificatieservice en plak deze in het tekstveld voor de API key. Als je " +#~ "deze instellingen opslaat zul je na middernacht je eerste notificatie " +#~ "ontvangen. Geen nood, de notificatie wordt altijd verstuurd met lage " +#~ "prioriteit, deze maakt je dus niet wakker." + +#~ msgid "*How do I obtain my API key for NotifyMyAndroid?*" +#~ msgstr "*Hoe haal ik de API key op voor NotifyMyAndroid?*" + +#~ msgid "" +#~ "After you have downloaded NotifyMyAndroid and signed up for an account you " +#~ "should be able to `login to your NotifyMyAndroid account `_. Now go to \"`My Account `_\", you should see an overview of your " +#~ "current API keys if you have any. To create an API key for the DSMR-reader, " +#~ "please click **\"Generate New Key\"**." +#~ msgstr "" +#~ "Nadat je NotifyMyAndroid hebt gedownload en een account hebt aangemaakt zou " +#~ "je moeten kunnen `inloggen op je NotifyMyAndroid-account `_. Ga nu naar \"`My Account `_\" om een overzicht van je account de API " +#~ "keys te krijgen als je deze al hebt. Om een API key voor de DSMR-reader te " +#~ "genereren klik je op **\"Generate New Key\"**." + +#~ msgid "" +#~ "Currently, two mobile platforms are supported: Android and iOS. The " +#~ "supported app for Android is `Pushover `_. The " +#~ "supported apps for iOS are `Pushover `_ and `Prowl " +#~ "`_." +#~ msgstr "" +#~ "Momenteel zijn twee platformen ondersteund: Android en iOS. De app voor " +#~ "Android is `Pushover `_. De apps voor iOS zijn " +#~ "`Pushover `_ en `Prowl `_." + +#~ msgid "" +#~ "After you have downloaded Prowl and signed up for an account you should be " +#~ "able to `login to your Prowl account `_. Now go to \"`API Keys `_" +#~ "\", you should see an overview of your current API keys if you have any. To " +#~ "create an API key for the DSMR-reader, input a name and click **\"Generate " +#~ "Key\"**." +#~ msgstr "" +#~ "Nadat je Prowl hebt gedownload en een account hebt aangemaakt zou je moeten " +#~ "kunnen `inloggen op je Prowl-account `_. Ga nu naar \"`API Keys `_" +#~ "\" om een overzicht van je API keys te krijgen als je deze al hebt. Om een " +#~ "API key voor de DSMR-reader te genereren geef je een naam op en klik je op " +#~ "**\"Generate Key\"**." diff --git a/docs/mqtt.rst b/docs/mqtt.rst index bdc9bb22f..01299712f 100644 --- a/docs/mqtt.rst +++ b/docs/mqtt.rst @@ -1,5 +1,5 @@ -MQTT -==== +Integration: MQTT +================= The application supports sending MQTT messages to your broker. diff --git a/docs/notifications.rst b/docs/notifications.rst index b3058628c..fe813e82a 100644 --- a/docs/notifications.rst +++ b/docs/notifications.rst @@ -8,40 +8,55 @@ Integration: Notifications Usage notification: Daily usage statistics on your smartphone ------------------------------------------------------------- -*Which services for sending notifications are supported?* + +Which services for sending notifications are supported? +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Currently, two mobile platforms are supported: Android and iOS. -The supported app for Android is `NotifyMyAndroid `_. -The supported app for iOS is `Prowl `_. +* The supported app for Android is `Pushover `_. +* The supported apps for iOS are `Pushover `_ and `Prowl `_. -*How do I setup usage notifications?* -Make sure you either have NotifyMyAndroid or Prowl installed on your smartphone. If you don't, visit your platforms app store to download the app and sign up for an account. Then, make sure to get your API key from the notificationservice that you prefer. For instruction on obtaining the API key, please read below. +How do I setup usage notifications? +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -In the DSMR-reader settings for the Usagenotifications, tick the Send Notifications checkbox and select the notification service you want to use. Then copy the API key from the notification service and paste in into the the textbox for the API key. When you save these settings, your first notification should be sent after midnight. Don't worry, the notification will be sent with low priority and will not wake you up. +Make sure you either have Pushover or Prowl installed on your smartphone. +If you don't, visit your platforms app store to download the app and sign up for an account. +Then, make sure to get your API key from the notification service that you prefer. +For instruction on obtaining the API key, please read below. +In the DSMR-reader **Notifications Apps** settings, select the notification service you want to use. +Copy the API key from the notification service and paste in into the the textbox for the API key. +When you save these settings, your first notification should be sent after midnight. +Don't worry about nightly alerts, the notifications will be sent with low priority and should not wake you up. -*How do I obtain my API key for NotifyMyAndroid?* -After you have downloaded NotifyMyAndroid and signed up for an account you should be able to `login to your NotifyMyAndroid account `_. -Now go to "`My Account `_", you should see an overview of your current API keys if you have any. To create an API key for the DSMR-reader, please click **"Generate New Key"**. +How do I obtain my API key for Pushover? +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -.. image:: _static/faq/notifications-notify-my-android-create-key.png - :target: _static/faq/notifications-notify-my-android-create-key.png - :alt: NotifyMyAndroid My Account overview - -When a new key is generated, you will see it immediatly. Your key is listed like in the screenshot below (the red box marks your API key). +After you have downloaded Pushover and signed up for an account you should be able to `login into your Pushover account `_. + +You should see an overview of containing **Your User Key** (top right) and Applications, if you have any. +To create an application in Pushover, for sending notifications to your phone, please click **Create an Application/API Token**. + +Pushover requires you to enter two keys in DSMR-reader. + +* You will need the **User Key** displayed on the top right in the screenshot below. +* And you will need the **API key** for the application you've created in Pushover. + +.. image:: _static/faq/notifications-pushover-get-key.png + :target: _static/faq/notifications-pushover-get-key.png + :alt: Pushover Get Your API Key -.. image:: _static/faq/notifications-notify-my-android-get-key.png - :target: _static/faq/notifications-notify-my-android-get-key.png - :alt: NotifyMyAndroid Get Your API Key +How do I obtain my API key for Prowl? +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -*How do I obtain my API key for Prowl?* +After you have downloaded Prowl and signed up for an account you should be able to `login into your Prowl account `_. -After you have downloaded Prowl and signed up for an account you should be able to `login to your Prowl account `_. -Now go to "`API Keys `_", you should see an overview of your current API keys if you have any. To create an API key for the DSMR-reader, input a name and click **"Generate Key"**. +Now go to "`API Keys `_", you should see an overview of your current API keys if you have any. +To create an API key for the DSMR-reader, input a name and click **"Generate Key"**. .. image:: _static/faq/notifications-prowl-create-key.png :target: _static/faq/notifications-prowl-key.png diff --git a/dsmr_backend/management/commands/development_reset.py b/dsmr_backend/management/commands/development_reset.py index 18f9d4a8b..47ecd2c36 100644 --- a/dsmr_backend/management/commands/development_reset.py +++ b/dsmr_backend/management/commands/development_reset.py @@ -32,7 +32,9 @@ def handle(self, **options): BackupSettings.objects.update(daily_backup=False) DropboxSettings.objects.update(access_token=None) MinderGasSettings.objects.update(export=False, auth_token=None) - NotificationSetting.objects.update(notification_service=None, api_key=None) + NotificationSetting.objects.update( + notification_service=None, pushover_api_key=None, pushover_user_key=None, prowl_api_key=None + ) Notification.objects.update(read=True) try: diff --git a/dsmr_frontend/tests/regression/test_dashboard_reverse_dashboard_graphs.py b/dsmr_frontend/tests/regression/test_dashboard_reverse_dashboard_graphs.py index ceb3c8dc8..68510a22b 100644 --- a/dsmr_frontend/tests/regression/test_dashboard_reverse_dashboard_graphs.py +++ b/dsmr_frontend/tests/regression/test_dashboard_reverse_dashboard_graphs.py @@ -32,4 +32,4 @@ def test_dashboard_reverse_dashboard_graphs(self, now_mock): # This will fail when the fix has been reverted. self.assertIn('gas_x', json_content) - self.assertEqual(json_content['gas_x'][0], '8 p.m.') + self.assertEqual(json_content['gas_x'][0], '20:00') diff --git a/dsmr_notification/admin.py b/dsmr_notification/admin.py index 85a3736d4..a9f527d2a 100644 --- a/dsmr_notification/admin.py +++ b/dsmr_notification/admin.py @@ -9,16 +9,22 @@ class NotificationSettingsAdmin(SingletonModelAdmin): readonly_fields = ('next_notification', ) fieldsets = ( - ( - None, { - 'fields': ['notification_service', 'api_key', 'next_notification'], - 'description': _( - 'Detailed instructions for configuring notifications can be found here: ' - 'FAQ in documentation' - ) - } - ), + (None, { + 'fields': ['notification_service', 'next_notification'], + 'description': _( + 'Detailed instructions for configuring notifications can be found here: ' + 'FAQ in documentation' + ) + }), + ('Pushover', { + 'fields': ['pushover_api_key', 'pushover_user_key'], + 'description': _('Only applies when using Pushover') + }), + ('Prowl', { + 'fields': ['prowl_api_key'], + 'description': _('Only applies when using Prowl') + }), ) diff --git a/dsmr_notification/apps.py b/dsmr_notification/apps.py index ae5d7c898..01c876563 100644 --- a/dsmr_notification/apps.py +++ b/dsmr_notification/apps.py @@ -6,7 +6,7 @@ class AppConfig(AppConfig): name = 'dsmr_notification' - verbose_name = _('Usage notification') + verbose_name = _('Notification apps') def ready(self): dsmr_backend.signals.backend_called.connect( diff --git a/dsmr_notification/migrations/0005_notify_my_android_ended_support.py b/dsmr_notification/migrations/0005_notify_my_android_ended_support.py index 66dddb28b..c7e9bda85 100644 --- a/dsmr_notification/migrations/0005_notify_my_android_ended_support.py +++ b/dsmr_notification/migrations/0005_notify_my_android_ended_support.py @@ -5,6 +5,7 @@ def migrate_forward(apps, schema_editor): + """ Clears API settings if we used NMA. """ NotificationSetting = apps.get_model('dsmr_notification', 'NotificationSetting') _, _ = NotificationSetting.objects.get_or_create() @@ -12,7 +13,7 @@ def migrate_forward(apps, schema_editor): return # Did we use NMA? Disable it. - NotificationSetting.objects.update(notification_service=None, api_key=None) + NotificationSetting.objects.update(notification_service=None, api_key=None, next_notification=None) import dsmr_frontend.services Notification = apps.get_model('dsmr_frontend', 'Notification') @@ -23,6 +24,11 @@ def migrate_forward(apps, schema_editor): ) +def migrate_backward(apps, schema_editor): + """ We can't restore deleted data. """ + pass + + class Migration(migrations.Migration): dependencies = [ @@ -31,7 +37,7 @@ class Migration(migrations.Migration): operations = [ # Backwards migration not possible, field was removed before. - migrations.RunPython(migrate_forward), + migrations.RunPython(migrate_forward, migrate_backward), migrations.AlterField( model_name='notificationsetting', diff --git a/dsmr_notification/migrations/0006_support_for_pushover.py b/dsmr_notification/migrations/0006_support_for_pushover.py new file mode 100644 index 000000000..e38ce3ecb --- /dev/null +++ b/dsmr_notification/migrations/0006_support_for_pushover.py @@ -0,0 +1,74 @@ +# Generated by Django 2.0.5 on 2018-06-03 10:44 + +from django.db import migrations, models + + +def migrate_forward(apps, schema_editor): + NotificationSetting = apps.get_model('dsmr_notification', 'NotificationSetting') + _, _ = NotificationSetting.objects.get_or_create() + + if not NotificationSetting.objects.filter(notification_service='prowl').exists(): + return + + notification_setting = NotificationSetting.objects.filter()[0] + + # Transfer Prowl API key, if any. + NotificationSetting.objects.update(prowl_api_key=notification_setting.api_key) + + +def migrate_backward(apps, schema_editor): + NotificationSetting = apps.get_model('dsmr_notification', 'NotificationSetting') + _, _ = NotificationSetting.objects.get_or_create() + notification_setting = NotificationSetting.objects.filter()[0] + + if not notification_setting.prowl_api_key: + return + + # Transfer Prowl API key, if any. + NotificationSetting.objects.update(api_key=notification_setting.prowl_api_key) + + +class Migration(migrations.Migration): + + dependencies = [ + ('dsmr_notification', '0005_notify_my_android_ended_support'), + ] + + operations = [ + migrations.AddField( + model_name='notificationsetting', + name='prowl_api_key', + field=models.CharField(blank=True, default=None, max_length=64, null=True, verbose_name='API key'), + ), + migrations.AddField( + model_name='notificationsetting', + name='pushover_api_key', + field=models.CharField(blank=True, default=None, help_text='The API key of your Pushover Application', max_length=64, null=True, verbose_name='API key'), + ), + migrations.AddField( + model_name='notificationsetting', + name='pushover_user_key', + field=models.CharField(blank=True, default=None, help_text='Your User Key displayed in your Pushover dashboard', max_length=64, null=True), + ), + migrations.AlterField( + model_name='notificationsetting', + name='notification_service', + field=models.CharField(blank=True, choices=[(None, '--- Disabled ---'), ('pushover', 'Pushover'), ('prowl', 'Prowl')], default=None, help_text='Which notification service to use for sending daily usage notifications', max_length=20, null=True, verbose_name='Notification service'), + ), + + migrations.RunPython(migrate_forward, migrate_backward), + + migrations.RemoveField( + model_name='notificationsetting', + name='api_key', + ), + migrations.AlterModelOptions( + name='notificationsetting', + options={'default_permissions': (), 'verbose_name': 'Notification Apps configuration'}, + ), + migrations.AlterField( + model_name='notificationsetting', + name='next_notification', + field=models.DateTimeField(blank=True, default=None, help_text='Timestamp of the next notification. Managed by application.', null=True, verbose_name='Next notification'), + ), + ] diff --git a/dsmr_notification/models/settings.py b/dsmr_notification/models/settings.py index 81f104093..6b8903b40 100644 --- a/dsmr_notification/models/settings.py +++ b/dsmr_notification/models/settings.py @@ -1,22 +1,22 @@ -from django.db import models from django.utils.translation import ugettext_lazy as _ +from django.db import models from solo.models import SingletonModel class NotificationSetting(SingletonModel): + PUSHOVER_API_URL = 'https://api.pushover.net/1/messages.json' + PROWL_API_URL = 'https://api.prowlapp.com/publicapi/add' + NOTIFICATION_NONE = None NOTIFICATION_PROWL = 'prowl' + NOTIFICATION_PUSHOVER = 'pushover' NOTIFICATION_CHOICES = ( (NOTIFICATION_NONE, _('--- Disabled ---')), + (NOTIFICATION_PUSHOVER, _('Pushover')), (NOTIFICATION_PROWL, _('Prowl')), ) - NOTIFICATION_API_URL = { - NOTIFICATION_NONE: None, - NOTIFICATION_PROWL: 'https://api.prowlapp.com/publicapi/add' - } - notification_service = models.CharField( max_length=20, null=True, @@ -28,18 +28,29 @@ class NotificationSetting(SingletonModel): 'Which notification service to use for sending daily usage notifications' ) ) - api_key = models.CharField( + prowl_api_key = models.CharField( max_length=64, null=True, blank=True, default=None, - verbose_name=_('Notification service API key'), - help_text=_( - 'The API key used send messages to your smartphone. ' - 'Please visit https://notifymyandroid.com/ or https://www.prowlapp.com/ to download and use the apps.' - ) + verbose_name=_('API key'), + ) + pushover_api_key = models.CharField( + max_length=64, + null=True, + blank=True, + default=None, + verbose_name=_('API key'), + help_text=_('The API key of your Pushover Application'), + ) + pushover_user_key = models.CharField( + max_length=64, + null=True, + blank=True, + default=None, + help_text=_('Your User Key displayed in your Pushover dashboard'), ) - next_notification = models.DateField( + next_notification = models.DateTimeField( default=None, null=True, blank=True, @@ -54,7 +65,7 @@ def __str__(self): class Meta: default_permissions = tuple() - verbose_name = _('Notification configuration') + verbose_name = _('Notification Apps configuration') class StatusNotificationSetting(SingletonModel): diff --git a/dsmr_notification/services.py b/dsmr_notification/services.py index d55e77a77..1abe26503 100644 --- a/dsmr_notification/services.py +++ b/dsmr_notification/services.py @@ -1,32 +1,40 @@ -from django.utils import timezone from django.utils.translation import ugettext_lazy as _ +from django.utils import timezone from django.conf import settings import requests from dsmr_notification.models.settings import NotificationSetting, StatusNotificationSetting from dsmr_stats.models.statistics import DayStatistics from dsmr_datalogger.models.reading import DsmrReading +from dsmr_frontend.models.message import Notification import dsmr_consumption.services import dsmr_backend.services -def should_notify(): +def notify_pre_check(): """ Checks whether we should notify """ notification_settings = NotificationSetting.get_solo() - # Only when enabled and token set. - if notification_settings.notification_service is None or not notification_settings.api_key: + if notification_settings.notification_service is None: return False - # Only when it's time. - if notification_settings.next_notification is not None \ - and timezone.localtime(timezone.now()).date() < notification_settings.next_notification: + # Dummy message? + if notification_settings.next_notification is None: + send_notification( + message='DSMR-reader notification test.', + title='DSMR-reader Test Notification' + ) + NotificationSetting.objects.update(next_notification=timezone.now()) + return True + + # Ready to go, but not time yet. + if notification_settings.next_notification is not None and timezone.now() < notification_settings.next_notification: return False return True -def create_consumption_notification_message(day, stats): +def create_consumption_message(day, stats): """ Create the action notification message """ capabilities = dsmr_backend.services.get_capabilities() day_date = (day - timezone.timedelta(hours=1)).strftime("%d-%m-%Y") @@ -48,35 +56,81 @@ def create_consumption_notification_message(day, stats): return message -def send_notification(api_url, api_key, notification_message, title): +def send_notification(message, title): """ Sends notification using the preferred service """ - response = requests.post(api_url, { - 'apikey': api_key, - 'priority': '-2', - 'application': 'DSMR-Reader', - 'event': title, - 'description': notification_message - }) + notification_settings = NotificationSetting.get_solo() - if response.status_code != 200: - raise AssertionError('Notify API call failed: {0} (HTTP{1})'.format(response.text, response.status_code)) + DATA_FORMAT = { + NotificationSetting.NOTIFICATION_PUSHOVER: { + 'url': NotificationSetting.PUSHOVER_API_URL, + 'data': { + 'token': notification_settings.pushover_api_key, + 'user': notification_settings.pushover_user_key, + 'priority': '-1', + 'title': title, + 'message': message + } + }, + NotificationSetting.NOTIFICATION_PROWL: { + 'url': NotificationSetting.PROWL_API_URL, + 'data': { + 'apikey': notification_settings.prowl_api_key, + 'priority': '-2', + 'application': 'DSMR-Reader', + 'event': title, + 'description': message + } + }, + } + + response = requests.post( + **DATA_FORMAT[notification_settings.notification_service] + ) - return True + if response.status_code == 200: + return + # Invalid request, do not retry. + if str(response.status_code).startswith('4'): + print(' - Notification API returned client error, wiping settings...') + NotificationSetting.objects.update( + notification_service=None, + pushover_api_key=None, + pushover_user_key=None, + prowl_api_key=None, + next_notification=None + ) + Notification.objects.create( + message='Notification API error, settings are reset. Error: {}'.format(response.text), + redirect_to='admin:dsmr_notification_notificationsetting_changelist' + ) + + # Server error, delay a bit. + elif str(response.status_code).startswith('5'): + print(' - Notification API returned server error, retrying later...') + NotificationSetting.objects.update( + next_notification=timezone.now() + timezone.timedelta(minutes=5) + ) + + raise AssertionError('Notify API call failed: {0} (HTTP {1})'.format(response.text, response.status_code)) -def set_next_notification(today): + +def set_next_notification(): """ Set the next moment for notifications to be allowed again """ - tomorrow = (today + timezone.timedelta(hours=24)).date() + tomorrow = timezone.now() + timezone.timedelta(hours=24) NotificationSetting.objects.update( - next_notification=tomorrow + next_notification=timezone.make_aware(timezone.datetime( + year=tomorrow.year, + month=tomorrow.month, + day=tomorrow.day, + hour=2, + )) ) def notify(): """ Sends notifications about daily energy usage """ - notification_settings = NotificationSetting.get_solo() - - if not should_notify(): + if not notify_pre_check(): return # Just post the latest reading of the day before. @@ -88,21 +142,19 @@ def notify(): hour=0, )) - notification_api_url = NotificationSetting.NOTIFICATION_API_URL[notification_settings.notification_service] - try: stats = DayStatistics.objects.get( day=(midnight - timezone.timedelta(hours=1)) ) except DayStatistics.DoesNotExist: - return False # Try again in a next run + return # Try again in a next run # For backend logging in Supervisor. print(' - Creating new notification containing daily usage.') - message = create_consumption_notification_message(midnight, stats) - send_notification(notification_api_url, notification_settings.api_key, message, str(_('Daily usage notification'))) - set_next_notification(today) + message = create_consumption_message(midnight, stats) + send_notification(message, str(_('Daily usage notification'))) + set_next_notification() def check_status(): @@ -132,8 +184,6 @@ def check_status(): # Alert! print(' - Sending notification about datalogger lagging behind...') send_notification( - NotificationSetting.NOTIFICATION_API_URL[notification_settings.notification_service], - notification_settings.api_key, str(_('It has been over an hour since the last reading received. Please check your datalogger.')), str(_('Datalogger check')) ) diff --git a/dsmr_notification/tests/test_notifications.py b/dsmr_notification/tests/test_notifications.py index 285bf4d41..a5349fac0 100644 --- a/dsmr_notification/tests/test_notifications.py +++ b/dsmr_notification/tests/test_notifications.py @@ -18,91 +18,158 @@ class TestServices(TestCase): 'dsmr_notification/test_electricity_consumption.json', 'dsmr_notification/test_gas_consumption.json', ] + API_KEY = 'qwertyuiopasdfghjklzxcvbnm' - def test_should_notify_default(self): - """ Notifications: Test should_notify() default behaviour. """ + def setUp(self): + NotificationSetting.get_solo() + def test_notify_pre_check_default(self): + """ Notifications: Test notify_pre_check() default behaviour. """ notification_settings = NotificationSetting.get_solo() self.assertIsNone(notification_settings.notification_service) - self.assertFalse(dsmr_notification.services.should_notify()) + self.assertFalse(dsmr_notification.services.notify_pre_check()) - @mock.patch('dsmr_notification.services.should_notify') - def test_should_notify_skip(self, should_notify_mock): - """ Notifications: Test whether should_notify() skips current day. """ - should_notify_mock.return_value = False + @mock.patch('dsmr_notification.services.notify_pre_check') + def test_notify_pre_check_skip(self, notify_pre_check_mock): + """ Notifications: Test whether notify_pre_check() skips current day. """ + notify_pre_check_mock.return_value = False notification_settings = NotificationSetting.get_solo() self.assertIsNone(notification_settings.notification_service) self.assertFalse(dsmr_notification.services.notify()) - def test_should_notify_set(self): - """ Notifications: Test should_notify()'s output when service is set """ + @mock.patch('dsmr_notification.services.send_notification') + @mock.patch('django.utils.timezone.now') + def test_notify_pre_check_dummy_message(self, now_mock, send_notification_mock): + """ Notifications: Test notify_pre_check()'s output when service is set """ + now_mock.return_value = timezone.make_aware(timezone.datetime(2018, 1, 1, 0, 0, 0)) + + # Should fail because we haven't set a service + self.assertFalse(dsmr_notification.services.notify_pre_check()) notification_settings = NotificationSetting.get_solo() notification_settings.notification_service = NotificationSetting.NOTIFICATION_PROWL notification_settings.save() - # Should fail because we haven't set an API key - self.assertFalse(dsmr_notification.services.should_notify()) + # Should be okay now, with dummy message being sent. + self.assertFalse(send_notification_mock.called) + self.assertIsNone(NotificationSetting.get_solo().next_notification) + self.assertTrue(dsmr_notification.services.notify_pre_check()) # Execution + self.assertTrue(send_notification_mock.called) + self.assertIsNotNone(NotificationSetting.get_solo().next_notification) - notification_settings.api_key = 'es7sh2d-DSMR-Reader-Rulez-iweu732' - notification_settings.save() - self.assertTrue(dsmr_notification.services.should_notify()) + # 'next_notification' is no longer empty, so we should run the normal flow now. + # First we verify the next_notification check. + now_mock.return_value = now_mock.return_value - timezone.timedelta(minutes=1) + self.assertFalse(dsmr_notification.services.notify_pre_check()) - notification_settings.next_notification = None - dsmr_notification.services.set_next_notification(timezone.make_aware(timezone.datetime(2116, 11, 16))) - self.assertFalse(dsmr_notification.services.should_notify()) + # And finally, the flow we were used to. + now_mock.return_value = now_mock.return_value + timezone.timedelta(minutes=5) + self.assertTrue(dsmr_notification.services.notify_pre_check()) @mock.patch('django.utils.timezone.now') def test_set_next_notification_date(self, now_mock): """ Notifications: Test if next notification date is set """ - now_mock.return_value = timezone.make_aware(timezone.datetime(2016, 11, 16)) + now_mock.return_value = timezone.make_aware(timezone.datetime(2016, 11, 16, 0, 0, 0)) + + now = timezone.localtime(timezone.now()) + NotificationSetting.objects.update(next_notification=now) + + dsmr_notification.services.set_next_notification() - now = (timezone.localtime(timezone.now())) - tomorrow = (timezone.localtime(timezone.now()) + timezone.timedelta(hours=24)).date() notification_settings = NotificationSetting.get_solo() - notification_settings.next_notification = now.date() - notification_settings.save() + self.assertEqual( + notification_settings.next_notification, + timezone.make_aware(timezone.datetime(2016, 11, 17, 2, 0, 0)) + ) + + @mock.patch('dsmr_notification.services.send_notification') + def test_no_daystatistics(self, send_notification_mock): + """ Notifications: Test no notification sent because of no stats """ + DayStatistics.objects.all().delete() + + NotificationSetting.objects.update( + notification_service=NotificationSetting.NOTIFICATION_PROWL, + prowl_api_key=self.API_KEY, + next_notification=timezone.now(), + ) - dsmr_notification.services.set_next_notification(now) + self.assertFalse(send_notification_mock.called) + dsmr_notification.services.notify() + self.assertFalse(send_notification_mock.called) + + @mock.patch('requests.post') + @mock.patch('django.utils.timezone.now') + def test_notification_api_fail_4xx(self, now_mock, requests_post_mock): + """ Notifications: Test API failure for notify() - HTTP 4xx """ + now_mock.return_value = timezone.make_aware(timezone.datetime(2016, 11, 17, hour=0, minute=5)) + requests_post_mock.return_value = mock.MagicMock(status_code=403, text='Forbidden') notification_settings = NotificationSetting.get_solo() - self.assertEqual(notification_settings.next_notification, tomorrow) + notification_settings.notification_service = NotificationSetting.NOTIFICATION_PROWL + notification_settings.prowl_api_key = self.API_KEY + notification_settings.next_notification = timezone.now() + notification_settings.save() - def test_no_daystatistics(self): - """ Notifications: Test no notification because of no stats""" + # When having no data, this should NOT raise an exception. + if not self.fixtures: + return dsmr_notification.services.notify() - DayStatistics.objects.all().delete() + with self.assertRaises(AssertionError): + dsmr_notification.services.notify() + + # HTTP 4xx should RESET all settings. + notification_settings = NotificationSetting.get_solo() + self.assertIsNone(notification_settings.notification_service) + self.assertIsNone(notification_settings.pushover_api_key) + self.assertIsNone(notification_settings.pushover_user_key) + self.assertIsNone(notification_settings.prowl_api_key) + self.assertIsNone(notification_settings.next_notification) + + @mock.patch('requests.post') + @mock.patch('django.utils.timezone.now') + def test_notification_api_fail_5xx(self, now_mock, requests_post_mock): + """ Notifications: Test API failure for notify() - HTTP 5xx """ + now_mock.return_value = timezone.make_aware(timezone.datetime(2016, 11, 17, hour=0, minute=5)) + requests_post_mock.return_value = mock.MagicMock(status_code=503, text='Server Error') notification_settings = NotificationSetting.get_solo() notification_settings.notification_service = NotificationSetting.NOTIFICATION_PROWL - notification_settings.api_key = 'es7sh2d-DSMR-Reader-Rulez-iweu732' + notification_settings.prowl_api_key = self.API_KEY + notification_settings.next_notification = timezone.now() notification_settings.save() - self.assertFalse(dsmr_notification.services.notify()) + # When having no data, this should NOT raise an exception. + if not self.fixtures: + return dsmr_notification.services.notify() + + with self.assertRaises(AssertionError): + dsmr_notification.services.notify() + + # HTTP 5xx should delay next call. + notification_settings = NotificationSetting.get_solo() + self.assertIsNotNone(notification_settings.notification_service) + self.assertIsNotNone(notification_settings.prowl_api_key) + self.assertGreater(notification_settings.next_notification, timezone.now()) @mock.patch('requests.post') @mock.patch('django.utils.timezone.now') - def test_notification_api_fail(self, now_mock, requests_post_mock): - """ Notifications: Test API failure for notify() """ + def test_notification_api_fail_other(self, now_mock, requests_post_mock): + """ Notifications: Test API failure for notify() - HTTP xxx """ now_mock.return_value = timezone.make_aware(timezone.datetime(2016, 11, 17, hour=0, minute=5)) - requests_post_mock.return_value = mock.MagicMock(status_code=403, text='Forbidden') + requests_post_mock.return_value = mock.MagicMock(status_code=300, text='xxxxx') # Just for code coverage. notification_settings = NotificationSetting.get_solo() notification_settings.notification_service = NotificationSetting.NOTIFICATION_PROWL - notification_settings.api_key = 'es7sh2d-DSMR-Reader-Rulez-iweu732' - notification_settings.next_notification = timezone.localtime(timezone.now()) + notification_settings.prowl_api_key = self.API_KEY + notification_settings.next_notification = timezone.now() notification_settings.save() - if self.fixtures: - with self.assertRaises(AssertionError): - dsmr_notification.services.notify() - else: - # When having no data, this should NOT raise an exception. + # When having no data, this should NOT raise an exception. + if not self.fixtures: return dsmr_notification.services.notify() - with self.assertRaisesMessage( - AssertionError, 'Notify API call failed: Forbidden (HTTP403)'): + with self.assertRaises(AssertionError): dsmr_notification.services.notify() @mock.patch('requests.post') @@ -117,36 +184,25 @@ def test_notifications(self, now_mock, requests_post_mock): self.assertFalse(requests_post_mock.called) notification_settings.notification_service = NotificationSetting.NOTIFICATION_PROWL - notification_settings.api_key = 'es7sh2d-DSMR-Reader-Rulez-iweu732' - notification_settings.next_notification = timezone.localtime(timezone.now()) + notification_settings.prowl_api_key = self.API_KEY + notification_settings.next_notification = timezone.now() notification_settings.save() dsmr_notification.services.notify() - notification_settings = NotificationSetting.get_solo() - if self.fixtures: self.assertTrue(requests_post_mock.called) else: return self.assertFalse(requests_post_mock.called) - nma_url = NotificationSetting.NOTIFICATION_API_URL[notification_settings.notification_service] + # Make sure the expected message is created. yesterday = (timezone.localtime(timezone.now()) - timezone.timedelta(hours=24)).date() stats = DayStatistics.objects.get(day=yesterday) - api_msg = dsmr_notification.services.create_consumption_notification_message(yesterday, stats) + api_msg = dsmr_notification.services.create_consumption_message(yesterday, stats) self.assertTrue(yesterday.strftime("%d-%m-%Y") in api_msg) - # Dissect call - requests_post_mock.assert_called_once_with(nma_url, { - 'apikey': notification_settings.api_key, - 'priority': '-2', - 'application': 'DSMR-Reader', - 'event': 'Daily usage notification', - 'description': api_msg - }) - - tomorrow = (timezone.localtime(timezone.now()) + timezone.timedelta(hours=24)).date() - self.assertEqual(notification_settings.next_notification, tomorrow) + # Next notification should be pushed. + self.assertGreater(NotificationSetting.get_solo().next_notification, timezone.now()) @mock.patch('requests.post') @mock.patch('django.utils.timezone.now') @@ -158,7 +214,7 @@ def test_check_status(self, now_mock, requests_post_mock): StatusNotificationSetting.get_solo() notification_settings = NotificationSetting.get_solo() notification_settings.notification_service = NotificationSetting.NOTIFICATION_PROWL - notification_settings.api_key = 'test' + notification_settings.prowl_api_key = self.API_KEY notification_settings.save() # Schedule ahead. @@ -201,21 +257,11 @@ def test_check_status(self, now_mock, requests_post_mock): ) StatusNotificationSetting.objects.update(next_check=timezone.now()) - nma_url = NotificationSetting.NOTIFICATION_API_URL[notification_settings.notification_service] self.assertFalse(requests_post_mock.called) dsmr_notification.services.check_status() self.assertTrue(requests_post_mock.called) - # Dissect call - requests_post_mock.assert_called_once_with(nma_url, { - 'apikey': 'test', - 'priority': '-2', - 'application': 'DSMR-Reader', - 'event': 'Datalogger check', - 'description': 'It has been over an hour since the last reading received. Please check your datalogger.' - }) - class TestServicesWithoutGas(TestServices): """ Same tests, but without having any gas data. """ diff --git a/dsmr_notification/tests/test_settings.py b/dsmr_notification/tests/test_settings.py index 3c37d58fd..598c5c2f9 100644 --- a/dsmr_notification/tests/test_settings.py +++ b/dsmr_notification/tests/test_settings.py @@ -19,8 +19,14 @@ def test_to_string(self): def test_notification_service(self): self.assertIsNone(self.instance.notification_service) - def test_api_key(self): - self.assertIsNone(self.instance.api_key) + def test_pushover_api_key(self): + self.assertIsNone(self.instance.pushover_api_key) + + def test_pushover_user_key(self): + self.assertIsNone(self.instance.pushover_user_key) + + def test_prowl_api_key(self): + self.assertIsNone(self.instance.prowl_api_key) def test_next_notification(self): self.assertIsNone(self.instance.next_notification) diff --git a/dsmrreader/__init__.py b/dsmrreader/__init__.py index f91d46fad..ed6dc3ba9 100644 --- a/dsmrreader/__init__.py +++ b/dsmrreader/__init__.py @@ -17,6 +17,6 @@ from django.utils.version import get_version -VERSION = (1, 17, 0, 'final', 0) +VERSION = (1, 18, 0, 'final', 0) __version__ = get_version(VERSION) diff --git a/dsmrreader/formats/en/formats.py b/dsmrreader/formats/en/formats.py index 1d7dc130f..503f5dabf 100644 --- a/dsmrreader/formats/en/formats.py +++ b/dsmrreader/formats/en/formats.py @@ -1,14 +1,14 @@ -DSMR_GRAPH_SHORT_DATETIME_FORMAT = 'D P' -DSMR_GRAPH_SHORT_DATE_FORMAT = 'D N jS' -DSMR_GRAPH_SHORT_TIME_FORMAT = 'P' -DSMR_GRAPH_LONG_TIME_FORMAT = 'D P' +DSMR_GRAPH_SHORT_DATETIME_FORMAT = 'D G:i' +DSMR_GRAPH_SHORT_DATE_FORMAT = 'D j b' +DSMR_GRAPH_SHORT_TIME_FORMAT = 'G:i' +DSMR_GRAPH_LONG_TIME_FORMAT = 'D G:i' DSMR_GRAPH_LONG_DATE_FORMAT = 'l F jS, Y' -DSMR_STRFTIME_DATE_FORMAT = '%m/%d/%Y' -DSMR_DATEPICKER_LOCALE_FORMAT = 'mm/dd/yyyy' -DSMR_DATEPICKER_DATE_FORMAT = 'm/d/Y' +DSMR_STRFTIME_DATE_FORMAT = '%d-%m-%Y' +DSMR_DATEPICKER_LOCALE_FORMAT = 'dd-mm-yyyy' +DSMR_DATEPICKER_DATE_FORMAT = 'd-m-Y' DSMR_DATEPICKER_MONTH = 'F Y' -DSMR_EXPORT_DATETIME_FORMAT = 'Y-m-d H:i:s' +DSMR_EXPORT_DATETIME_FORMAT = 'd-m-Y H:i:s' -DJANGO_DATE_FORMAT = 'Y-m-d' +DJANGO_DATE_FORMAT = 'd-m-Y' diff --git a/dsmrreader/locales/nl/LC_MESSAGES/django.mo b/dsmrreader/locales/nl/LC_MESSAGES/django.mo index 0b4435a49..c5a4393aa 100644 Binary files a/dsmrreader/locales/nl/LC_MESSAGES/django.mo and b/dsmrreader/locales/nl/LC_MESSAGES/django.mo differ diff --git a/dsmrreader/locales/nl/LC_MESSAGES/django.po b/dsmrreader/locales/nl/LC_MESSAGES/django.po index 2d0eaaaf1..431987c49 100644 --- a/dsmrreader/locales/nl/LC_MESSAGES/django.po +++ b/dsmrreader/locales/nl/LC_MESSAGES/django.po @@ -1291,11 +1291,17 @@ msgstr "MQTT: Telegram (per gesplitst topic) configuratie" msgid "Detailed instructions for configuring notifications can be found here: FAQ in documentation" msgstr "Gedetailleerde instructies voor het instellen van notificaties kun je hier terugvinden: FAQ in documentatie" +msgid "Only applies when using Pushover" +msgstr "Alleen van toepassing voor Pushover" + +msgid "Only applies when using Prowl" +msgstr "Alleen van toepassing voor Prowl" + msgid "System checks for sending status notifications when the datalogger is lagging behind." msgstr "Systeemcontroles voor het versturen van notificaties wanneer de datalogger achterloopt." -msgid "Usage notification" -msgstr "Verbruiksnotificatie" +msgid "Notification apps" +msgstr "Notificatie Apps" msgid "Notify My Android has terminated their service, the notification settings in DSMR-reader are disabled." msgstr "Notify My Android heeft hun dienstverlening beëindigd. Hierdoor zijn de notificatie-instellingen in DSMR-reader aangepast." @@ -1303,6 +1309,9 @@ msgstr "Notify My Android heeft hun dienstverlening beëindigd. Hierdoor zijn de msgid "--- Disabled ---" msgstr "--- Uitgeschakeld ---" +msgid "Pushover" +msgstr "Pushover" + msgid "Prowl" msgstr "Prowl" @@ -1312,11 +1321,14 @@ msgstr "Notificatieservice" msgid "Which notification service to use for sending daily usage notifications" msgstr "Welke notificatieservice mag gebruikt worden om de notificaties mee te versturen" -msgid "Notification service API key" -msgstr "API sleutel voor notificatie service" +msgid "API key" +msgstr "API key" + +msgid "The API key of your Pushover Application" +msgstr "De API key van je Pushover Applicatie" -msgid "The API key used send messages to your smartphone. Please visit https://notifymyandroid.com/ or https://www.prowlapp.com/ to download and use the apps." -msgstr "De API sleutel die gebruikt wordt om notificaties naar je smartphone te sturen. Bezoek https://notifymyandroid.com/ of https://www.prowlapp.com/ om de apps te downloaden en te gebruiken." +msgid "Your User Key displayed in your Pushover dashboard" +msgstr "De \"User Key\" zoals terug te vinden in je Pushover dashboard" msgid "Next notification" msgstr "Volgende notificatie" @@ -1324,8 +1336,8 @@ msgstr "Volgende notificatie" msgid "Timestamp of the next notification. Managed by application." msgstr "Tijdstip van de volgende notificatie. Applicatie werkt dit automatisch bij." -msgid "Notification configuration" -msgstr "Notificatieconfiguratie" +msgid "Notification Apps configuration" +msgstr "Notificatie Apps configuratie" msgid "Next check" msgstr "Volgende controle" @@ -1366,9 +1378,6 @@ msgstr "Implementeert de volgende API call: https://pvoutput.org/help.html#api-a msgid "PVOutput" msgstr "PVOutput" -msgid "API key" -msgstr "API key" - msgid "The API key for your PVOutput account. Listed in PVOutput at Settings -> \"API Settings\"." msgstr "De API-key voor je PVOutput-account. Terug te vinden in PVOutput onder Instellingen -> \"API Settings\"." @@ -1636,6 +1645,18 @@ msgstr "Nederlands" msgid "English" msgstr "Engels" +#~ msgid "Tests notification system" +#~ msgstr "Test notificatiesysteem" + +#~ msgid "Usage notification" +#~ msgstr "Verbruiksnotificatie" + +#~ msgid "Notification service API key" +#~ msgstr "API sleutel voor notificatie service" + +#~ msgid "The API key used send messages to your smartphone. Please visit https://notifymyandroid.com/ or https://www.prowlapp.com/ to download and use the apps." +#~ msgstr "De API sleutel die gebruikt wordt om notificaties naar je smartphone te sturen. Bezoek https://notifymyandroid.com/ of https://www.prowlapp.com/ om de apps te downloaden en te gebruiken." + #~ msgid "NotifyMyAndroid" #~ msgstr "NotifyMyAndroid" diff --git a/dsmrreader/provisioning/requirements/base.txt b/dsmrreader/provisioning/requirements/base.txt index 1c88a6fe1..3c997a99d 100644 --- a/dsmrreader/provisioning/requirements/base.txt +++ b/dsmrreader/provisioning/requirements/base.txt @@ -1,16 +1,16 @@ crcmod==1.7 coreapi==2.3.3 -django==2.0.5 +django==2.0.6 django-colorfield==0.1.14 django-debug-toolbar==1.9.1 django-filter==1.1.0 djangorestframework==3.8.2 django-solo==1.1.3 -dropbox==8.8.1 +dropbox==8.9.0 gunicorn==19.8.1 paho-mqtt==1.3.1 pyserial==3.4 -python-dateutil==2.7.2 +python-dateutil==2.7.3 pytz==2018.4 requests==2.18.4 urllib3==1.22 diff --git a/dsmrreader/provisioning/requirements/dev.txt b/dsmrreader/provisioning/requirements/dev.txt index 7359df017..3b3872934 100644 --- a/dsmrreader/provisioning/requirements/dev.txt +++ b/dsmrreader/provisioning/requirements/dev.txt @@ -1,4 +1,4 @@ -sphinx==1.7.4 +sphinx==1.7.5 sphinx-autobuild==0.7.1 sphinx-intl==0.9.11 -sphinx-rtd-theme==0.3.0 +sphinx-rtd-theme==0.3.1 diff --git a/dsmrreader/provisioning/requirements/travis.txt b/dsmrreader/provisioning/requirements/travis.txt index 5d2a9a34a..6cf4d8df9 100644 --- a/dsmrreader/provisioning/requirements/travis.txt +++ b/dsmrreader/provisioning/requirements/travis.txt @@ -1,2 +1,2 @@ # For some reason Travis needs to be forced installing this version, or the build pretend like it doesn't know 'pytest'. -pytest==3.5.1 +pytest==3.6.1