[Info] Update-Check über den neuen AVM-Service

aktuell installiert 7490 6.98-48630 / Abfragen lassen sich problemlos, auch wenn eine cfg vorhanden ist, auf der Komandozeile "überschreiben"

Code:
./juis_check -i Serial=123456789876 Name="Fritz" HW=185 Version=113.06.90-0 OEM=avm Lang=de Annex=egal Flag=egal Country=049 Public=1
juis_check: Neue Version gefunden: 113.06.93
URL=http://download.avm.de/fritzbox/fritzbox-7490/deutschland/fritz.os/FRITZ.Box_7490.xxxx
DelayDownload=2027
Code:
env -i Box=fritz.box ./juis_check -i Version=1.1.1-0
juis_check: Found newer version: 113.06.93
URL=http://download.avm.de/fritzbox/fritzbox-7490/deutschland/fritz.os/FRITZ.Box_7490.xxxx
DelayDownload=1080

oder IP-Client
Code:
./juis_check -i Serial=123456789876 Name="Fritz" HW=198 Version=1.1.1-0 OEM=avm Lang=de Annex=egal Flag=egal Country=049 Public=1
juis_check: Neue Version gefunden: 126.06.83
URL=http://ftp.avm.de/archive/fritz.box/fritzbox.3272/firmware/deutsch/FRITZ.Box_3272.xxxx
DelayDownload=992
Code:
env -i Box=192.168.10.2 ./juis_check -i Version=1.1.1-0
juis_check: Found newer version: 126.06.83
URL=http://ftp.avm.de/archive/fritz.box/fritzbox.3272/firmware/deutsch/FRITZ.Box_3272.xxxx
DelayDownload=578
 
Zuletzt bearbeitet:
Ich habe nicht GitHub verwendet, sondern das Skript im RAW-Format kopiert und in eine (Text)Datei gespeichert.
Mit dem Proggy habe ich mich bisher nicht auseinandergesetzt.
 
@PeterPawn: Alles klar, steht auch im Hilfetext, nur wer dass nicht gelesen hat, steht nach intuitivem Ausprobieren mit -i erstmal auf dem Schlauch.
...denn IP/DNS geht ja auch nicht mehr, so wie ohne -i ( Box=${1} ) .
...ich mein, auch wenn überhaupt keine .cfg existiert.

Die CC_LL LANG Geschichte hat sich bei mir nach erneuten Login in Wohlgefallen aufgelöst.
Hier noch eine Impression, mit Rückgabecode-Ausgabe...
Screenshot_2018-01-02-13-40-49.png
 
Zuletzt bearbeitet:
[...] das Skript im RAW-Format kopiert und in eine (Text)Datei gespeichert.
OK, das erklärt die Zeilenenden. Aber dann würde ich einfach auf dem Link (ich gehe jetzt mal davon aus, daß Du Windows verwendest) die rechte Maustaste drücken (Touch-Bedienung ist etwas anders, aber Du brauchst das Kontextmenü für den Link) und dort dann "Ziel speichern unter ..." (bzw. "Save Link As ...") wählen ... das speichert die Datei "im Original" und ansehen kann man sich die hinterher (wenn man sie kontrollieren will) ja immer noch - z.B. eben mit Notepad++.

Aber das von Dir beschriebene Vorgehen würde ich hier dann einfach nicht anwenden - das verringert parallel die Chancen auf eine Fehlbedienung, zumal auch unterschiedliche Zeichensätze in der Darstellung im Browser (UTF-8 vs. ASCII vs. ISO-8859-1, usw.) beim "copy & paste" zu weiteren Problemen führen können.

Ich habe das Skript mit UTF-8-Kodierung bereitgestellt und damit sind die Umlaute i.d.R. zwei Zeichen, von denen das erste ein 0xC3 ist - da bei einer Text-Datei nicht zwangsläufig der "mime type"-Standard des HTTP-Servers (aus dem der seinen "Content-Type"-Header generiert für Text-Dateien) mit dem Inhalt der Text-Datei übereinstimmen muß (meist kann man die Anzeige im Browser auch noch entsprechend umstellen), kann es auch zu heftigen Problemen führen, wenn der Browser das als "Western" (aka ISO-8859-1) anzeigt und man das dann über das Clipboard in eine andere Datei schafft.
 
