-
Notifications
You must be signed in to change notification settings - Fork 165
/
CHANGELOG.txt
547 lines (496 loc) · 26.4 KB
/
CHANGELOG.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
0.7.0b2
- fixed modbus daemon
- fixed modbus device
- updated Docs
- readded log notifications in HMI
- added loading animation for data prefetch in HMI
- changed id in Log model to timestame + id schema
0.7.0b3
- removed separate handler files for daq
- removed seperate HMIVariable model
- added restart of daq when Variable or Device model are changed
- added support for different byte order of aquired data
- fixed support for U/INT64 and U/INT32 datatypes
- removed chart_set from hmi
- updated docs
- removed unused code
0.7.0b4
- fixed reinit loop in daq daemon
- added restart of daq when Scaling model has changed
- fixed hmi.widget save without a title
- fixed export.handler (wrong start and end date)
- fixed export to file, check of array index, import of numpy
- added backend table (VariableState) for current values in the database
- fixed crash of hmi admin when widget has no title
- added unixtime value in web hmi (experimental)
- fixed custom html panel variable not uptading in hmi
- added restart_daemon field in background task model
- added check of write permissions for pid and log file in DaemonHandler
0.7.0b5
- added color chooser to VariableAdmin
- fixed display bool values in charts
- added servertime to footer of hmi
- new register handling structure in modbus device
0.7.0b6
- updated javascript libs
- jquery --> 1.12.4
- flot --> 0.8.3
- tablesorter --> 2.0.5b
- bootstrap --> 3.3.6
- changed Title in HMI views
- added pollinginterval field in device model
- fixed chart legend template
0.7.0b7
- fixed data export (record starts with 0)
- fixed RecordedData manager
- added APC UPS status info's to systemstat device
0.7.0b8
- added ability to add fake data to RecordedData manager
- fixed add fake data in hmi
- fixed query_first_value in RecordedData manager
0.7.0b9
- updated to Django 1.10
- changed filter in Chart Model Admin
0.7.0b10
- added Visa and Phant Device support
- minor fixes in the Export of Data
0.7.0b11
- fixed Export without mean values
- fixed managementcommand for Data Export
- added lock for Exports to prevent running of more than one export at a time
0.7.0b12
- fixed export
- added datetime fields to Export
- added pytz to the requirements
0.7.0b13
- fixed modbus write task
- fixed Event handling
0.7.0b14
- fixed handling of int16 values in RecordedData Model
- added custom admin interface
- added filter to variable state admin view
- added unit column to variable admin
0.7.0b15
- added 1-Wire support (experimental)
0.7.0b16
- fixed handling of dead tasks in data export
0.7.0b17
- added support for custom daq devices
- updated docs
- some hmi changes
0.7.0b18
- added OWFS support to onewire device
- updated to django 1.11
- added download link for export files to export job
- fixed daemon handler
0.7.0b19, 0.7.0b20, 0.7.0b21
- changed daemon handling to support multitasking
- rearranged admin for Device and Variables
- updated the Docs
0.7.0b22, 0.7.0b23, 0.7.0b24, 0.7.0b25
- added BackgroundProcess restart on model change
- fixed problem with id of ControlItems in HMI
- updated Docker files (not working yet)
- updated SysV-init service examples
- updated systemd service examples
0.7.0b26
- fixed Jofra350 Admin
- fixed OperationalError in scheduler
0.7.0b27, 0.7.0b28, 0.7.0b29, 0.7.0b30, 0.7.0b31
- major update to the javascript part of the HMI Client
- added time selection bar in HMI
0.7.0rc1
- updated Docs
- updated systemd unit file
- improved HMI
0.7.0rc2
- fixed "-" bug in view link_title
- fixed visa daq restart handler
- fixed hmi "AutoUpdateButton" not working
- updated docs, updated readme
- added utils.blow_up function to convert database data from change of value to constant timestep data
0.7.0rc3
- fixed double connect in visa device
- moved loading animation in hmi
- added 100 ms and 500 ms polling interval (experimental)
- added extension compatibility
- fixed onewire and smbus reinit handler
- added protocol id for the new GPIO Extension
0.7.0rc4
- added missing migration file
0.7.0rc5
- changed the method for namespace packages to the pkg_resources-style
- moved the version info to pyscada.core
0.7.0rc6
- corrected typos
- fixes of AppConfig for setup.py develop
- added protocol id for scripting extension
0.7.0rc7
- added admin for VariableProperty
- added capability of reading and writing VariableProperties from the HMI and devices
- altered arguments for device.write_data!
0.7.0rc8
- changed VariableProperty handling in DeviceWriteTask
- changed VariableProperty handling in HMI
0.7.0rc9
- fixed variable and variable_property attributes in hmi.ControlItem
- added traceback to Device.get_device_instance method
- updated Keithley DMM2000 device in visa.devices
0.7.0rc10
- updated docs
- fixed no data download in pyscada.js
- fixed default polling interval in pyscada.device
0.7.0rc11
- changed widget model to support content from plugins
- changed visable to visible in pyscada.hmi.models.Chart, SlidingPanelMenu, Widget
- some changes for python 3 compatibility in pyscada.export
0.7.0rc12
- fixed issue #13, Mismatch between event limit elif cases and the displayed limit types.
- merged pull request #12, changing from source_format to target_format to match preceding setting of '2H' value
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
0.7.0rc15
- fixed zombi process problem
- fixed migrations with python3
- changed datetime_now to now from django timezone
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
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.0rc19
- add fk_name in admin for bacnet device with 2 ForeignKey to Device model
0.7.0rc20
- add django channels to send informations between processes
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.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.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.1rc1
- Update to Django 3
- Update docker config and doc to use pyscada repository
0.7.1rc2
- Move group display permission items to inline and add exclude type for each item
- fix adding a new device and activate device in protocol process list
- fix signals for BP not done nor failed
- add theme files validator
- other fixes
0.7.1rc3
- add bar chart
- add polling intervals
- add view theme
- add -config2 div in html to get all infos of items used in the user interface
- add calculated variable for aggregation
- add install script
- add css class arg to customize widget
- fixes
0.7.1rc4
- Add MBus to protocol list
- add append and remove dictionary functions
- Fix device write task for VP (no variable defined)
- HTML: add span for legendLabel text
- JS: load visible chart variable first
- fixes
0.7.1rc5
- add hide/show JS for fields in admin
- add get_prev_value overwritten by child class for systemstat non logging variable
- last_value use get_prev_value
- add systemstat timestamps
- add file protocol
- fix DeviceWriteTask for variable to change in complex events
- add value using get_prev_value in views.py for non logging variables
- Move handler to Device model.
- Wait 5 seconds to read the main pid (scheduler)
0.8.0
- 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
0.8.1
- remove docker files created during the installation process
- docker install
- hide db password input
- remove need of django installed in the host system
- check if zip is installed
- system install
- hide db password input
- add input informations
- Update conf.py :
- removed sphinx.ext.autodoc : removed sphinx.ext.autodoc and therefore the dependency of import django this will fix the rtfd build
- added author : added Camille Lavayssiere as an author
- removed sphinx_js : this will fix the rtfd build
- fix license classifier for pypi
- fix install log
- JS : hide loading state : if the value of the loading state is >= 100 we hide the loading state.
- HMI: set navbar as fixed : remove relative position for the top navbar, add body padding for the pages content
- add css class to widget content models
- cascade control item deletion on process flow diagram item
- migration for css class length
- allow to delete the process flow diagram background image
- fix process flow diagram item str : if related control item label is empty, return the process flow diagram id
- remove process flow diagram image padding top
- add template variable to replace the site name : default to PyScada
- Variable admin site rendering : add hideshow JS to Variable, load protocol variable fk_name, FormSet, fieldsets in the inlines
- widget offset : now the column parameter for a widget will be respected, if a widget is in column 1 (from 0 to 3) and there is no other widget on the same page and row the widget will be offsetted this allow respecting the widget positioning with different windows size in comparaison of adding an widget with an empty html content
- doc use main branch for install
- pyscada installation in venv
- add developer and plugin installation documentation
- added pyscada-ems to the list of device protocols
- changed plugins url handling : the url settings of pyscada plugins will be added to the global urls, config automaticly
- Fix device read task str without variable or variable property
- add email timeout for error log to admins
- add traceback to error logs
- dictionary append item function : allow to update the label or the value if exist, else create
- add hidden variable-config for process flow diagram items
- add h5py import error log
- JS : timestamp conversion : if string value is a float, convert to float
- allow to use dictionary for timestamp variable : if a value is in the dictionary it will not be converted to a datetime string
- remove log for calculated variable
- add info to recorded data log if it already exist
- fix getting objects for html : fix exclude list for many2many objects
- add class to change process flow diagram items color
- set bool false control input display value color to grey
- add 403 error template displaying the exception message
- display message error on view list : on view not found (permission) and multiple views (duplicate link_title views)
- add core urls exception : log only if pyscada plugin has an urls.py file
- add mysqlclient dependency
- fix python venv install : add venv path to PATH
- add scipy to requirement for the waveform generic handler
- missing python3-venv requirement for venv install
- install-venv : missing PATH for django startproject
- replace setuptools find_packages by find_namespace_packages
- fix doc for ems protocol
- add exclude field list for gen_hiddenConfigHtml
- fix install in venv (partially broken by black formatting commit) :
- add python3-venv dependency
- add write right for settings template file to add install context
- run django code using pyscada user and venv
- add scipy for generic waveform handler
- fixed page alignment problem in views : when the user clicked on the page link in a view a second time the page has been moved so that the top of the page is below the navbar, this was not intended, the page should be hirisontaly aligned at the bottom of the navbar.
- JS : add event to anounce control item color change :
- event is linked to the control item config2 element
- event name is : "changePyScadaControlItemColor_" + control_item_id
- event.detail is the color formatted as #45bc65
- fix page anchor position to include navbar padding and border
- group display permisson :
- Fix for chart, custom html panel, pie, process flow diagram.
- Make the list of objects permissions more generic to allow any WidgetContentModel to be added.
- update tablesorter :
- to version 2.31.3 : https://github.com/Mottie/tablesorter
- fix sorting non working for unit
- remove unused logos
- create option column
- add LOGOUT_REDIRECT_URL : redirect to site home rather than django admin logout page after logout
- pip3 install user : use pyscada user to run install with pip
- calendar first day : set first calendar day to monday
- fix setting text for boolean value : check if the span field with class .boolean-value exist before writting the value for svg process flow diagram item the method is different so the span does not exist, todo : replace value by string for process diagram items
- aggregation type : check if '#aggregation-type-all-select-' + widget_id exist before adding new option
- Fix day name order and let first day to monday:
- The daysOfWeek order for DateTimePicker should start on sunday, if not the days are not well labeled. Then the firstDay select the first day to start weeks in the calendar
- The first day is set to monday untill we find how to get the browser locale and use the first week day for that country
- fix measurement_data_dumps location : set measurement_data_dumps directory in pyscada home during the venv installation use that folder in default settings.py
- replace save method by get_or_create for dictionary items : don't create it if it already exist
- add JS variable to for on before reload : if ONBEFORERELOAD_ASK is true, ask the user before reload o leaving the page, else don't ask
- fix query first value when no data found in time range : query_first_value in RecordedDataValueManager.db_data find last element from time=now when no data was found for a variable in the time range specified if data was found, time=time of first value
- fix the 1st diagram tooltip (was hidden by overflow)
- dispatch changePyScadaControlItemColor event on window : simplify the event catching
- load hidden config2 after view html load : to load the view quickly load the hidden config2 after the loading the view html code
- JS: load config2 before the pyscada hmi init then send event : Load config2, Init the pyscada hmi, send PyScadaCoreJSLoaded for plugins
- add loading page with svg icon : can be replaced by the loading_page block, default icon color (000, black) can be change with svg_loading_color, for example: svg_loading_color="00f"
- kill setTimeout and xhr request on page unload : store all timeouts in the PYSCADA_TIMEOUTS dictionary, store the current xhr blocking request in PYSCADA_XHR variable
- JS: add PyScada HMI at the beginning of each console.log
- add an event for a variable when data change to allow plugin do a custom action
0.8.2
- prevent loading and showing data after DATA_TO_TIMESTAMP: the bug was that the timestamp_to for the data handler ajax query could be higher than DATA_TO_TIMESTAMP and then change the datepicker end value after the ajax request finish
- fix generic device init import
- last_element_min_time: set to 0 if no min time set
- add transform data and template for control item display value: allow to control the data (transform data function) and graphical representation (template) of a control item set to display value
- add sliceDATAusingTimestamps JS function to get DATA for a variable key using the daterangepicker and the timeline slinder
- add "Template not found" template
- fix difference percent period calculation
- add readthedocs config file: from : https://docs.readthedocs.io/en/stable/config-file/
- update docs
- add operations and aggregation protocols
- migration: update Chart WidgetContent if exist
- plugin can add apps to INSTALLED_APPS in settings: a plugin can specify additional apps to add to INSTALLED_APPS
- in the __init__.py file of the plugin (in pyscada/pluginName) add a list named : additional_installed_app = ["pyscada.otherAppX", "pyscada.otherAppY"]
- exemple in the pyscada-operations plugin.
- get_objects_for_html check if field.name is attr of obj
- add DataSourceModel, Datasource and DjangoDatabase
- DataSourceModel :
- Used to define a data source type.
- The data source base model have a foreign key to this model to specify the configuration :
- the name,
- can add, modify on select in the admin panel,
- the model name of the inline having the specific config (fields, functions, manager).
- DataSource :
- The base model for all the data sources.
- A data source needs to inherit from this class, and should have the basic functions :
- last_value,
- read_multiple,
- write_multiple,
- get_first_element_timestamp,
- get_last_element_timestamp.
- DjangoDatabase :
- Specify a table to store the values. The table model should have a manager similar to the RecordedDataManager (functions).
- The default data source added is the RecordedData table.
- To add new data source, look at the example in pyscada-operations.
- add VariableManager, rename and update RecordedDataManager
- To switch to the data source architecture, use the VariableManager function in order to :
- filter Variable list by datasource (_get_variables_by_datasource)
- read values from datasources (read_multiple)
- write values to datasources (write_multiple)
- get first timestamp recorded for a variable list (get_first_element_timestamp)
- get last one (get_last_element_timestamp)
- Plugins and handlers should not use directly the RecordedDataManager but the VariableManager in order to talk to differents data sources.
- Look at the new way to save read data from GenericDevice and GenericDeviceHandler in pyscada/device.py and in the pyscada.operations plugin.
- Delete CalculatedVariable (moved to the pyscada.operations plugin) in order to not loose your calculated variables you should install pyscada.operations plugin before running the pyscada migration 108.
- log ProgrammingError and OperationalError while populating models
0.8.3
- add view timedelta option to change de default time delta
- add control item offset option: to choose how to display or not data before the time range
- generic function to populate inlines for device, variable, variablestate
- RecordedData: store uint64 as int64 shifted - unknown class as float: uint64 are shifted by -9223372036854775808 = 2**63 to be stored as a django BigIntegerField
- handler: add erase cache option in read data all: in order to call various times read data all in a handler, allow to not erase the cached results
- upgrade flot to 4.2.6
- limit legend max height to the chart height
- fixes and other small updates