- core : fix when no handler selected to use the GenericHandlerDevice of the selected protocol
- systemstat : Create systemstat device (allow remote over ssh)
- core : Fix timestamp not integer in RecordedData init
- systemstat : process pid find in cmdline and not only in processus name
- systemstat : fix pre_delete signal and information choice name
- core : fix config2 and add classes
- systemstat : add write_data to execute command
- JS : fixes
- core : fix protocol list for devices
- hmi : fix color for control items
- core : add related models to Config2
- JS : dateTimePicker Event : send pyscadaDateTimeChange event for all objects with the class pyscadaDateTimeChange when the datetime picker value change.
- various : replace ugettext_lazy by gettext_lazy
- core : replacing pyscada.core in INSTALLED_APPS by pyscada
- hmi : replace django.conf.urls.url by django.urls.path
- all : Moving to AGPL3 License
- core : Moving to django 4.2
- docs : fixed urls in the docs
- added a testscript for the instalation routine
- core : display value option refactoring. Control items display value option code refactoring. Allows more than 3 color.
- fix django requirements. It should be a coma separated list.
- moved to new namespace packet format (PEP420) : this was nessesary to make the use of venv possible
- Fix django 4.0 login : change the default value for LOGIN_REDIRECT_URL in settings.py
- Fix django 4.0 CSRF_TRUSTED_ORIGINS : change the nginx config to forward the protocol used (http or https) because : Changed in Django 4.0: The values in older versions must only include the hostname (possibly with a leading dot) and not the scheme or an asterisk.
- Fix when a plugin is uninstalled but the WidgetContent defined in this plugin remain and is selected in an active widget. Add an information log.
- modbus : fix migration test
- update install shell : system and docker options
- modbus : fix test : remove pyvisa from settings template
- HMI GroupDisplayPermission no groups :
- add GroupDisplayPermission for users without any group (blank=True).
- auto create in the hmi/0072 migration.
- this GroupDisplayPermission cannot be deleted in the admin interface.
- this group allow everything by default (exclude is empty for each OneToOne related model).
- add ValidationError for duplicate GroupDisplayPermission.
- auto collapse only empty inlines in GroupDisplayPermission admin.
- update get_group_display_permission_list in utils.
- use get_group_display_permission_list in read and write task.
- CompexEvent with multiple output variables and refactoring
- Change names :
- * ComplexEventGroup > ComplexEvent
- * ComplexEvent > ComplexEventLevel
- * ComplexEventItem > ComplexEventInput
- add ComplexEventOutput to set multiple output variable values when a ComplexEventLevel is active or when no level in active for a ComplexEvent.
- Remove unused import
- add informations to pyscada.mail
- init_db for event and mail add pyscada.core to installed app in init_db
- use concurrent_log_handler to rotate logs
- remove django_cas_ng config from settings
- send mails to admins and managers
- force channel layer to be empty
- since the version 4 of channel redis version, the channel layer is not
- empty after the first read
- we read it again to empty it
- maybe it is related to
- django/channels_redis348
- or to django/channels_redis366
- Create background process for generic device
- use id 16 for the generic process worker as 1 is taken by the scheduler
- but id 1 is taken for generic protocol id
- by defaut the generic device don't do nothing
- use the dummy handler to save
- Allow millisecond timestamp for recorded data
- Replace time() by time_ns / 1000000000 in
- GenericDevice (write)
- GenericHandlerDevice (time)
- RecordedData (init)
- Do not force timestamp in recorded data init to be integer beforce id calculation.
- add handler for dummy waveforms
- Create waveforms for a generic device.
- Type can be sinus, square and triangle.
- Properties are set using variable properties: type, amplitude, start_timestamp, frequency and duty cycle.
- Variable Property type should be a string.
- default is:
- "type": "sinus", sinus, square, triangle
- "amplitude": 1.0, peak to peak value
- "start_timestamp": 0.0, in second from 01/01/1970 00:00:00
- "frequency": 0.1, Hz
- "duty_cycle": 0.5, between 0 and 1, duty cycle for square and for
- triangle : Width of the rising ramp as a proportion of the total cycle.
- Default is 1, producing a rising ramp, while 0 produces a falling ramp.
- width = 0.5 produces a triangle wave. If an array, causes wave shape to
- change over time, and must be the same length as t.
- log for device write task : log when DWT for a variable not writeable
- fix boolean with display option
- use button.html for boolean with display options and for non boolean with color only display option
- add span for display button : use this span to display the value next to the control item label
- fix variable property control item
- fix dictionary, color for VP
- merge number and boolean in update data values to simplify the code
- remove unused boolean classes
- add offset property to generic waveform handler
- send mail fail not silently : show the error message in a warning log
- refactor logs
- remove some error logs
- replace error logs by warning logs
- use f-strings in error logs
- add exc_info=True to log traceback and send it to ADMINS (see settings.py)
- log as error when a process failed 3 times (to send a mail to ADMINS) then log as warning
- set AdminEmailHandler settings
- update gitignore for docker
- fix export when a filename is given