Hauptmenü

FHEM und SNMP

Begonnen von M.Piet, 26 Juli 2022, 19:54:02

Vorheriges Thema - Nächstes Thema

M.Piet

Hallo Zusammen,

ich nutze eine Fortigate Firewall. Die kann natürlich auch SNMP. Ich kann auf ihr auch ein MIB-File runterladen.
Kann man das irgendwie per SNMP an FHEM anbinden und somit irgendwelche Daten auslesen?
Hab mit der Suche dazu keine eindeutige Aussage gefunden. ...oder ich bin blind... ;)

Gruß Piet

Frank_Huber

Das Modul SYSSTAT bietet snmp.
Ich frage damit meine PoE Switch ab.

M.Piet

Danke.

Hmmm...ich dachte mit dem Modul könnte man nur FHEM selbst überwachen.
Wie kann ich denn dort externe Geräte überwachen?

Frank_Huber

Commmandref gelesen? 😉

Kann dir später oder morgen wenn ich wieder am PC sitze ein Beispiel von mir posten.

M.Piet

Jupp. Habe ich:

"Das Modul stellt Systemstatistiken für den Rechner, auf dem FHEM läuft bzw. für ein entferntes Linux System, das per vorkonfiguriertem ssh Zugang ohne Passwort erreichbar ist, zur Vefügung."

Zitat von: Frank_Huber am 26 Juli 2022, 20:48:18

Kann dir später oder morgen wenn ich wieder am PC sitze ein Beispiel von mir posten.
Ja sehr gern. :)

Felix_86

Ich frage mittels SNMP auf FHEM einige Systeme in unserem Netzwerk ab, neben ESX Server, Switche, Temperatursensoren auch unsere Firewall (Barracuda).

hier ein gekürzter list von dem Device


Internals:
   DEF        300 1800 10.10.10.254
   FUUID      5ec3c6a1-f33f-2baa-487c-64b3ca9a4f523a08
   HAS_Net::SNMP 1
   HOST       10.10.10.254
   INTERVAL   300
   INTERVAL_FS 1800
   NAME       SNMP_BarracudaMgmt
   NR         20
   NTFY_ORDER 50-SNMP_BarracudaMgmt
   STATE      0.15 0.13 0.10
   SystemDescription Barracuda NG Firewall
   SystemName Firewall
   TYPE       SYSSTAT
   USE_SNMP   1
   eventCount 3503
   interval_fs 1500
   snmpCommunity barracuda
   snmpVersion 2
   QUEUE:
   READINGS:
     2022-07-27 13:59:52   /               4850118656
     2022-07-27 13:59:52   /art            821440512
     2022-07-27 13:59:52   /boot           71229440
     2022-07-27 13:59:52   /dev/shm        2056183808
     2022-07-27 13:59:52   /phion0         40339505152
     2021-09-05 11:15:30   /phion0/mail/transactions 209715200
     2022-07-27 13:59:52   /run            2047152128
     2022-07-27 13:59:52   /sys/fs/cgroup  2056192000
     2022-07-27 14:04:52   CPU_Temperature 57000
     2022-07-27 13:59:52   Cachedmemory    0
     2022-07-27 14:04:52   Firewall_Sessions 1120
     2022-07-27 13:59:52   Memorybuffers   3792269312
     2022-07-27 14:04:52   Phion_Release   GWAY-8.0.6-0211
     2022-07-27 13:59:52   Physicalmemory  1234325504
     2022-07-27 13:59:52   Sharedmemory    0
     2022-07-27 13:59:52   Swapspace       1073737728
     2022-07-27 14:04:52   System_Temperature 44500
     2022-07-27 13:59:52   Virtualmemory   2308063232
     2021-04-19 16:16:23   connection      disconnected
     2022-07-27 14:04:52   load            0.15
     2022-07-27 13:59:52   noSuchInstance  0
     2022-07-27 14:04:52   state           0.15 0.13 0.10
     2022-07-27 14:04:52   uptime          19815857
   filesystems:
     1
     3
     6
     7
     8
     10
     35
     36
     37
     38
     55
     56
     57
     58
   helper:
Attributes:
   filesystems 1,3,6,7,8,10,35,36,37,38,55,56,57,58
   mibs       
