PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : DSL-Modem vom Netz trennen automatisieren



Ohr4u|tux
05.09.06, 19:17
Hallo,

ich habe einen DSL-Anschluss bei einer langen Leitung zur Vermittlungsstelle. Dadurch ergibt sich eine hohe Dämpfung. Die Verbindung läuft zufriedenstellend bis auf einen Abbruch der Verbindung ca 1 mal pro Woche. Das Modem verliert dabei die Synchronisation mit der Vermittlungsstelle und ich muss den Netzstecker vom Modem für eine Minute ziehen, um wieder eine Verbindung zu bekommen.

Den "Netzstecker ziehen" würde ich gerne automatisieren. Ich habe an ein Zeit-Relais und eine Steuerung über serielle Schnittstelle gedacht. Ein Skript /etc/ppp/ip-down.d/ soll dann einfach die Schaltung auslösen.

Ich bin leider kein Experte auf dem Gebiet und wollte Fragen, ob vielleicht jemand von euch etwas ähnliches realisiert hat oder mir eine Hilfestellung geben könnte.

Vielen Dank! :)

abraham
06.09.06, 11:47
Wieso so kompliziert? Nimm eine elektronische Zeitschaltuhr, ein Relais mit 4(?) öffner und stell die Zeitschschaltuhr so ein, das einmal pro woche das Relais ein paar minuten die Kontakte öffnet.

Ohr4u|tux
06.09.06, 21:09
Wieso so kompliziert? Nimm eine elektronische Zeitschaltuhr, ein Relais mit 4(?) öffner und stell die Zeitschschaltuhr so ein, das einmal pro woche das Relais ein paar minuten die Kontakte öffnet.

Was ist, wenn das Modem die Synchronisation häufiger verliert? Ich denke mit meiner Idee bin ich auf der sicheren Seite.

abraham
07.09.06, 11:32
na dann stellst du die Zeitschaltuhr so ein, das jeden Tag die Leitung unterbrochen wird, und wenn alles nichts nützt, schlisst du noch ein Taster an, mit dem du das Relais manuel aktivieren kannst...

schwarzbarde
08.09.06, 06:19
Ich würde einfach einen cronjob einrichten, der täglich einmal (oder auch öfters) den pppd Daemon killt und dann neu startet. In Kombination mit 'nem Dyndns Service sollte man immer Verbindung zum Rechner haben können.

Hat zumindest bei mir funktioniert, bis ich keine Lust mehr auf Fernwartung hatte.

r00t043
08.09.06, 08:18
na dann stellst du die Zeitschaltuhr so ein, das jeden Tag die Leitung unterbrochen wird, und wenn alles nichts nützt, schlisst du noch ein Taster an, mit dem du das Relais manuel aktivieren kannst...

Wenn du einen schlechten Tag hast, verliert das Modem 5 Minuten nach dem du es neu gestartet hast die Syncronisation und wird erst wieder in 23h und 55min erneut neu gestartet.

Man kann Relaiskarten kaufen, oder selber bauen.
Wie man ein Relais an den Rechner bekommt, wurde hier im Forum schon oefters diskutiert. Das laeuft im Grunde darauf hinaus, das man einen Transistor (Ich wuerde einen IGFET nehmen, aber mit einem Bipolaren geht das auch) nimmt, da der Port nicht genug/bzw. ganz knapp so viel Strom liefern/aufnehmen kann, wie man fuer ein Relais brauch. Und dahinter dann gleich ein ganz normales Relais.

Die Software dafuer ist trivial, entsprechende Codefetzen habe ich hier auch schon gesehen.


Ich würde einfach einen cronjob einrichten, der täglich einmal (oder auch öfters) den pppd Daemon killt und dann neu startet. In Kombination mit 'nem Dyndns Service sollte man immer Verbindung zum Rechner haben können.

Hat zumindest bei mir funktioniert, bis ich keine Lust mehr auf Fernwartung hatte.

Das bringt nicht viel, wenn das Modem die Sync. verloren hat und sich nicht von selbst wieder synconisieren moechte.

abraham
08.09.06, 11:40
Wenn du einen schlechten Tag hast, verliert das Modem 5 Minuten nach dem du es neu gestartet hast die Syncronisation und wird erst wieder in 23h und 55min erneut neu gestartet.

