This page has been translated from Italian

rb750up The routerboard Mikrotik RB750UP is a router / switch 5-door with some very nice features. In addition to having within the RouterOS, with all its amazing features , also possesses a peculiarity additional.

In addition to being plug-in via POE (eye, passive and therefore not 802.3af) with power that is on the LAN cable, has doors that are from 2 to 5-port POE injector that is, in turn, can feed 4 POE devices up to a maximum absorption for port 1 A.

This, added to the ability to monitor the load current draw and voltage on each port, plus the ability to create automation scripts, makes it ideal for environments where 220V is not always available, such example, on public lighting systems.

A RB750UP combined with a buffer system of batteries allows, to the need, to turn off any unnecessary equipment in order to increase the duration of uptime of the system if the 220V is not available for a long time.

The purpose of the development that has been done at home Micso by myself was to define a threshold voltage of the batteries and a Vbatalert Vbatoff and start off the devices powered by the RB750UP if the tension had been between these two values, leaving only RB750UP on for voltage values ​​lower than Vbatoff.

Let's see how it was designed and developed this solution by analyzing in detail the two scripts created for the occasion to snatch the operating logic.

The first script called PoeControl, turn off and turn on the ethernet ports dell'RB750Up on command. It receives

  • PoePort a parameter that indicates the number of the switch port on which you want to change the status of POE, and if this value is 0 (zero), it acts on all ports,
  • PoeMode a parameter that can be "auto-on" to turn on the device connected to this port or "off" to turn it off
  • PoeDelay a parameter to delay operations on the doors if PoePort is equal to 0.
:global PoePort
:global PoeMode
:global PoeDelay
:local ptr
:local from
:local to
:local step

Il parametro PoeDelay è utile, ad esempio, in fase di accensione delle porte in modo che gli apparati non vengono accesi tutti contemporaneamente ma con un ritardo di, ad esempio, 10 secondi l'uno dall'altro al fine di non avere picchi di corrente richiesti sulla batteria tampone.

Continuando l'analisi dello script vediamo che si verifica il valore di PoePort. Se esso è zero allora dobbiamo lavorare su tutte le porte. Se le dobbiamo accendere, le accenderemo dalle seconda alla quinta, se le dobbiamo spegnere, agiamo al contrario spegnendole dalla quinta alla seconda. Altrimenti, se PoePort è un valore ben definito, impostiamo from e to al numero della singola porta su cui agire.

 