.1.3.6.1.2.1.1.3.0:uptime
,.1.3.6.1.4.1.10704.1.2:Phion_Release
,.1.3.6.1.4.1.10704.1.4.1.3.15.67.80.85.32.84.101.109.112.101.114.97.116.117.114.101:CPU_Temperature ,.1.3.6.1.4.1.10704.1.4.1.3.18.83.121.115.116.101.109.32.84.101.109.112.101.114.97.116.117.114.101:System_Temperature
,.1.3.6.1.4.1.10704.1.10.1.1.8.102.119.83.116.97.116.115.0:Firewall_Sessions
   noSSH      1
   room       SNMP
   snmp       1
   snmpCommunity barracuda
   snmpVersion 2
MfG,
Felix

Pi3, Raspbian 11, FHEM 6.2, ca 335 Device
SIGNALduino (TCM97001, TX, IT, CU), CUL, HUEBridge, HUEDevice, mailcheck, alexa, TelegramBot, Weather (OWM), FRITZBOX, PRESENCE, UWZ, echodevice, EspLedControler, TabletUI, Calendar, Abfall, Vitoconnect, AMAD, JeeLink, PCA301, CUL_EM

Frank_Huber

Zitat von: M.Piet am 26 Juli 2022, 20:50:41
Jupp. Habe ich:
"Das Modul stellt Systemstatistiken für den Rechner, auf dem FHEM läuft bzw. für ein entferntes Linux System, das per vorkonfiguriertem ssh Zugang ohne Passwort erreichbar ist, zur Vefügung."
Dann hast zu früh aufgehört zu lesen. ;-)
ZitatNotes:
...
Um einen Zielrechner mit snmp zu überwachen, muss Net::SNMP installiert sein.