Dafür ist dan der Taster gut.
Aber ich gibs ja zu, die Lösung über den Rechner ist cooler :ugly:

Ohr4u|tux
08.09.06, 11:55
Vor allem muss ich dann nicht immer in den Keller laufen. Außerdem habe ich kein Festnetztelefon mehr. Sollte es mal ausfallen und ich merke es nicht gleich, habe ich zwar meine Ruhe, muss aber nicht sein :ugly:

dvd666
16.09.06, 09:40
schliess doch einfach per transistor ein relay an den parallelen port an, ist am aller einfachsten.

dvd666
16.09.06, 09:47
#include <stdio.h>
#include <asm/io.h>

#define PORT 0x379


int main (int status)
{

outb(status,PORT);

}


mit
gcc -o set_parallel parallel.c
und dann
./set_parallel 1
setzt du pin 1 auf high.

evt solltest du aber beim start der systems das programm mit 0 ausfuehren, manchmal springen die ports ein wenig...

Ixot
19.09.06, 15:39
#include <stdio.h>
#include <asm/io.h>

#define PORT 0x379


int main (int status)
{

outb(status,PORT);

}


mit
gcc -o set_parallel parallel.c
und dann
./set_parallel 1
setzt du pin 1 auf high.

evt solltest du aber beim start der systems das programm mit 0 ausfuehren, manchmal springen die ports ein wenig...

Funktioniert das überhaupt? Die manpage zu den out*-Funktionen sagt deutlich:

You compile with -O or -O2 or similar. The functions are defined as
inline macros, and will not be substituted in without optimization
enabled, causing unresolved references at link time.

Und außerdem wird in status nur die Anzahl der Argumente, dh. 2 gespeichert. Was dein zweites Argument nun ist, bleibt dem Programm unklar.

Der Anfang der main-Funktion müsste demnach so aussehen:


[...]
#include <stdlib.h>

int main(int argc, char **argv)
{
int status;

if (argc < 2) {
exit(EXIT_FAILURE);
}
status = atoi(argv[1]);
[...]

dvd666
19.09.06, 18:34
ja mein gott, bin ich was durcheinandern gekommen mit der argumenten uebergabe...

aber funktionieren tuts, jedefalls vor 6 jahren.

Masta Pete
24.09.06, 23:17
Nachdem du nicht geschrieben hast, über welche schnittstelle dein Modem angeschlossen ist, hier mal noch eine idee von mir.

wenn es ein modem mit ethernet anschluss(zum pc) ist und es upnp unterstützt, kannst du über upnp auch die internet verbindung kappen bzw wiederherstellen.

lg
pete

Ohr4u|tux
27.09.06, 17:51
Das Modem ist via Ethernet verbunden. Ich glaube ich werde aus Kostengründen die Version mit Parallelport verwenden. Vielen Dank!

Ohr4u|tux
03.10.06, 15:55
Ich habe zum Test mal folgendes verwendet:


#include <stdio.h>
#include <asm/io.h>

#define PORT 0x379


int main (void)
{

outb(1,PORT);

}

Dann bekomme beim Ausführen des Programms ein:


Segmentation fault:ugly:

Ixot
03.10.06, 16:17
Du musst mittels ioperm(2) oder iopl(2) dem Kernel mitteilen, dass dein Prozess auf den Port zugreifen will.
Ich bin allerdings leider selbst nicht so fit was low level Port I/O angeht; durch die Manuals wirst du dich wohl selbst wühlen müssen. ;)

suck
03.10.06, 16:30
Ein Skript /etc/ppp/ip-down.d/ soll dann einfach die Schaltung auslösen.Du hast nur ein Moden und keinen Router, richtig? Sonst würde das Script nämlich gar nicht ausgeführt..

dvd666
03.10.06, 18:51
du musst leider root sein, da es ein direkter hardware aufruf ist

Ohr4u|tux
03.10.06, 21:33
Du hast nur ein Moden und keinen Router, richtig? Sonst würde das Script nämlich gar nicht ausgeführt..

Jop ich habe nur ein Modem. Skripte in /etc/ppp/ip-down.d/ werden doch als root ausgeführt!?

suck
03.10.06, 22:05
sofern der pppd als root läuft schon..

Ohr4u|tux
03.10.06, 22:44
root 1352 0.0 0.4 2360 1044 ? Ss 19:52 0:00 /usr/sbin/pppd call dsl-provider

;)