Raspberrypi.led-md: Unterschied zwischen den Versionen

Aus OrgaMon Wiki
Zur Navigation springen Zur Suche springen
Zeile 122: Zeile 122:
   int fd,dtr,i;
   int fd,dtr,i;
   char device[255] = "/dev/ttyS1"; // this is serial port 2  
   char device[255] = "/dev/ttyS1"; // this is serial port 2  
 
   fd = open(device, O_RDWR);
   fd = open(device, O_RDWR);
   if (fd == -1) {
   if (fd == -1) {

Version vom 4. November 2020, 17:40 Uhr

Ziel

  • In einem Server-Gehäuse (NAS mit vielen Festplatten) werden 10 RGB LED plaziert
  • Sie werden so plaziert dass klar wird welche LED für welche Festplatte zuständig ist
  • Hintergund: Im Service-Fall muss man wissen WELCHE Festplatte zu tauschen ist, das soll optisch angezeigt werden (FAIL-Farbe)
  • Die Steuerung der LEDs erfolgt durch einen Raspberry Pi (Zero oder normaler)
  • Der Raspberry Pi ist durch Dauer 5v+ des ATX-Netzteils dauerversorgt
  • ev. auch durch eine 5 V USB Schnittstelle, das ist noch fraglich
  • Auf dem Server ist ein RAID 6 Array in Betrieb mit 4 bis 10 Platten
  • Die LED spiegeln die Festplatten-Aktivität des RAID Verbundes wieder

Server Software

  • der Server betreibt ein OpenSuse 15.1
  • Ein kleines Programm auf dem Server gibt die Festplattenaktivität und md-Status an den Rasp weiter (über UART)

Disk Stats

    • im Prinzip: cat /proc/diskstats
    • ev. auch cat /proc/partitions
# zentrale Berechnungen
# aus nmon (c) Nigel Griffiths
# 

#
# "xfers" Begriff
#
p->dk[i].dk_xfers = p->dk[i].dk_reads + p->dk[i].dk_writes;

#
# "busy" Begriff
#
/* assume a disk does 200 op per second */
fudged_busy = (p->dk[i].dk_reads + p->dk[i].dk_writes) / 2;
if (fudged_busy > 100 * elapsed)
   p->dk[i].dk_time += 100 * elapsed;
p->dk[i].dk_time = fudged_busy;

# 
# Disk Write per Time
#
	if (NEWDISKGROUP(i)) {
    fprintf(fp, "\nDISKWRITES%s,%s", dskgrp(i),
			    LOOP);
		}
			disk_write = DKDELTA(dk_writes);
			fprintf(fp, ",%.1f", disk_write / elapsed);


  • "So" ähnlich könnte es aussehen:

Server Gehäuse

Raspi Software

  • Der Rasp empfängt über UART einen Datenstrom mit Festplatteninfo
  • Dies setzt er in die Steuersignale für die bunten LED um
  • kommt es zum Abbruch der Datenverbindung wird dieser "Status" auch angezeigt

UART Hardware

UART Setup

Server

  • USB Stecker wird automatisch erkannt
  • Unter /dev gibt es dann plotzlich einen neuen Device
minicom -b 115200 -D /dev/ttyUSB0 -o

Raspi

UART Programmierung

Server

Raspi

https://www.electronicwings.com/raspberry-pi/raspberry-pi-uart-communication-using-python-and-c

PC

Supermicro COM 2

PIN RTS <---> 1 kOhm <---> LED <---> GND
// rs232_to_led.c
// e.boelen 5 Mar 2002
// a small c program that will turn pin 4 on a rs232 port 'high'

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <sys/ioctl.h>

int main(int)
{
  int fd,dtr,i;
  char device[255] = "/dev/ttyS1"; // this is serial port 2 

  fd = open(device, O_RDWR);
  if (fd == -1) {
    char s[255];
    sprintf(s, "statserial: can't open device `%s'", device);
     perror(s);
   exit(1);
  }

  dtr=TIOCM_RTS;
  // Set RTS (pin 4)
  ioctl(fd, TIOCMBIS,&dtr); // low level io function
  sleep(60); // pause for 60 seconds
}

Aufgaben

(1)

Meilensteine

10.03.2020

  • Gehäuse beschafft, HDD Tray bestückt