Any Alternatives of Nokia NetACT?

Hello guys,

Currently I am using NOKIA BBU and NOKIA NETACT.
If any alarm is received in NOKIA BBU, then, it will reach to NOKIA NETACT server and the email alert is sent.

In the future I don’t want to use NOKIA NETACT . I want all the alarm received in NOKIA BBU to be pushed in SQL or EXCEL database and from there I would like to send and email alert.

Does any one know
1.Which protocol does NOKIA BBU takes to push the alerts to the NETACT server?
2.Is there any tools which receives the alarms directly from NOKIA BBU and send a email alert?
3.Is there any other methods to push the BBU alarms directly to Excel or SQL database server?

Note: I tried boda-lite but it seems like it is not working anymore and the username and password donot match. Can any one help me?

Hi, @P_C, I believe you can’t connect without NETACT. Protocol should be proprietary. Instead of that external systems can subscribe to NETACT CORBA notifications. Here is “proof-of-concept” java code for that:

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.omg.CORBA.IntHolder;
import org.omg.CORBA.ORB;
import org.omg.CORBA.ORBPackage.InvalidName;
import org.omg.CosNotification.EventType;
import org.omg.CosNotification.Property;
import org.omg.CosNotification.StructuredEvent;
import org.omg.PortableServer.POA;
import org.omg.PortableServer.POAHelper;
import org.omg.PortableServer.POAManagerPackage.AdapterInactive;
import org.omg.PortableServer.POAPackage.ServantNotActive;
import org.omg.PortableServer.POAPackage.WrongPolicy;
import org.omg.TimeBase.UtcT;
import org.omg.TimeBase.UtcTHelper;

import com.nsn.oss.nbi.internal.corba.ManagedGenericIRPConstDefs.StringTypeOpt;
import com.nsn.oss.nbi.internal.corba.ManagedGenericIRPConstDefs.StringTypeOptHolder;
import com.nsn.oss.nbi.internal.corba.ManagedGenericIRPSystem.InvalidParameter;
import com.nsn.oss.nbi.internal.corba.ManagedGenericIRPSystem.OperationNotSupported;
import com.nsn.oss.nbi.internal.corba.ManagedGenericIRPSystem.ParameterNotSupported;
import com.nsn.oss.nbi.internal.corba.NotificationIRPConstDefs.NotificationTypesSetHolder;
import com.nsn.oss.nbi.internal.corba.NotificationIRPSystem.GetNotificationCategories;

public class AlarmClient {
	private com.nsn.oss.nbi.internal.corba.NotificationIRPSystem.NotificationIRP _notifIrp = null;
	public String alarmFilter ="";
	private final long UNIX_OFFSET = 122192928000000000L;
	public String delimiter = ";";
	private org.omg.CORBA.ORB _notificationOrb = null;
	private String _notifyServer = null;
	private org.omg.CORBA.Object _notifySrvr = null;
	private String _attId = "";
	private IRPManager _irpMan = null;
	public int timetick = 15;