Zitat von: M.Piet am 26 Juli 2022, 20:50:41
Ja sehr gern. :)
Hier eine meiner PoE switche die ich abfrage, im Userreading lasse ich mir noch die PoE Summenlast berechnen.
defmod CWGE26FX2TX24MSPOE_1 SYSSTAT 60 600 192.168.12.248
attr CWGE26FX2TX24MSPOE_1 group PoE_Switch
attr CWGE26FX2TX24MSPOE_1 icon it_network
attr CWGE26FX2TX24MSPOE_1 mibs .1.3.6.1.2.1.1.3.0:uptime .1.3.6.1.4.1.32298.2.2.29.11.2.1.1.5.1:port-01_PoE_PowerUsed .1.3.6.1.4.1.32298.2.2.29.11.2.1.1.5.2:port-02_PoE_PowerUsed .1.3.6.1.4.1.32298.2.2.29.11.2.1.1.5.3:port-03_PoE_PowerUsed .1.3.6.1.4.1.32298.2.2.29.11.2.1.1.5.4:port-04_PoE_PowerUsed .1.3.6.1.4.1.32298.2.2.29.11.2.1.1.5.5:port-05_PoE_PowerUsed .1.3.6.1.4.1.32298.2.2.29.11.2.1.1.5.6:port-06_PoE_PowerUsed .1.3.6.1.4.1.32298.2.2.29.11.2.1.1.5.7:port-07_PoE_PowerUsed .1.3.6.1.4.1.32298.2.2.29.11.2.1.1.5.8:port-08_PoE_PowerUsed .1.3.6.1.4.1.32298.2.2.29.11.2.1.1.5.9:port-09_PoE_PowerUsed .1.3.6.1.4.1.32298.2.2.29.11.2.1.1.5.10:port-10_PoE_PowerUsed .1.3.6.1.4.1.32298.2.2.29.11.2.1.1.5.11:port-11_PoE_PowerUsed .1.3.6.1.4.1.32298.2.2.29.11.2.1.1.5.12:port-12_PoE_PowerUsed .1.3.6.1.4.1.32298.2.2.29.11.2.1.1.5.13:port-13_PoE_PowerUsed .1.3.6.1.4.1.32298.2.2.29.11.2.1.1.5.14:port-14_PoE_PowerUsed .1.3.6.1.4.1.32298.2.2.29.11.2.1.1.5.15:port-15_PoE_PowerUsed .1.3.6.1.4.1.32298.2.2.29.11.2.1.1.5.16:port-16_PoE_PowerUsed .1.3.6.1.4.1.32298.2.2.29.11.2.1.1.5.17:port-17_PoE_PowerUsed .1.3.6.1.4.1.32298.2.2.29.11.2.1.1.5.18:port-18_PoE_PowerUsed .1.3.6.1.4.1.32298.2.2.29.11.2.1.1.5.19:port-19_PoE_PowerUsed .1.3.6.1.4.1.32298.2.2.29.11.2.1.1.5.20:port-20_PoE_PowerUsed .1.3.6.1.4.1.32298.2.2.29.11.2.1.1.5.21:port-21_PoE_PowerUsed .1.3.6.1.4.1.32298.2.2.29.11.2.1.1.5.22:port-22_PoE_PowerUsed .1.3.6.1.4.1.32298.2.2.29.11.2.1.1.5.23:port-23_PoE_PowerUsed .1.3.6.1.4.1.32298.2.2.29.11.2.1.1.5.24:port-24_PoE_PowerUsed .1.3.6.1.4.1.32298.2.2.29.9.1.1.2.1:port-01_LinkStatus .1.3.6.1.4.1.32298.2.2.29.9.1.1.2.2:port-02_LinkStatus .1.3.6.1.4.1.32298.2.2.29.9.1.1.2.3:port-03_LinkStatus .1.3.6.1.4.1.32298.2.2.29.9.1.1.2.4:port-04_LinkStatus .1.3.6.1.4.1.32298.2.2.29.9.1.1.2.5:port-05_LinkStatus .1.3.6.1.4.1.32298.2.2.29.9.1.1.2.6:port-06_LinkStatus .1.3.6.1.4.1.32298.2.2.29.9.1.1.2.7:port-07_LinkStatus .1.3.6.1.4.1.32298.2.2.29.9.1.1.2.8:port-08_LinkStatus .1.3.6.1.4.1.32298.2.2.29.9.1.1.2.9:port-09_LinkStatus .1.3.6.1.4.1.32298.2.2.29.9.1.1.2.10:port-10_LinkStatus .1.3.6.1.4.1.32298.2.2.29.9.1.1.2.11:port-11_LinkStatus .1.3.6.1.4.1.32298.2.2.29.9.1.1.2.12:port-12_LinkStatus .1.3.6.1.4.1.32298.2.2.29.9.1.1.2.13:port-13_LinkStatus .1.3.6.1.4.1.32298.2.2.29.9.1.1.2.14:port-14_LinkStatus .1.3.6.1.4.1.32298.2.2.29.9.1.1.2.15:port-15_LinkStatus .1.3.6.1.4.1.32298.2.2.29.9.1.1.2.16:port-16_LinkStatus .1.3.6.1.4.1.32298.2.2.29.9.1.1.2.17:port-17_LinkStatus .1.3.6.1.4.1.32298.2.2.29.9.1.1.2.18:port-18_LinkStatus .1.3.6.1.4.1.32298.2.2.29.9.1.1.2.19:port-19_LinkStatus .1.3.6.1.4.1.32298.2.2.29.9.1.1.2.20:port-20_LinkStatus .1.3.6.1.4.1.32298.2.2.29.9.1.1.2.21:port-21_LinkStatus .1.3.6.1.4.1.32298.2.2.29.9.1.1.2.22:port-22_LinkStatus .1.3.6.1.4.1.32298.2.2.29.9.1.1.2.23:port-23_LinkStatus .1.3.6.1.4.1.32298.2.2.29.9.1.1.2.24:port-24_LinkStatus .1.3.6.1.4.1.32298.2.2.29.9.1.1.2.25:port-25_LinkStatus .1.3.6.1.4.1.32298.2.2.29.9.1.1.2.26:port-26_LinkStatus
attr CWGE26FX2TX24MSPOE_1 noSSH 1
attr CWGE26FX2TX24MSPOE_1 room Switche
attr CWGE26FX2TX24MSPOE_1 snmp 1
attr CWGE26FX2TX24MSPOE_1 stateFormat total PoE Power used: total_PoE_PowerUsed W
attr CWGE26FX2TX24MSPOE_1 userReadings total_PoE_PowerUsed:port-26_LinkStatus.* { my $summe = 0;;\
for my $a ( keys %{$defs{$name}->{READINGS}} ) {\
$summe += ReadingsNum($name, $a, 0) if ($a =~ 'port-' and $a =~ 'PoE_PowerUsed');;\
} return $summe;; },\
uptime_calc:uptime.* {sprintf("%d %02d:%02d",SYSMON_decode_time_diff((ReadingsVal($name,"uptime",0))/100))}