Code:
sudo apt-get install dos2unix
....
sudo dos2unix FILE
 
...ich mein, auch wenn überhaupt keine .cfg existiert.
Ich mußte das einfach "weglassen" ... bei einem Aufruf mit
Code:
./juis_check 192.168.178.1 Box=192.168.178.2
wäre ich (bzw. das Skript) in einem Konflikt. Die implizite Konfigurationsdatei (für die Kompatibilität mit der alten Version) macht daraufhin dann ein
Code:
Box=192.168.178.1
shift
und im Anschluß wird diese Adresse durch das "Box=192.168.178.2" mit einer anderen überschrieben. Da wird man "wirr im Kopf" und die Festlegung einer Priorität macht das nicht wirklich besser.

Wer also die IP-Adresse beim Aufruf angeben will, der gibt sie als ersten (Positional-)Parameter (also nach eventuellen Optionen) an und nicht als "Box=..." dahinter. Die anderen Möglichkeiten (über das "globale" Environment mit "export" oder über das "lokale" (und nur für diesen Aufruf gültige) durch Angabe vor dem Kommando) bleiben davon ja unberührt ... aber zwei widersprüchliche Angaben in den Parametern des Skripts wären unschön.

Schon eine Form
Code:
./juis_check 192.168.178.1 HW=185 Version=113.06.92-12345 HW=225
ist nicht wirklich schön, aber da kann man noch sagen, daß eben von links nach rechts abgearbeitet und zugewiesen wird und das "Überschreiben" durch weitere Parameter kann auch durchaus mal nützlich sein, weil man beim automatischen Zusammenbau von Kommandozeilen frühere Zuweisungen desselben Werts nicht erst ausfiltern muß, sondern einfach seinen neuen Wert hinten anfügen kann.
 
Bei mir schaut das so aus:
Wenn keine .cfg existiert, klappt der Aufruf von ./juis_check fritz.box problemlos.

Mit existierender juis_check.cfg, die nur die Zeile Box=fritz.box enthält, funktioniert das leider nicht mehr:
./juis_check fritz.box führt zur Fehlermeldung Der Parameter 'fritz.box' ist unbekannt.
./juis_check -i fritz.box
oder ./juis_check -i Box=fritz.box führt zur Fehlermeldung IP-Adresse oder der DNS-Name der FRITZ!Box fehlt in den Parametern.

Kann es sein, daß bei existierender .cfg-Datei alle per Kommandozeile übergebenen Parameter ignoriert werden?
 
Kann es sein, daß bei existierender .cfg-Datei alle per Kommandozeile übergebenen Parameter ignoriert werden?
Nein, schau mal in meine Signatur - new_juc_alpha-0.0.1 - da kannst Du via
Code:
./7490 Parameter=xx
problemlos die in der config bzw aus der jason erhaltenen/übernommenen Variablen überschreiben oder wie in #201 gezeigt alles auf der Console mitschicken
 
Sorry, ich wollte eine Antwort für das Script, das PeterPawn erstellt hat.
Links auf irgendwelche Goggel-Verzeichnisse klicke ich nicht an!
 
Aber #201 incl. dem CodeTag aus #208, erklärt und zeigt doch eig. das was Du fragst, oder?

Code:
nano juis_check.cfg
Box=fritz.box

freetz@freetz-linux:~/YourFritz-new/YourFritz/juis$ ./juis_check
juis_check: Es wurde keine neue Version gefunden, die Prüfung erfolgte ausgehend von der Version '113.06.98-48630'.
freetz@freetz-linux:~/YourFritz-new/YourFritz/juis$ ./juis_check fritz.box
juis_check: Der Parameter 'fritz.box' ist unbekannt.
freetz@freetz-linux:~/YourFritz-new/YourFritz/juis$ ./juis_check -i fritz.box
juis_check: Die IP-Adresse oder der DNS-Name der FRITZ!Box fehlt in den Parametern.
freetz@freetz-linux:~/YourFritz-new/YourFritz/juis$ ./juis_check -i Box=fritz.box
juis_check: Die IP-Adresse oder der DNS-Name der FRITZ!Box fehlt in den Parametern.

Der Aufruf erfolgt dann ohne weitere Angaben " ./juis_check "
 