:if ($PoePort=0) do={
:if ($PoePort=0) do={
  :if ($PoeMode="auto-on") do={
    :set from 2
    :set to 5
    :set step 1
  } else={
    :set from 5
    :set to 2
    :set step -1
  }
} else={
    :set from $PoePort
    :set to $PoePort
    :set step 1
}

A questo punto si cicla su tutte le porte dalla più bassa alla più alta o viceversa o sulla singola porta a seconda della logica sopra definita, e se lo stato della porta è differente da quello richiesto

:for ptr from=$from to=$to step=$step do={
    :if ([/interface ethernet poe get "ether$ptr" poe-out] != $PoeMode) do={

se le dobbiamo accendere

        :if ($PoeMode="auto-on") do={

prima, per un bug del sistema di rilevamento della portante sulla porta, per un paio di secondi, invece di metterla in auto, la forziamo come porta accesa

        /interface ethernet poe set "ether$ptr" poe-out=forced-on
  	    :delay 2s
	  }

poi o che sia auto-on o che sia off, operiamo il cambiamento sullo stato della porta, ne informiamo il log e, prima eventualmente di passare alla porta succesiva, aspettiamo qualche secondo definito dal parametro PoeDelay

	  /interface ethernet poe set "ether$ptr" poe-out=$PoeMode
      :log info "PoE on port ether$ptr switched $PoeMode"
      :if ($PoePort=0) do {
        :delay ($PoeDelay."s")
      }
    }
  }

A questo punto possiamo testare lo script da console, spegnendo tutte le porte

[admin@POE Test] > :global PoeMode "off"
[admin@POE Test] > :global PoeDelay 10
[admin@POE Test] > :global PoePort 0
[admin@POE Test] > :execute PoeControl

accendendone una

[admin@POE Test] > :global PoeMode "auto-on"
[admin@POE Test] > :global PoePort 2
[admin@POE Test] > :execute PoeControl

accendendole tutte

[admin@POE Test] > :global PoeMode "auto-on"
[admin@POE Test] > :global PoeDelay 10
[admin@POE Test] > :global PoePort 0
[admin@POE Test] > :execute PoeControl

Siamo a questo punto pronti per scrivere lo script che controllerà la tensione di rete e accenderà e spegnerà le porte all'occorrenza.

Come prima cosa la definizione delle variabili globali da usare con PoeControl e di quelle in uso in questo script, in particolare (in milliVolt)

  • la tensione massima Vbathigh che supponiamo sia quella presente quando l'impianto è alimentato a 220V e la batteria è carica,
  • la tensione da cui iniziamo a spegnere le cose (Vbatalert)
  • la tensione sotto la quale spegnamo tutti gli apparati a valle (Vbatoff).
:global PoePort
:global PoeMode
:global PoeDelay
:global Vbathight 247
:global Vbatalert 220
:global Vbatoff 200
:global Vprevious

recuperiamo inoltre la tensione di rete (Vsystem), il nome dell'apparato (SystemName), per i messaggi di log, e ci calcoliamo gli step su cui, per ogni Vrange di diminuzione di corrente, spegnamo una porta

:global Vsystem [/system health get voltage]
:local SystemName [/system identity get name]
:local Vrange (($Vbatalert-$Vbatoff)/4)
:local ptr

Inizializziamo Vprevious se non precedenemente valorizzata

:if ($Vprevious="") do={:set Vprevious $Vsystem}

e iniziamo a controllare la tensione. Se questa sta risalendo ed è addirittura vicina a quella massima prevista vuol dire che c'è corrente, che la batteria si sta ricaricando

:if (($Vsystem > $Vprevious) && (($Vbathight-$Vsystem) < 5)) do={

e allora mandiamo dei messaggi di log

  :local emessage ("Alert " .$SystemName. " voltage is " . [:pick $Vsystem 0 2] . "." . [:pick $Vsystem 2 3]."V")
  :log info $emessage
  :local emessage ("Voltage increased by " . ($Vsystem-$Vprevious) . "mV. Powering on all ports...")
  :log info $emessage

e accendiamo tutto, ricordando che se le porte sono già accese la chiamata allo script PoeControl non produrrà nessun effetto.

  :set PoePort 0
  :set PoeMode "auto-on"
  :set PoeDelay 10
  :execute PoeControl
  :set Vprevious $Vsystem

se invece la tesione sta scendendo

} else={
  :if ($Vsystem < $Vprevious) do={

oltre a i soliti messaggi di errore

    :local emessage ("Alert " .$SystemName. " voltage is " . [:pick $Vsystem 0 2] . "." . [:pick $Vsystem 2 3]."V")
    :log info $emessage
    :local emessage ("Voltage decreaded by " . ($Vprevious-$Vsystem) . "mV.")
    :log info $emessage

controlliamo in che range si trova la differenza tra la tensione attuale e quella di alert e sulla base del risultato

    :local portDown (6-(($Vbatalert-$Vsystem)/$Vrange))
    :if ($portDown<6) do={
      :if ($portDown<2) do={:set portDown 2}

spegnamo fino alla porta relativa

      :for ptr from=5 to=$portDown step=-1 do={
        :set PoePort $ptr
        :set PoeMode "off"
        :execute PoeControl
	:delay 10s
      }
    }
  }
  :set Vprevious $Vsystem
}

Come ciliegina sulla torta, conclude il tutto uno scheduler che richiama quest'ultimo script ogni due minuti

/system scheduler add interval=2m name=checkVoltageSchedule on-event=checkVoltage \
    policy=ftp,reboot,read,write,policy,test,winbox,password,sniff,sensitive,api

Per provare il tutto, predisponiamo il seguente ambiente di test con

  • una RB750UP
  • due antenne radio Ubiquiti Nanostation M5 POE a simulare due link wireless collegate alla ether2 e ether3 dell'RB750UP
  • due telecamere IP POE in modalità day (quindi con led spenti) collegate alla ether4 e ether5 dell'RB750UP
  • due batterie 12V, 12 A in serie
  • un alimentatore UPS

e accendiamo il tutto. Questo qui sotto è il log risultante.

09:54:01 script,info Alert voltage is 24.0V
09:54:01 script,info Voltage decreaded by 8mV.
09:56:01 script,info Alert  voltage is 23.8V
09:56:01 script,info Voltage decreaded by 2mV.
10:02:01 script,info Alert voltage is 23.7V
10:02:01 script,info Voltage decreaded by 1mV.
10:06:01 script,info Alert voltage is 23.6V
10:06:01 script,info Voltage decreaded by 1mV.
10:18:01 script,info Alert voltage is 23.5V
10:18:01 script,info Voltage decreaded by 1mV.
10:22:01 script,info Alert  voltage is 23.5V
10:22:01 script,info Voltage decreaded by 1mV.
10:30:01 script,info Alert  voltage is 23.4V
10:30:01 script,info Voltage decreaded by 1mV.
10:34:01 script,info Alert voltage is 23.4V
10:34:01 script,info Voltage decreaded by 1mV.
10:38:01 script,info Alert voltage is 23.3V
10:38:01 script,info Voltage decreaded by 1mV.
10:40:01 script,info Alert voltage is 21.1V
10:40:01 script,info Voltage decreaded by 22mV.
10:40:01 script,info PoE on port ether5 switched off
10:40:01 interface,info ether5 link down
10:52:01 script,info Alert voltage is 21.3V
10:52:01 script,info Voltage decreaded by 1mV.
10:58:01 script,info Alert voltage is 21.3V
10:58:01 script,info Voltage decreaded by 1mV.
11:14:01 script,info Alert voltage is 21.2V
11:14:01 script,info Voltage decreaded by 1mV.
11:34:01 script,info Alert voltage is 21.1V
11:34:01 script,info Voltage decreaded by 1mV.
12:00:01 script,info Alert voltage is 21.0V
12:00:01 script,info Voltage decreaded by 1mV.
12:00:11 script,info PoE on port ether4 switched off
12:00:11 interface,info ether4 link down
12:24:01 script,info Alert voltage is 21.1V
12:24:01 script,info Voltage decreaded by 1mV.
12:32:01 script,info Alert voltage is 21.1V
12:32:01 script,info Voltage decreaded by 1mV.
13:44:01 script,info Alert voltage is 21.0V
13:44:01 script,info Voltage decreaded by 1mV.
15:08:01 script,info Alert voltage is 20.9V
15:08:01 script,info Voltage decreaded by 1mV.
15:52:01 script,info Alert voltage is 20.8V
15:52:01 script,info Voltage decreaded by 1mV.
17:02:39 script,info Alert Tossicia POE Test voltage is 24.3V
17:02:39 script,info Voltage increased by 1mV. Powering on all ports...
17:02:41 script,info PoE on port ether4 switched auto-on
17:02:44 interface,info ether4 link up (speed 100M, full duplex)
17:02:53 script,info PoE on port ether5 switched auto-on
17:02:57 interface,info ether5 link up (speed 100M, full duplex)

Come si vede, la tensione è iniziata a scendere, poi probabilmente per la poca carica delle batterie, ha avuto un tracollo alle 10:40 scendendo sotto la prima soglia e portandosi molto vicino alla seconda soglia.

Questo ha comportato lo spegnimento della telecamera sulla ether5. Quindi la tensione è continuata a scendere raggiungendo alle 12:00 la seconda soglia e ciò ha comportato lo spegnimento della seconda telecamera.

A questo punto, la tensione è rimasta praticamente stabile per tutto la durata del test in quanto l'assorbimento delle sole antenne di backbone era minimo.

Alle 17:02 si è deciso di interrompere il test ridando corrente all'impianto. Questo ha comportato l'immediato innalzamento della tensione ai valori massimi e il sistema ha riacceso le due telecamere spente in precedenza.

Questo qui sotto è il grafico della tensione in uscita durante l'esperimento dove si nota la caduta di tensione alle 10:40 e il relativo piccolo innalzamento temporano successivo dovuto alla diminuzione del carico. Stessa cosa si nota alle 12:00 quando è stata staccata la seconda telecamera.

Voltage out RB750UP

Questo qui invece è il grafico di assorbimento in milliAmpere delle singole porte. In verde scuro l'assorbimento della telecamera su ether5 spenta alle 10:40, in verde chiaro la telecamera spenta alle 12:00 e due tracce sovrapposte in rosso e bordeaux delle due antenne. In arancione il carico totale prodotto da tali apparati. Current RB750UP out Quello che segue è invece l'andamento della tensione per tutta la durata del test fino al rispristino della 220V

RB750UP Voltage out (total)

Insomma, un bel prodottino che, in poco spazio, permette di alimentare 4 apparati POE e monitorare le tensioni e le correnti fornite.

Questo articolo è stato visto 67 volta

Lascia un commento

 

Questo articolo è stato visto 67 volta

Lascia un commento