kannst mit FHEM übrigens auch Werte setzen per SNMP, das dann aber über einen anderen Weg.
Hier ein Ausschnitt auf einem meiner DOIF zur PoE Steuerung: (die xxxxxxxx ist die SNMP community mit Schreibrecht) snmpset läuft dann über die shell.
DOELSEIF ([S1_P02:"^PoE_on$"])  ("snmpset -v2c -c xxxxxxxx 192.168.12.248 1.3.6.1.4.1.32298.2.2.29.11.1.5.1.2.2 i 2")
DOELSEIF ([S1_P02:"^Eth_off$"]) ("snmpset -v2c -c xxxxxxxx 192.168.12.248 1.3.6.1.4.1.32298.2.2.29.9.2.1.2.2 i 2")

M.Piet

Moin Zusammen,

ich habe es nun endlich mal versucht umzusetzten. Habe aber noch Probleme.

Ich kann die Fortigate-Firewall über PRTG perfekt abfragen. SNMP an der Fortigate funktioniert also.
Mein SYSSTAT bringt mir aber nur ein "disconnected".

Das Log wirft Folgendes aus:

2022.12.28 09:45:20 2: Forti_SNMP: starting: /usr/bin/ssh -q 192.168.92.1
2022.12.28 09:45:21 3: Forti_SNMP: read: error during sysread: No such process
2022.12.28 09:45:21 3: Forti_SNMP: Disconnected
2022.12.28 09:45:21 3: Forti_SNMP: read: end of file reached while sysread
2022.12.28 09:45:31 2: Forti_SNMP: starting: /usr/bin/ssh -q 192.168.92.1
2022.12.28 09:45:31 3: Forti_SNMP: read: error during sysread: No such process
2022.12.28 09:45:31 3: Forti_SNMP: Disconnected
2022.12.28 09:45:31 3: Forti_SNMP: read: end of file reached while sysread


Mein Device:
Internals:
   CFGFN     
   DEF        60 600 192.168.92.1
   FUUID      63ac00a6-f33f-8a41-b286-57eb252504ce3270
   HAS_Net::SNMP 1
   HOST       192.168.92.1
   INTERVAL   60
   INTERVAL_FS 600
   LAST_DISCONNECT 2022-12-28 09:45:31
   NAME       Forti_SNMP
   NR         474
   NTFY_ORDER 50-Forti_SNMP
   PARSED     0
   PARTIAL   
   SENT       1
   STARTED    0
   STATE      Disconnected
   SystemDescription
   SystemName
   TYPE       SYSSTAT
   USE_SNMP   1
   eventCount 75
   interval_fs 180
   snmpCommunity FHEM
   snmpVersion 2
   QUEUE:
   READINGS:
     2022-12-28 09:45:31   connection      disconnected
   helper:
Attributes:
   mibs       1.3.6.1.4.1.12356.101.4.1.20:uptime
   noSSH      1
   room       LAN-Status
   snmp       1
   snmpCommunity FHEM
   snmpVersion 2


Jemand noch eine Idee? Da ich per PRTG ohne Probleme die Fortigate abfragen kann, vermute ich einen Fehler in FHEM.
Vielen Dank schon mal.

Wernieman

Im Zielgerät SNMP vom entsprechenden Gerät erlaubt?

Edit:
2022.12.28 09:45:31 2: Forti_SNMP: starting: /usr/bin/ssh -q 192.168.92.1
Irgendwas stimmt bei Dir nicht, Du fragst per ssh und nicht snmp ab ....
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

M.Piet

ZitatIm Zielgerät SNMP vom entsprechenden Gerät erlaubt?
Ja, aus dem kompletten Netz 192.168.92.xxx

