#!/usr/bin/python# -*- coding: utf-8 -*-## Copyright (C) 2015 by Christian Tremblay, P.Eng <christian.tremblay@servisys.com># Licensed under LGPLv3, see file LICENSE in this source tree.#"""Reinitialize.py - creation of ReinitializeDeviceRequest"""frombacpypes3.apduimport(ReinitializeDeviceRequest,ReinitializeDeviceRequestReinitializedStateOfDevice,)# --- 3rd party modules ---frombacpypes3.pduimportAddressfrombacpypes3.appimportApplicationfrombacpypes3.primitivedataimportCharacterStringfrom..io.IOExceptionsimportApplicationNotStartedfrom..utils.notesimportnote_and_logfrom...core.app.asyncAppimportBAC0Application# --- standard Python modules ---
[docs]@note_and_logclassReinitialize:""" Mixin to support Reinitialize from BAC0 to other devices """
[docs]defreinitialize(self,address=None,password=None,state="coldstart"):""" Will send reinitialize request """_this_application:BAC0Application=self.this_application_app:Application=_this_application.appifnotself._started:raiseApplicationNotStarted("BACnet stack not running - use startApp()")ifnotaddress:raiseValueError("Provide address for request")# build a requestrequest=ReinitializeDeviceRequest()request.reinitializedStateOfDevice=getattr(ReinitializeDeviceRequestReinitializedStateOfDevice,state)request.pduDestination=Address(address)request.password=CharacterString(password)self.log(f"{'- request:':>12}{request}",level="debug")_app.request(request)self.log(f"Reinitialize request sent to device : {address}",level="info")