...es nützt mir nichts, wenn du die Fehlermeldungen wiederholst ohne eine Lösung aufzuzeigen!

Ich stelle die Frage deshalb nochmal anders:
Wieso führt der Aufruf von ./juis_check 192.168.178.1 zu einer Fehlermeldung, wenn die Datei juis_check.cfg (egal mit welchem Inhalt) existiert?
Ohne existierende .cfg funktioniert dieser Aufruf problemlos und zeigt das gewünschte Ergebnis.
 
...es nützt mir nichts, wenn du die Fehlermeldungen wiederholst ohne eine Lösung aufzuzeigen!
./juis_check
juis_check: Es wurde keine neue Version gefunden, die Prüfung erfolgte ausgehend von der Version '113.06.98-48630'.

=====
Wieso führt der Aufruf von ./juis_check 192.168.178.1 zu einer Fehlermeldung, wenn die Datei juis_check.cfg (egal mit welchem Inhalt) existiert?

Code:
env -i Box=fritz.box ./juis_check
juis_check: No newer version found, check was made with source version '113.06.98-48630'.

Code:
nano juis_check.cfg
Box=fritz.box

https://github.com/PeterPawn/YourFritz/blob/master/juis/README_de.md schrieb:
Box
dieser Wert kann nicht durch die Angabe als Name/Wert-Paar auf der Kommandozeile festgelegt werden, aber es ist möglich, ihn bereits vor dem Start über das Shell-Environment zu setzen oder eben über eine Zuweisung in einer Konfigurationsdatei; aber sollten nach der Verarbeitung der Name/Wert-Paare von der Kommandozeile und nach dem Ausführen der Anweisungen in einer Konfigurationsdatei noch Einstellungen fehlen, die für den SOAP-Request benötigt werden, so muss diese Variable den DNS-Namen oder die IP-Adresse der FRITZ!Box enthalten, von der die fehlenden Angaben gelesen werden sollen (aus der Datei juis_boxinfo.xml oder, wenn diese Datei in älterer Firmware nicht existieren sollte, aus der Datei jason_boxinfo.xml)

Anderenfalls tut es mir Leid, dass ich das Problem nicht verstehe aber Peter wirds sicher "richten" :)
 
Mit existierender juis_check.cfg, die nur die Zeile Box=fritz.box enthält, funktioniert das leider nicht mehr:
./juis_check fritz.box führt zur Fehlermeldung Der Parameter 'fritz.box' ist unbekannt.
[...]
Kann es sein, daß bei existierender .cfg-Datei alle per Kommandozeile übergebenen Parameter ignoriert werden?
Nein, aber die verwendete Konfigurationsdatei enthält ja auch die feste Zuweisung in der Form "Box=fritz.box" (und wohl kein "shift", was dann das "fritz.box" vom Aufruf wieder aus dem Weg schaffen würde). Damit bleibt auch nach der Verarbeitung der Konfigurationsdatei der "positional parameter" mit "fritz.box" erhalten und der wird dann im Anschluß eben "verarbeitet" - hat aber kein Format, was das Skript erkennen könnte.

Normalerweise sollte man das "fritz.box" jetzt einfach weglassen beim Aufruf oder eben noch das "shift" in die Konfigurationdatei packen (wobei dann die Angabe beim Aufruf auch sinnlos wäre) ... wenn auf der anderen Seite die Konfigurationsdatei fehlt, wäre der Aufruf mit "fritz.box" wieder richtig, weil dann (neu in dieser Version, einfach als "Komfort", damit man das mit dem Download auf eine einzelne Datei (nämlich das Skript selbst) beschränken kann und es trotzdem wie in der alten Version mit dem Aufruf unter Angabe der IP-Adresse oder des Namens weiterhin funktioniert) eine "interne" Konfigurationsdatei zum Einsatz kommt, die eben "Box" anhand des ersten "positional parameters" (das wäre dann ja "$1", nachdem die Optionen verarbeitet und aus dem Weg sind) zuweist und diesen ersten Parameter dann entfernt.

