Synology DS215j und DUOFERNSTICK

Begonnen von Lippie, 02 Dezember 2018, 13:23:31

Vorheriges Thema - Nächstes Thema

Lippie

Hallo,

auf der Suche, einen DUOFERNSTICK auf meiner DS zum Laufen zu bekommen, habe ich einiges erstellen/einstellen müssen.
Da ich alles aus unterschiedlichen Quellen zusammensuchen musste, hier eine Zusammenfassung:

erforderliches Perl-Modul "Device::SerialPort":
- hier hat mir der Weg über https://wiki.fhem.de/wiki/Synology_Diskstation mittels iPKGui und anschließendem kopieren der relevanten Dateien in die eigentliche Perl-Installation am besten geholfen.

weitere erforderliche Module:

   /lib/modules/usbserial.ko
   /lib/modules/ftdi_sio.ko

diese sind bereits auf dem NAS unter /lib/modules/ abgelegt.

ich lasse sie mittels folgendem Start-Script, abgelegt unter "/volume1/@optware/etc/init.d/S99startupUsbserialftdi.sh", laden:

#! /bin/sh
### BEGIN INIT INFO
# Provides:          Startup-Script
# Required-Start:   
# Required-Stop:     
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: includes modules usbserial.ko and ftdi_sio.ko
# Description:       includes modules usbserial.ko and ftdi_sio.ko and changes rights
### END INIT INFO
# Author: no

# Aktionen
case "$1" in
    start)
       
        insmod /lib/modules/usbserial.ko
insmod /lib/modules/ftdi_sio.ko
chmod 777 /lib/modules/usbserial.ko
chmod 777 /lib/modules/ftdi_sio.ko
        ;;
    stop)

        ;;
    restart)
       
        ;;
esac

exit 0


Damit wird beim Anschluss des USB-Sticks zum Beispiel "/dev/ttyUSB0" angelegt, was DUOFERNSTICK zur Steuerung benötigt.
Hier ist nun noch wichtig, dass der user fhem ausreichende Rechte auf "/dev/ttyUSB0" hat. Das kann man bestimmt irgendwo einstellen,
da meine Linux-Kenntnisse recht mager sind, habe ich einen CronJob "/volume1/FHEM/Scripts/ttyUSBxy.sh" angelegt, der die Rechte setzt, falls notwendig:

#!/bin/bash
#
#
nfile='/dev/ttyUSB0'
#nfile='/dev/ttyS1'
srights='crw-rw-rw-'
nrights='666'

if erg="$(ls -l $nfile)" # existiert etwas mit dem Namen von $file?
then
  echo "$nfile existiert"
  rights=${erg:0:10}
  echo "folgende Rechte: $rights"
  if [ "$rights" == "$srights" ]
  then
    echo "Rechte passen bereits"
  else
    chmod $nrights $nfile
    erg2="$(ls -l $nfile)"
    echo "Rechte geändert in: $erg2"
  fi
fi

exit 0;


Über eine SSH-Konsole kann man mit folgenden Befehlen alle relevanten Informationen zur Konfiguration des DUOFERNSTICK-Moduls herausfinden:





dmesgSystemlog beinhaltet die Zuweisung des ttyUSBxy zum USB-Port des NAS
lsusbListe der USB-Ports mit Info zu den angeschlossenen Geräten
"ls -l /dev/*" oder  "ls -l /dev/ttyUSB0"Abfrage der verfügbaren Schnittstellen und der gesetzten Berechtigungen

vielleicht hilf es ja dem einen oder anderen Suchenden weiter :-)

Folgende offene Punkte habe ich noch:

- nach einem "shutdown restart" sagt der DUOFERNSTICK zwar noch, dass er eine Verbindung hat, jedoch gehen keine Befehle mehr raus und es wird auch nichts mehr empfangen. Es hilft nur noch ein Neustart des NAS.
- Ersetzen des CronJobs durch eine generelle Berechtigungs-Einstellung für user auf "/dev/ttyUSBxy"

Beste Grüße
Lippie

Lippie

Hallo Zusammen,

habe nun herausgefunden, wie ich die Verbindung zum USB-Stick nach Neustart von FHEM wieder herstellen kann:

zum bereits vorgestellten CronJob habe ich zwei weitere angelegt. Einer für "/sys/bus/usb/drivers/usb/unbind" und einer für "/sys/bus/usb/drivers/usb/bind".

Hier das Script für "/sys/bus/usb/drivers/usb/unbind":

#!/bin/bash
#
#
nfile='/sys/bus/usb/drivers/usb/unbind'
srights='-w--w----'
sgroup='users'
nrights='220'

# --w------- 1 root root 4096 Jun 28 19:58 unbind

if erg="$(ls -l $nfile)" # existiert etwas mit dem Namen von $file?
then
  echo "$nfile existiert"
  rights=${erg:1:9}
  group="$(cut -d' ' -f4 <<<"$erg")"
  user="$(cut -d' ' -f3 <<<"$erg")"
  echo "folgende Rechte: $rights"
  echo "folgender User: $user"
  echo "folgende Group: $group"
  if [ "$rights" == "$srights" ]
  then
    echo "Rechte passen bereits"
  else
    chmod $nrights $nfile
    erg2="$(ls -l $nfile)"
    echo "Rechte geändert in: $erg2"
  fi
  if [ "$group" == "$sgroup" ]
  then
    echo "Group passt bereits"
  else
    chown $user:$sgroup $nfile
    erg2="$(ls -l $nfile)"
    echo "Rechte geändert in: $erg2"
  fi
fi

exit 0;


Damit stelle ich sicher, dass die Gruppe users darauf schreibend zugreifen kann.
Dieses Script nutze ich inzwischen auch für "/dev/ttyUSB0", jedoch mit lese- und schreib-Rechten.

Damit kann ich nun aus FHEM heraus folgende Systembefehle mittels at-Modul "ReconnectUSB" ausführen:


+*00:00:01 {

   my $actiontype  = ReadingsVal("ReconnectUSB","actiontype","done");
   my $time        = time();
   my $TimeString  = strftime("%Y.%m.%d %H:%M:%S",localtime($time));
   my $bind_path   = "/sys/bus/usb/drivers/usb/bind";
   my $unbind_path = "/sys/bus/usb/drivers/usb/unbind";
   my $usb_port    = "1-1";   

   if($actiontype eq "done"){
      system "echo -n \"$usb_port\" > $unbind_path";
      fhem("setreading ReconnectUSB actiontype bind");
      print "$TimeString ReconnectUSB: USB-Port: $usb_port  deaktiviert. \n";
   }else{
      system "echo -n \"$usb_port\" > $bind_path";
      fhem("setreading ReconnectUSB actiontype done");
      fhem("set ReconnectUSB inactive");
      print "$TimeString ReconnectUSB: USB-Port: $usb_port  reinitialisiert. \n";
   }
}


Im Anschluss sollten alle USB-Geräte am USB-Port 1-1  neu bereit stehen.
Für andere USB-Ports einfach den Port-Parameter ändern.

Viele Grüße.