Hmmm. Du hast recht.
Ich habe mal das Attr. noSSH auf 1 gesetzt. Dafür tauchen diese Meldungen jetzt nicht mehr auf.

Aber es bleibt bei dem Disconnected.

Habe den snmpDebug mal aktiviert. Vielleicht kann man hier noch was rauslesen.


debug: [1065] Net::SNMP::Message::_prepare_object_identifier(): leading dot present
debug: [1065] Net::SNMP::Message::_prepare_object_identifier(): leading dot present
debug: [1065] Net::SNMP::Message::_prepare_object_identifier(): leading dot present
debug: [440] Net::SNMP::Dispatcher::_event_insert(): created new head and tail [ARRAY(0x6248598)]
debug: [687] Net::SNMP::Message::send(): transport address 192.168.92.1:161
debug: [2058] Net::SNMP::Message::_buffer_dump(): 80 bytes
[0000]  30 4E 02 01  01 04 06 70  75 62 6C 69  63 A0 41 02   0N.....public.A.
[0016]  04 02 9D 14  F6 02 01 00  02 01 00 30  33 30 0F 06   ...........030..
[0032]  0B 2B 06 01  04 01 8F 65  0A 01 03 01  05 00 30 0F   .+.....e......0.
[0048]  06 0B 2B 06  01 04 01 8F  65 0A 01 03  02 05 00 30   ..+.....e......0
[0064]  0F 06 0B 2B  06 01 04 01  8F 65 0A 01  03 03 05 00   ...+.....e......
debug: [200] Net::SNMP::Dispatcher::register(): added handler for descriptor [32]
debug: [462] Net::SNMP::Dispatcher::_event_insert(): modified tail [ARRAY(0x62a5190)]
debug: [535] Net::SNMP::Dispatcher::_event_delete(): deleted [ARRAY(0x6248598)], defined new head [ARRAY(0x62a5190)]
debug: [596] Net::SNMP::Dispatcher::_event_handle(): event [ARRAY(0x62a5190)], timeout = 2.9994
debug: [239] Net::SNMP::Dispatcher::deregister(): removed handler for descriptor [32]
debug: [343] Net::SNMP::Dispatcher::_transport_timeout(): retries left 0
debug: [687] Net::SNMP::Message::send(): transport address 192.168.92.1:161
debug: [2058] Net::SNMP::Message::_buffer_dump(): 80 bytes
[0000]  30 4E 02 01  01 04 06 70  75 62 6C 69  63 A0 41 02   0N.....public.A.
[0016]  04 02 9D 14  F6 02 01 00  02 01 00 30  33 30 0F 06   ...........030..
[0032]  0B 2B 06 01  04 01 8F 65  0A 01 03 01  05 00 30 0F   .+.....e......0.
[0048]  06 0B 2B 06  01 04 01 8F  65 0A 01 03  02 05 00 30   ..+.....e......0
[0064]  0F 06 0B 2B  06 01 04 01  8F 65 0A 01  03 03 05 00   ...+.....e......
debug: [200] Net::SNMP::Dispatcher::register(): added handler for descriptor [32]
debug: [462] Net::SNMP::Dispatcher::_event_insert(): modified tail [ARRAY(0x61b2478)]
debug: [535] Net::SNMP::Dispatcher::_event_delete(): deleted [ARRAY(0x62a5190)], defined new head [ARRAY(0x61b2478)]
debug: [596] Net::SNMP::Dispatcher::_event_handle(): event [ARRAY(0x61b2478)], timeout = 2.9995
debug: [239] Net::SNMP::Dispatcher::deregister(): removed handler for descriptor [32]
error: [349] Net::SNMP::Dispatcher::_transport_timeout(): No response from remote host "192.168.92.1"
error: [2363] Net::SNMP::__ANON__(): No response from remote host "192.168.92.1"
debug: [517] Net::SNMP::Dispatcher::_event_delete(): deleted [ARRAY(0x61b2478)], list is now empty
debug: [1065] Net::SNMP::Message::_prepare_object_identifier(): leading dot present
debug: [440] Net::SNMP::Dispatcher::_event_insert(): created new head and tail [ARRAY(0x623bd40)]
debug: [687] Net::SNMP::Message::send(): transport address 192.168.92.1:161
debug: [2058] Net::SNMP::Message::_buffer_dump(): 45 bytes
[0000]  30 2B 02 01  01 04 06 70  75 62 6C 69  63 A1 1E 02   0+.....public...
[0016]  04 2F 1E 2E  2C 02 01 00  02 01 00 30  10 30 0E 06   ./..,......0.0..
[0032]  0A 2B 06 01  02 01 19 03  03 01 02 05  00            .+...........
debug: [200] Net::SNMP::Dispatcher::register(): added handler for descriptor [32]
debug: [462] Net::SNMP::Dispatcher::_event_insert(): modified tail [ARRAY(0x6226990)]
debug: [535] Net::SNMP::Dispatcher::_event_delete(): deleted [ARRAY(0x623bd40)], defined new head [ARRAY(0x6226990)]
debug: [596] Net::SNMP::Dispatcher::_event_handle(): event [ARRAY(0x6226990)], timeout = 2.9996
debug: [239] Net::SNMP::Dispatcher::deregister(): removed handler for descriptor [32]
debug: [343] Net::SNMP::Dispatcher::_transport_timeout(): retries left 0
debug: [687] Net::SNMP::Message::send(): transport address 192.168.92.1:161
debug: [2058] Net::SNMP::Message::_buffer_dump(): 45 bytes
[0000]  30 2B 02 01  01 04 06 70  75 62 6C 69  63 A1 1E 02   0+.....public...
[0016]  04 2F 1E 2E  2C 02 01 00  02 01 00 30  10 30 0E 06   ./..,......0.0..
[0032]  0A 2B 06 01  02 01 19 03  03 01 02 05  00            .+...........
debug: [200] Net::SNMP::Dispatcher::register(): added handler for descriptor [32]
debug: [462] Net::SNMP::Dispatcher::_event_insert(): modified tail [ARRAY(0x627ed38)]
debug: [535] Net::SNMP::Dispatcher::_event_delete(): deleted [ARRAY(0x6226990)], defined new head [ARRAY(0x627ed38)]
debug: [596] Net::SNMP::Dispatcher::_event_handle(): event [ARRAY(0x627ed38)], timeout = 2.9996
debug: [239] Net::SNMP::Dispatcher::deregister(): removed handler for descriptor [32]
error: [349] Net::SNMP::Dispatcher::_transport_timeout(): No response from remote host "192.168.92.1"
error: [2363] Net::SNMP::__ANON__(): No response from remote host "192.168.92.1"
debug: [517] Net::SNMP::Dispatcher::_event_delete(): deleted [ARRAY(0x627ed38)], list is now empty
debug: [440] Net::SNMP::Dispatcher::_event_insert(): created new head and tail [ARRAY(0x6262ff8)]
debug: [687] Net::SNMP::Message::send(): transport address 192.168.92.1:161
debug: [2058] Net::SNMP::Message::_buffer_dump(): 29 bytes
[0000]  30 1B 02 01  01 04 06 70  75 62 6C 69  63 A0 0E 02   0......public...
[0016]  04 4B FA 3F  9A 02 01 00  02 01 00 30  00            .K.?.......0.
debug: [200] Net::SNMP::Dispatcher::register(): added handler for descriptor [32]
debug: [462] Net::SNMP::Dispatcher::_event_insert(): modified tail [ARRAY(0x57e6b70)]
debug: [535] Net::SNMP::Dispatcher::_event_delete(): deleted [ARRAY(0x6262ff8)], defined new head [ARRAY(0x57e6b70)]
debug: [596] Net::SNMP::Dispatcher::_event_handle(): event [ARRAY(0x57e6b70)], timeout = 2.9996


Wernieman

Da kann ich Dir nicht helfen, snmp setze ich bei FHEM nicht ein. Was mir nur noch einfällt zum Prüfen:
- snmp-Version?
- Richtiges "Passwort" ?
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

M.Piet

Ich habe V1 und V2 getestet.

Passwort? Welches Passwort meinst du?

Wernieman

Du hast die "" übersehen. Ich meinte die Richtige "Community" ..... ist es wirklich bei Dir "public"?
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

M.Piet

Achso, das meinst du.

Die Community ist auf beiden Seiten auf "FHEM" gesetzt. Siehe auch Screenshot.