Die beiden letzten Fälle aus Deinem Beitrag sind der Tatsache geschuldet, daß da zweimal durch die Parameter gegangen wird ... einmal vor der Kontrolle, welche Variablen noch fehlen und damit auch vor dem Auslesen der fehlenden Werte aus der Box (da wird für falsche Parameter noch keine Fehlermeldung ausgegeben - wobei hier beide Formen "fritz.box" und "Box=fritz.box" falsch wären) und noch einmal, nachdem die Werte aus der Box gesetzt wurden, weil Angaben auf der Kommandozeile ja die gelesenen Werte überschreiben sollen. Bei diesem zweiten Durchlauf würden dann auch fehlerhafte Angaben "bemängelt" (z.B. auch ein "version=" mit kleinem "v") ... in diesem Fall kommt es aber gar nicht bis zu dieser Stelle, weil keine der beiden Formen für eine Zuweisung an "Box" verwendet werden kann. Der "positional parameter" wird nicht wirksam, weil die (implizite) Konfigurationsdatei mit ihrem "Box=$1; shift" wegen des "-i" nicht abgearbeitet wird und die Form "Box=fritz.box" ist - als Parameter beim Aufruf - gar nicht erst erlaubt ... siehe die Antworten/Erklärungen an @koyaanisqatsi. Hier könnte man das "Box=fritz.box" jetzt eben vor den Aufruf setzen, dann wird daraus (für die Dauer der Abarbeitung des Skripts) eine Environment-Variable und die ist dann in dem Moment auch gesetzt, wo Daten aus der Box ausgelesen werden sollen.

Die unterschiedlichen Möglichkeiten der Angabe von Parametern und die Vermischung von Shell-Variablen und Einträgen im Shell-Environment (auch noch die Frage, ob die temporär erfolgen oder dauerhaft, wie beim Einsatz von "export") sind sicherlich manchmal verwirrend, aber durchaus dem POSIX-Standard geschuldet und hier von mir auch absichtlich in Kauf genommen, weil man damit auf vielen verschiedenen Wegen die Daten bereitstellen kann und damit eine flexiblere Nutzung möglich wird. Schon das Versehen der internen Variablen mit einem Präfix im Namen würde das sicherlich "entschärfen" können ... aber ich will ohnehin in dem Beitrag zur neuen Version noch einiges ergänzen und da werden solche "Spezialfälle" und die dazugehörigen Erläuterungen sicherlich auch noch ihren Platz finden.
 
Vielen Dank für diese verständliche Erklärung!
Leider hatte ich die "shift"-Möglichkeit als Fehlerursache nicht in Betracht gezogen. Dass das mit dem "shift" noch funktioniert/notwendig ist, hatte ich erst jetzt nach Lesen des Script-Quellcodes gesehen.

Wenn ich (unter der Win10-Ubuntu-Bash) das Script mit ./juis_check -h aufrufe, bekomme ich leider nur einen fast unlesbaren Hilfetext, der nur durch Drücken der Taste "q" verlassen werden kann.
Das sieht dann so aus, wie in dem Beitrag #182 von @koyaanisqatsi:
75731-d41fa099188138042343f4fad5954fed.jpg
 
Zuletzt bearbeitet:
@Joe_57:
Bei mir funktioniert das in der W10-Bash mit dem "less", das hat bei mir folgende Version:
Code:
peh@Bragi:~$ less --version
less 458 (GNU regular expressions)
Copyright (C) 1984-2012 Mark Nudelman

less comes with NO WARRANTY, to the extent permitted by law.
For information about the terms of redistribution,
see the file named README in the less distribution.
Homepage: http://www.greenwoodsoftware.com/less
peh@Bragi:~$
Wenn das "fast unlesbar" sich auf die falsche Darstellung der Umlaute beschränkt, ist es das (irgendwo vor kurzem erläuterte) Problem mit den Zeichensätzen, denn die deutschen Meldungen verwenden Umlaute und das gesamte Skript ist in UTF-8 kodiert (was nur bei den Umlauten und ggf. noch "ß" einen Unterschied macht).

