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_redis#348
or to django/channels_redis#366
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
v0.7.1rc1
2 years ago
0.7.1rc1
Update to Django 3
Update docker config and doc to use pyscada repository
0.7.0rc23
Add svg to render ProcessFlowDiagram. Allows to resize to fit the window size
Add OPC-UA protocol
close DB connection in scheduler to allow multiple instance on the same DB to run
Add INT8 and UINT8 variable value class
change the date range picker JS library
Add logrotate config file
Add a slider to change the refresh rate value of data handling
0.7.0rc22
Add choose_login.html to have multiple login ways
Add circular gauge to display control items
Add silent delete option in admin for VariableState and Device to delete a lot of data
Add grafana doc and config file to use Grafana to display data from a PyScada instance
Add dictionaries to store string with a key. Allows to store strings for Variables
0.7.0rc21
Update docker config file
Add optional PID_FILE_NAME to settings to allow multiple instances
Add custom periodic auto caltulated variable
0.7.0rc20
add django channels to send informations between processes
0.7.0rc19
add fk_name in admin for bacnet device with 2 ForeignKey to Device model
0.7.0rc17, 0.7.0rc18
add pre_delete signals to stop the background process before deleting a device
move widget post_save signal to the model to remove the global receiver (not filtering by sender)
move device handlers to core
add stop in DAQ Process restart
move the device and variable protocol specific configuration to core
add protocol name in device str for the variable js admin file
add complex events
0.7.0rc16
fixed re-login after logout (#22)
added LINK_TARGET option to change the default behaviour of links in view overview (#23)
Catching exceptions if DB close while pyscada is running
v0.7.0rc15
4 years ago
0.7.0rc13
updated docs, switching from python 2.7 to python 3
added redirect to https to the nginx sample config
fixed server error for BackgroundProcess View in Admin with python3
fixed HDF5 export for python 3
fixed ProcessFlowDiagram in HMI
added support for multiple SlidingSidePanels on one Side
added date_saved field to the RecordedData Model, renamed the RecordedData model without the field to RecordedDataOld,
migration #48 will copy some data to the new model, the rest can be copied by using the move_data.py script
0.7.0rc14
update to flot 2.1.6
fixed process flow diagram value not displayed
moved x y zoom selection in HMI to each Chart
add option of redirecting to a custom login page
add framer option for modbus communication
add data courser in chart
add XYChart
add new form widget in HMI
add new drop down control element in HMI
fixed WidgetContent not being deleted
moved signal related methods to dedicated signals.py
added pyserial to dependency list
improved hmi <--> db communication to avoid data loss on slow connections