NPM 2000: Unterschied zwischen den Versionen

Aus RaumZeitLabor Wiki
(angelegt)
 
K (Aktualisierung)
 
(18 dazwischenliegende Versionen von 7 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
Diese Seite dient der Dokumentation des Reverse-Engineering-Prozesses des NPM 2000.
Diese Seite dient der Dokumentation des Reverse-Engineering-Prozesses des NPM 2000 (Network Power Manager v1.10.1 von Shenzhen Clever Electronics).


==Überblick==
==Überblick==
Zeile 7: Zeile 7:
* Hochspannungsteil mit den Relais und einem Trafo zur Versorgnung des Niederspannungsteils.
* Hochspannungsteil mit den Relais und einem Trafo zur Versorgnung des Niederspannungsteils.
* Niederspannungsteil mit µC und einer Netzwerkanbindung auf einer separaten Platine.
* Niederspannungsteil mit µC und einer Netzwerkanbindung auf einer separaten Platine.
Eine grundlegende Doku gibt es hier: [[Media:NPM_Manual.pdf]]


==Anschlüsse==
==Anschlüsse==
Zeile 12: Zeile 14:
* COM1 ist RS485 oder RS422
* COM1 ist RS485 oder RS422
* COM2 ist RS232
* COM2 ist RS232
* Port(1) Switch
* Port(2) Hausbus
* Port(3) Rundumleuchte E-Ecke
* Port(4) frei
* Port(5) frei
* Port(6) frei
* Port(7) frei
* Port(8) Rundumleuchte Raum
==Shell Script zum Ansprechen==
Ein Shell Script zum Ansprechen der NPM findet sich [http://github.com/Niklas974/npm2000 hier]
== npmd (daemon) ==
Neben dem Shellscript gibt es nun auch einen daemon, der eine HTTP-API bereitstellt um mit dem NPM zu sprechen. Der Vorteil eines Daemons liegt darin, dass es nun keine Timing-Probleme mehr gibt (der NPM kann nur eine Verbindung und hat ein gewisses Delay bis er diese als geschlossen erkennt) und die Befehle schneller abgearbeitet werden:
http://github.com/raumzeitlabor/npmd


==Hochspannungsteil==
==Hochspannungsteil==
Zeile 44: Zeile 64:
* NIC: RTL8109AS 14454T1
* NIC: RTL8109AS 14454T1
* EEPROM: CSI 24WC023 0445C
* EEPROM: CSI 24WC023 0445C
* IP: per Default: 192.168.0.178/24


===TODO===
===TODO===
Zeile 51: Zeile 72:
* Bestückungsliste
* Bestückungsliste
* CPU identifizieren
* CPU identifizieren
==Protokoll==
* Das Gerät spricht Ascii
* Dump:
00000000  35 35 30 37 46 46 46 46  31 32 33 34 35 36 37 38 5507FFFF 12345678
00000010  35 41                                            5A
    00000000  41 41 30 33 46 46 46 46  41 39                  AA03FFFF A9
00000012  43 32 30 34 46 46 46 46  30 31 43 37            C204FFFF 01C7
    0000000A  43 32 30 34 46 46 46 46  30 31 43 37            C204FFFF 01C7
0000001E  35 35 30 37 46 46 46 46  31 32 33 34 35 36 37 38 5507FFFF 12345678
0000002E  35 41                                            5A
    00000016  41 41 30 33 46 46 46 46  41 39                  AA03FFFF A9
00000030  43 32 30 34 46 46 46 46  30 32 43 34            C204FFFF 02C4
    00000020  43 32 30 34 46 46 46 46  30 31 43 37            C204FFFF 01C7
0000003C  35 35 30 37 46 46 46 46  31 32 33 34 35 36 37 38 5507FFFF 12345678
0000004C  35 41                                            5A
    0000002C  41 41 30 33 46 46 46 46  41 39                  AA03FFFF A9
0000004E  43 32 30 34 46 46 46 46  30 33 43 35            C204FFFF 03C5
    00000036  43 32 30 34 46 46 46 46  30 31 43 37            C204FFFF 01C7
0000005A  35 35 30 37 46 46 46 46  31 32 33 34 35 36 37 38 5507FFFF 12345678
0000006A  35 41                                            5A
    00000042  41 41 30 33 46 46 46 46  41 39                  AA03FFFF A9
0000006C  43 32 30 34 46 46 46 46  30 34 43 32            C204FFFF 04C2
    0000004C  43 32 30 34 46 46 46 46  30 31 43 37            C204FFFF 01C7
00000078  35 35 30 37 46 46 46 46  31 32 33 34 35 36 37 38 5507FFFF 12345678
00000088  35 41                                            5A
    00000058  41 41 30 33 46 46 46 46  41 39                  AA03FFFF A9
0000008A  42 32 30 34 46 46 46 46  30 31 42 37            B204FFFF 01B7
    00000062  42 32 30 34 46 46 46 46  30 31 42 37            B204FFFF 01B7
00000096  35 35 30 37 46 46 46 46  31 32 33 34 35 36 37 38 5507FFFF 12345678
000000A6  35 41                                            5A
    0000006E  41 41 30 33 46 46 46 46  41 39                  AA03FFFF A9
000000A8  42 32 30 34 46 46 46 46  30 32 42 34            B204FFFF 02B4
    00000078  42 32 30 34 46 46 46 46  30 31 42 37            B204FFFF 01B7
000000B4  35 35 30 37 46 46 46 46  31 32 33 34 35 36 37 38 5507FFFF 12345678
000000C4  35 41                                            5A
    00000084  41 41 30 33 46 46 46 46  41 39                  AA03FFFF A9
000000C6  42 32 30 34 46 46 46 46  30 33 42 35            B204FFFF 03B5
    0000008E  42 32 30 34 46 46 46 46  30 31 42 37            B204FFFF 01B7
000000D2  35 35 30 37 46 46 46 46  31 32 33 34 35 36 37 38 5507FFFF 12345678
000000E2  35 41                                            5A
    0000009A  41 41 30 33 46 46 46 46  41 39                  AA03FFFF A9
000000E4  42 32 30 34 46 46 46 46  30 34 42 32            B204FFFF 04B2
    000000A4  42 32 30 34 46 46 46 46  30 31 42 37            B204FFFF 01B7
Dieser Dump schaltet die ersten 4 Ports ein, und dann wieder aus
Dies kann auch mit netcat von Hand durchgeführt werden:
Port 1 einschalten: 
(echo -n '5507FFFF123456785A'; sleep 0.1; echo -n 'B204FFFF01B7') | netcat 192.168.0.178 4001
Port 1 ausschalten:
(echo -n '5507FFFF123456785A'; sleep 0.1; echo -n 'C204FFFF01C7') | netcat 192.168.0.178 4001
Port 2 einschalten:
(echo -n '5507FFFF123456785A'; sleep 0.1; echo -n 'B204FFFF02B4') | netcat 192.168.0.178 4001
Port 2 ausschalten:
(echo -n '5507FFFF123456785A'; sleep 0.1; echo -n 'C204FFFF02C4') | netcat 192.168.0.178 4001
etc...
* Port 1
** an: 01B7
** aus: 01C7
* Port 2
** an: 02B4
** aus: 02C4
* Port 3
** an: 03B5
** aus: 03C5
* Port 4
** an: 04B2
** aus: 04C2
* Port 5
** an: 05B3
** aus: 05C3
* Port 6
** an: 06B0
** aus: 06C0
* Port 7
** an: 07B1
** aus: 07C1
* Port 8
** an: 08BE
** aus: 08CE
Abfrage Port Status:
(echo -n '5507FFFF123456785A'; sleep 0.1; echo -n 'D103FFFFD2') | netcat 192.168.0.178 4001
Antwort:
AA03FFFFA9D104FFFF4E9B
Die letzten 4 Zeichen in binär: 0100 1110 1001 1011
* Port an: 7,4,3,2  aus: 8,6,5,1
* Die ersten beiden der 4er Gruppen in hex geben in Binär konvertiert den Portstatus an. (hier: 0100 und 1110)
* Die letzen beiden Vierergruppen (hier:1001 und 1011) sind noch unklar.
==Bilder==
{|
| [[Datei:Npm01.jpg|200px|thumb|left|NPM Innenansicht Hochspannungsteil]]
| [[Datei:Npm02.jpg|200px|thumb|left|NPM Innenansicht Hochspannungsteil]]
| [[Datei:Npm03.jpg|200px|thumb|left|NPM Innenansicht Niederspannungsteil]]
|-
| [[Datei:Npm04.jpg|200px|thumb|left|NPM Innenansicht Niederspannungsteil]]
| [[Datei:Npm05.jpg|200px|thumb|left|NPM Rückansicht]]
| [[Datei:Npm06.jpg|200px|thumb|left|NPM Vorderansicht]]
|}
[[Kategorie:Hardware]]

Aktuelle Version vom 11. September 2012, 20:40 Uhr

Diese Seite dient der Dokumentation des Reverse-Engineering-Prozesses des NPM 2000 (Network Power Manager v1.10.1 von Shenzhen Clever Electronics).

Überblick

Das NPM 2000 besteht aus zwei Platinen:

  • Hochspannungsteil mit den Relais und einem Trafo zur Versorgnung des Niederspannungsteils.
  • Niederspannungsteil mit µC und einer Netzwerkanbindung auf einer separaten Platine.

Eine grundlegende Doku gibt es hier: Media:NPM_Manual.pdf

Anschlüsse

  • COM1 ist RS485 oder RS422
  • COM2 ist RS232
  • Port(1) Switch
  • Port(2) Hausbus
  • Port(3) Rundumleuchte E-Ecke
  • Port(4) frei
  • Port(5) frei
  • Port(6) frei
  • Port(7) frei
  • Port(8) Rundumleuchte Raum

Shell Script zum Ansprechen

Ein Shell Script zum Ansprechen der NPM findet sich hier

npmd (daemon)

Neben dem Shellscript gibt es nun auch einen daemon, der eine HTTP-API bereitstellt um mit dem NPM zu sprechen. Der Vorteil eines Daemons liegt darin, dass es nun keine Timing-Probleme mehr gibt (der NPM kann nur eine Verbindung und hat ein gewisses Delay bis er diese als geschlossen erkennt) und die Befehle schneller abgearbeitet werden:

http://github.com/raumzeitlabor/npmd

Hochspannungsteil

TODO

  • Bilder
  • Schaltplan
  • Bestückungsliste

Niederspannungsteil

  • CPU: Atmel AT89C52-24PC (MPC51-kompatibel)
  • UART: Exar ST16C550CP D9633
  • EEPROM: Atmel 528 24C02 P127
  • RTC: Dallas DS1307
  • Reset-Controller: Maxim MAX706 EPA0305
  • Diverse 74xx
  • Pegelkonverter für RS232 und RS485/RS422

TODO

  • Bilder
  • Schaltplan
  • Bestückungsliste vervollständigen
  • EEPROM dumpen
  • AT89C52 dumpen, sofern möglich (Lockbits?)

Netzwerkanbindung

  • CPU: ??? (Beschriftung abgeschliffen)
  • NIC: RTL8109AS 14454T1
  • EEPROM: CSI 24WC023 0445C
  • IP: per Default: 192.168.0.178/24

TODO

  • Bilder
  • Schaltplan
  • Bestückungsliste
  • CPU identifizieren

Protokoll

  • Das Gerät spricht Ascii
  • Dump:
00000000  35 35 30 37 46 46 46 46  31 32 33 34 35 36 37 38 5507FFFF 12345678
00000010  35 41                                            5A
   00000000  41 41 30 33 46 46 46 46  41 39                   AA03FFFF A9
00000012  43 32 30 34 46 46 46 46  30 31 43 37             C204FFFF 01C7
   0000000A  43 32 30 34 46 46 46 46  30 31 43 37             C204FFFF 01C7
0000001E  35 35 30 37 46 46 46 46  31 32 33 34 35 36 37 38 5507FFFF 12345678
0000002E  35 41                                            5A
   00000016  41 41 30 33 46 46 46 46  41 39                   AA03FFFF A9
00000030  43 32 30 34 46 46 46 46  30 32 43 34             C204FFFF 02C4
   00000020  43 32 30 34 46 46 46 46  30 31 43 37             C204FFFF 01C7
0000003C  35 35 30 37 46 46 46 46  31 32 33 34 35 36 37 38 5507FFFF 12345678
0000004C  35 41                                            5A
   0000002C  41 41 30 33 46 46 46 46  41 39                   AA03FFFF A9
0000004E  43 32 30 34 46 46 46 46  30 33 43 35             C204FFFF 03C5
   00000036  43 32 30 34 46 46 46 46  30 31 43 37             C204FFFF 01C7
0000005A  35 35 30 37 46 46 46 46  31 32 33 34 35 36 37 38 5507FFFF 12345678
0000006A  35 41                                            5A
   00000042  41 41 30 33 46 46 46 46  41 39                   AA03FFFF A9
0000006C  43 32 30 34 46 46 46 46  30 34 43 32             C204FFFF 04C2
   0000004C  43 32 30 34 46 46 46 46  30 31 43 37             C204FFFF 01C7
00000078  35 35 30 37 46 46 46 46  31 32 33 34 35 36 37 38 5507FFFF 12345678
00000088  35 41                                            5A
   00000058  41 41 30 33 46 46 46 46  41 39                   AA03FFFF A9
0000008A  42 32 30 34 46 46 46 46  30 31 42 37             B204FFFF 01B7
   00000062  42 32 30 34 46 46 46 46  30 31 42 37             B204FFFF 01B7
00000096  35 35 30 37 46 46 46 46  31 32 33 34 35 36 37 38 5507FFFF 12345678
000000A6  35 41                                            5A
   0000006E  41 41 30 33 46 46 46 46  41 39                   AA03FFFF A9
000000A8  42 32 30 34 46 46 46 46  30 32 42 34             B204FFFF 02B4
   00000078  42 32 30 34 46 46 46 46  30 31 42 37             B204FFFF 01B7
000000B4  35 35 30 37 46 46 46 46  31 32 33 34 35 36 37 38 5507FFFF 12345678
000000C4  35 41                                            5A
   00000084  41 41 30 33 46 46 46 46  41 39                   AA03FFFF A9
000000C6  42 32 30 34 46 46 46 46  30 33 42 35             B204FFFF 03B5
   0000008E  42 32 30 34 46 46 46 46  30 31 42 37             B204FFFF 01B7
000000D2  35 35 30 37 46 46 46 46  31 32 33 34 35 36 37 38 5507FFFF 12345678
000000E2  35 41                                            5A
   0000009A  41 41 30 33 46 46 46 46  41 39                   AA03FFFF A9
000000E4  42 32 30 34 46 46 46 46  30 34 42 32             B204FFFF 04B2
   000000A4  42 32 30 34 46 46 46 46  30 31 42 37             B204FFFF 01B7

Dieser Dump schaltet die ersten 4 Ports ein, und dann wieder aus

Dies kann auch mit netcat von Hand durchgeführt werden: Port 1 einschalten:

(echo -n '5507FFFF123456785A'; sleep 0.1; echo -n 'B204FFFF01B7') | netcat 192.168.0.178 4001

Port 1 ausschalten:

(echo -n '5507FFFF123456785A'; sleep 0.1; echo -n 'C204FFFF01C7') | netcat 192.168.0.178 4001

Port 2 einschalten:

(echo -n '5507FFFF123456785A'; sleep 0.1; echo -n 'B204FFFF02B4') | netcat 192.168.0.178 4001

Port 2 ausschalten:

(echo -n '5507FFFF123456785A'; sleep 0.1; echo -n 'C204FFFF02C4') | netcat 192.168.0.178 4001

etc...

  • Port 1
    • an: 01B7
    • aus: 01C7
  • Port 2
    • an: 02B4
    • aus: 02C4
  • Port 3
    • an: 03B5
    • aus: 03C5
  • Port 4
    • an: 04B2
    • aus: 04C2
  • Port 5
    • an: 05B3
    • aus: 05C3
  • Port 6
    • an: 06B0
    • aus: 06C0
  • Port 7
    • an: 07B1
    • aus: 07C1
  • Port 8
    • an: 08BE
    • aus: 08CE


Abfrage Port Status:

(echo -n '5507FFFF123456785A'; sleep 0.1; echo -n 'D103FFFFD2') | netcat 192.168.0.178 4001

Antwort:

AA03FFFFA9D104FFFF4E9B

Die letzten 4 Zeichen in binär: 0100 1110 1001 1011

  • Port an: 7,4,3,2 aus: 8,6,5,1
  • Die ersten beiden der 4er Gruppen in hex geben in Binär konvertiert den Portstatus an. (hier: 0100 und 1110)
  • Die letzen beiden Vierergruppen (hier:1001 und 1011) sind noch unklar.


Bilder

NPM Innenansicht Hochspannungsteil
NPM Innenansicht Hochspannungsteil
NPM Innenansicht Niederspannungsteil
NPM Innenansicht Niederspannungsteil
NPM Rückansicht
NPM Vorderansicht