	public static void main(String[] args) {
		AlarmClient ac = new AlarmClient();
		try {
		} catch (InterruptedException e) {

	private String readIOR(String iorType) {
        File f = new File("/d/oss/global/var/NSN-nbi3gc/ior/NotificationIRP.ior");
        BufferedReader br;
        String iorContents = null;
		try {
			br = new BufferedReader(new FileReader(f));
	        iorContents = br.readLine();
		} catch (IOException e) {
        return iorContents;
	private void alarmPrint(StructuredEvent alarm){
		String result = "";
		UtcT timeValue = null;
		Date dt;
		DateFormat df;
		if (alarm.filterable_data != null) {
			for (Property filterableData: alarm.filterable_data) {
				String fieldName =;
				switch (fieldName){
				case "b":
					timeValue = UtcTHelper.extract(filterableData.value);
					dt = new Date((timeValue.time - UNIX_OFFSET) / 10000);
					df = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
					result = result + df.format(dt) + delimiter;
				case "e":
					result = result + filterableData.value.extract_string() + delimiter;
				case "i":
					result = result + filterableData.value.extract_string() + delimiter;

	public void startNotifications(){
		_irpMan = new IRPManager();
		_notificationOrb = ORB.init(new String[0], null);
		org.omg.CORBA.ORB orb = ORB.init(new String[0], null);
		org.omg.CORBA.Object rootObj = orb.string_to_object(readIOR("NotificationIRP"));
		_notifIrp = com.nsn.oss.nbi.internal.corba.NotificationIRPSystem.NotificationIRPHelper.narrow(rootObj);
		POA poa;
		try {
			poa = POAHelper.narrow(_notificationOrb.resolve_initial_references("RootPOA"));
		_notifySrvr = poa.servant_to_reference(_irpMan);
		_notifyServer = _notificationOrb.object_to_string(_notifySrvr);
		String[] aCat = _notifIrp.get_notification_categories(new NotificationTypesSetHolder());
		StringTypeOpt alarmFltr = new StringTypeOpt();
		_attId = _notifIrp.attach_push(_notifyServer, timetick, aCat, alarmFltr, "");
		(new notificationThread()).start();
		} catch (InvalidName | AdapterInactive | ParameterNotSupported | 
				com.nsn.oss.nbi.internal.corba.NotificationIRPSystem.AtLeastOneNotificationCategoryNotSupported | 
				InvalidParameter | com.nsn.oss.nbi.internal.corba.NotificationIRPSystem.Attach | 
				com.nsn.oss.nbi.internal.corba.NotificationIRPSystem.AlreadySubscribed | ServantNotActive |
				WrongPolicy | GetNotificationCategories | OperationNotSupported e) {
	public void stopNotifications() {
		try {
			_notifIrp.detach(_notifyServer, _attId);
		} catch (com.nsn.oss.nbi.internal.corba.NotificationIRPSystem.DetachException | ParameterNotSupported
				| InvalidParameter e) {
	public int renewSubscription() {
		com.nsn.oss.nbi.internal.corba.NotificationIRPConstDefs.SubscriptionStateHolder arg2 = new com.nsn.oss.nbi.internal.corba.NotificationIRPConstDefs.SubscriptionStateHolder();
		IntHolder arg3 = new IntHolder();
		StringTypeOptHolder arg1 = new StringTypeOptHolder();
		try {
			_notifIrp.get_subscription_status(_attId, arg1, arg2, arg3);
		} catch (InvalidParameter | com.nsn.oss.nbi.internal.corba.ManagedGenericIRPSystem.OperationNotSupported
				| com.nsn.oss.nbi.internal.corba.NotificationIRPSystem.GetSubscriptionStatus e) {
		return arg2.value.value();
	private class IRPManager extends org.omg.CosNotifyComm.SequencePushConsumerPOA{
		public void push_structured_events(StructuredEvent[] notifications) throws org.omg.CosEventComm.Disconnected {
			for (StructuredEvent alarm: notifications) {

		public void offer_change(EventType[] arg0, EventType[] arg1) throws org.omg.CosNotifyComm.InvalidEventType {
			System.out.println("Offer Change!");

		public void disconnect_sequence_push_consumer() {

	private class notificationThread extends Thread {
		public void run() {;


Thankyou for you response but i am planning to remove NETACT server.

For example, If I remove NETACT server, I had to look over all the 14 NOKIA BBU in different tabs in the browser and a person has to be assigned.

Thus, If there is any tool/program which will push/pull the data to my local database like the way it pulls/push data from BBU to NOKIA NETACT server. Then I will create a create a code which will send a email when ever the data is received in the server. So that I am aware whenever the alarm comes.

Do you know the protocol used to sync the data from BBU to NOKIA NETACT Server?

Then, it would be possible to create a server like NETACT with a simple feature which will send email whenever the alert is detected.

Looking on the Wireshark capture It looks like the data is communicated using TLS1.2 but don’t know if it is or not. For example If its communicated using TLS 1.2 then how do we pull the data to the local server.

Can you please explain what does the above java code do and how it works? Does is pulls data from Nokia BBU directly?

Also I can see a lot of API in the above documentation. Also in the below link i can also see the API for fault management alarms

Using these API is it possible to push the alarm to local database like sql etc… But i don’t know how to use it using postman and which protocol is used to sync alarm data to my local database

The wire share data was similar to the above link

The code above is to print to console notifications (alarms) immediately then it recieved in NETACT. It is works only with NETACT.

I had to look over all the 14 NOKIA BBU in different tabs in the browser and a person has to be assigned.

In the browser you can open DevTools (F12 or Ctrl+Shift+I), network tab. Now you can watch how it recieves alarms. Does it sends periodical requests or use websockets or anything else. Then implement that algorithm in any programming language you want. This should be described in documentation (I have no access).

It sends periodical requests

Hi, @P_C, check the preview. Is it contains alarms? I suspect it is just a heartbeat to keep session. And alarms are somewhere else.

Also check WS for any activity there.

@P_C , yes, so you need to find login request and get alarms request, then use it in postman or script.

Where can i find the login request and get alarms can you please say me where to get this

In the network tab. Open devtools first, then login to BS and refresh alarms. Check requests.

i enabled the dev tools and exactly what you said but the result is similar as above

admin-help (2).pdf (7.1 MB)

This is the direct downloaded documentation from the device

Looking on to the wire shark and connecting the BBU directly to my laptop it seems like its using TCP TLS1.2 protocol. Is there any medium that can push the data to SQL server or EXCEL.

@P_C 11.1.4 Launching and authenticating WebEM from a third- party application this is what you looking for.

Actually I am looking for the code or the application which will directly receive the data from the BBU and send email when when any alarm

If the above condition is match then its ok if not satisfied then I would like the alarms to be saved to SQL server directly