Wenn das "less" keine ANSI-Sequenzen versteht (dann gibt es irgendwelche eckigen Klammern mit "m" in unmittelbarer Nachbarschaft), dann funktioniert halt die Darstellung in "fett" oder "unterstrichen" nicht richtig, was aber bei mir auch in der W10-Bash klappt (vielleicht nicht deutlich sichtbar, aber die Zeile in der Mitte ist "fett" - und die Steuersequenzen werden nicht dargestellt stattdessen):
W10-less.PNG
Ìch installiere die "bash" natürlich nicht alle Nase lang neu unter Windows und das "Kolorieren" von Ausgaben ist ja auch noch bei anderen Programmen Usus (z.B. beim Git-CLI-Client, da auch noch i.V.m. "less") - gut möglich, daß ich da irgendetwas umgestellt habe ... was, weiß ich aber nicht mehr.

Für mich ist halt ein "less" mit funktionierenden ANSI-Sequenzen der Normalfall - ich weiß aber auch, daß es das "less" aus der BusyBox nicht kann (wobei das nur eine Frage ist, wie man die Daten dort ausgibt - "raw" oder "cooked").
 
Danke Peter, less hat bei mir auch die selbe Version wie bei dir.
Da werde ich mal nach einer Lösung bzgl. des Zeichensatzes im neiner Win10-Bash suchen.

Warum aber lässt sich die Hilfe-Darstellung nur mit einem "q" beenden?
Welcher Editor wird denn da aufgerufen?

Hab selber raugefunden, daß das die "less"-Ausgabedarstellung ist.
 
Zuletzt bearbeitet:
@eisbaerin:
Die jeweils nachgeschobenen Fragen bzgl. "wget" hatte ich bisher nie gesehen ... aber die Antwort ist leicht:

Weil "wget" ein weiteres Programm als "Voraussetzung" wäre und vielleicht dank BusyBox auf den FRITZ!Boxen meist installiert sein mag (auch weil AVM damit selbst gerne arbeitet), aber in der "full version" (die auch lange nicht überall automatisch vorhanden ist) gibt es:

- (a) schon erhebliche Unterschiede (aktuell ist m.W. 1.19.2, viele Distributionen kommen aber noch mit einer alten 1.16.x daher, die sogar gerne mal Probleme mit neueren (und besseren) TLS-Settings auf irgendwelchen Servern hat - die W10-Bash kommt iirc sogar mit einer 1.15.x daher) und

- (b) reicht es spätestens für die AVM-Server nicht mehr (zumindest nicht bei der BusyBox-Version, die kein POST kennt) und daher dann

- (c) der Teil mit dem Behandeln einer HTTP-Verbindung eben ohnehin noch bzw. schon implementiert war/ist/sein muß, wenn man auf den AVM-Server ohne weitere "Zusatzprogramme" (von einem "richtigen" "wget" über "curl" bis was weiß ich) zugreifen will

Da muß man sich nicht noch mit "wget" und möglichen Unterschieden in der Implementierung und den Optionen herumschlagen - vor allem verstehe ich nicht, was es Dir jetzt bringen würde, wenn das "wget" zur FRITZ!Box funktionieren würde, aber das "nc" zum AVM-Server dann auch wieder nicht. Das Endergebnis wäre dasselbe, Du kämst nur ein paar wenige Schritte weiter, aber nie zum Ziel.

Oder geht das "nc" dann später mit den AVM-Servern, wenn Du davor in "device_read()" das "tcp_read()" durch "wget" ersetzt hast (-O als Option nicht vergessen - die Ausgabe muß in "$out" landen - und das "printf" muß dann natürlich ebenso weg, wie ein "-q" als Option sinnvoll wäre, wenn man STDERR nicht nach /dev/null umleiten will)?
 
OK, das erklärt die Zeilenenden. Aber dann würde ich einfach auf dem Link (ich gehe jetzt mal davon aus, daß Du Windows verwendest) die rechte Maustaste drücken (Touch-Bedienung ist etwas anders, aber Du brauchst das Kontextmenü für den Link) und dort dann "Ziel speichern unter ..." (bzw. "Save Link As ...") wählen ... das speichert die Datei "im Original" und ansehen kann man sich die hinterher (wenn man sie kontrollieren will) ja immer noch - z.B. eben mit Notepad++.

Aber das von Dir beschriebene Vorgehen würde ich hier dann einfach nicht anwenden - das verringert parallel die Chancen auf eine Fehlbedienung, zumal auch unterschiedliche Zeichensätze in der Darstellung im Browser (UTF-8 vs. ASCII vs. ISO-8859-1, usw.) beim "copy & paste" zu weiteren Problemen führen können.

Ich habe das Skript mit UTF-8-Kodierung bereitgestellt und damit sind die Umlaute i.d.R. zwei Zeichen, von denen das erste ein 0xC3 ist - da bei einer Text-Datei nicht zwangsläufig der "mime type"-Standard des HTTP-Servers (aus dem der seinen "Content-Type"-Header generiert für Text-Dateien) mit dem Inhalt der Text-Datei übereinstimmen muß (meist kann man die Anzeige im Browser auch noch entsprechend umstellen), kann es auch zu heftigen Problemen führen, wenn der Browser das als "Western" (aka ISO-8859-1) anzeigt und man das dann über das Clipboard in eine andere Datei schafft.

Hallo PeterPawn,
Danke für den Tipp.
Mit "Save as" läuft das Skript.
Irgendetwas an den Zeichensätzen ist unterschiedlich.
 
Sodele ... ich habe fertig, wie ein älterer Italiener sagen würde.

Ich habe die Beschreibung noch ergänzt (mehr geht ohnehin nicht mehr, ich müßte anderes löschen, weil die 50k Zeichen erreicht sind) und in #1 entsprechend verlinkt ... beim Beschreiben habe ich noch ein kleineres Problem (mit "empty"-Values, ohne "Box" und mit "-i" als Option) gefunden und die notwendige Änderung eingecheckt.

Damit wäre das für mich erst einmal erledigt, es sei denn, es wären weitere Fehler zu korrigieren ... inhaltliche Änderungen sind nicht mehr geplant. Mit den erweiterten Debug-Ausgaben fällt es leichter (zumindest mir ging das so), die notwendigen Parameter für eine erfolgreiche Abfrage zu ermitteln, auch wenn man das Gerät nicht im Zugriff hat für das Auslesen der richtigen Werte.

Die Funktion, darüber auch DECT-Firmware (bzw. alles, was AVM da bereitstellt, auch für die eigenen PLC-Devices) zu finden, macht nicht so richtig viel Sinn ... die Kombination mit der Box-Firmware spielt häufig eine Rolle und das Auslesen von Parametern für die korrekte Abfrage funktioniert direkt im Netzwerk weder für DECT-Geräte noch für PLC-Adapter (soweit ich weiß, ich habe nur welche von Netgear und Devolo, keine von AVM und selbst die liegen nur herum bei mir). Dazu, wie AVM das selbst in der Firmware gelöst hat (und was man mit Shell-Zugang auch entsprechend nachnutzen könnte), habe ich weiter vorne mal etwas geschrieben ... aber ein passendes Skript dafür macht (zumindest in meinen Augen) einfach keinen Sinn.
 
F*ck ... wieder mal macht MacOS X Sperenzchen und muß aus der Reihe tanzen. Dort gibt es kein "procfs" (wußte ich zwar, habe ich aber verdrängt) und auch das "realpath" - was ja nur zum "Aufhübschen" der Ausgabe von Dateinamen verwendet wird, damit dort ein absoluter Name steht und kein "traversal monster" - fehlt und kann auch aus den GNU CoreUtils nur nachinstalliert werden, wenn man auf Homebrew oder MacPorts zurückgreift. Das widerspricht dann irgendwie dem "so wenige Sonderwünsche wie möglich".

Also habe ich zum Test mal einen neuen Branch aufgemacht (juis_macosx) und dort ein paar Änderungen vorgenommen, die das hoffentlich unter MacOS X dann doch noch laufen lassen, ohne daß Zusatzprogramme installiert werden müssen (da dort i.d.R. eine "bash" vorhanden ist, wird auch kein "nc" gebraucht).

Mein MacMini, mit dem ich so etwas früher immer getestet habe, läuft inzwischen mit Tumbleweed - ich kann also MacOS X als Umgebung nicht mehr selbst testen. Sollte hier jemand mit passender Hardware und passendem OS mitlesen, wäre ich für einen Test unter 10.x (das sollte sich nicht ständig ändern bei Updates von Apple) dankbar und ggf. eine Erfolgs- oder Fehlermeldung.
 

Zurzeit aktive Besucher

Keine Mitglieder online.

Statistik des Forums

Themen
246,146
Beiträge
2,246,880
Mitglieder
373,654
Neuestes Mitglied
hstoff
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.