DD-WRT : Connectez votre routeur DD-WRT à Constellation

Original publié sur: https://developer.myconstellation.io/package-library/dd-wrt/

Documentation en cours de rédaction …

Bonjour,

Sébastien aurais-tu les settings pour le package dd-wrt pour tester avec mon nouveau routeur ?

Merci

Ma config :

<package name="ddwrt">
  <settings>
    <setting key="ddwrtConfiguration">
      <content>
        <ddwrtConfiguration xmlns="urn:ddwrt">
          <devices>
            <device name="RouterAJS" uri="http://router.ajsinfo.loc" username="admin" password="xxxxxxx" numberOfCores="2">
              <status pushLANStatus="true" pushRouterStatus="true" pushWANStatus="true" interval="10000">
                <wirelessInterface name="WL0" interfaceName="wl0" />
                <wirelessInterface name="WL1" interfaceName="wl1" />
                <wirelessInterface name="WL2" interfaceName="wl2" />
              </status>
              <stats interval="2000">
                <interface name="WAN.Stats" interfaceName="vlan2" />
                <interface name="WL0.Stats" interfaceName="eth1" />
                <interface name="WL1.Stats" interfaceName="eth2" />
                <interface name="WL2.Stats" interfaceName="eth3" />
              </stats>
              <wirelessClients enable="true" interval="5000" />
            </device>
          </devices>
        </ddwrtConfiguration>
      </content>
    </setting>
  </settings>
</package>

Tu peux ajouter autant de “device” que tu souhaites, juste le “name” doit être distinct. Le mot de passe doit être encodé en base 64.
Ensuite tu peux activer :

  • les status pour l’interface LAN, Routeur, et WAN ainsi que les différentes interfaces wireless de ton choix.
  • Les stats des interfaces de ton choix
  • la liste des clients Wifi (pratique pour binder çà dans tes programmes pour savoir “qui” est à la maison par exemple)

Le package n’expose pas de MC mais par contre ils publient différents StateObject en fonction de ta config (Stats, Status, client Wifi, etc…).

A+

Salut,

Merci pour les infos.

J’ai cette erreur quand je rajoute seulement les clients wifi :

[MIDGARD_UI/DD-WRT] 06:51:56 : Unable to Push WirelessClients : System.FormatException: Le format de la chaîne d'entrée est incorrect.
   à System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal)
   à System.Number.ParseDecimal(String value, NumberStyles options, NumberFormatInfo numfmt)
   à System.Decimal.Parse(String s)
   à ddwrt.WirelessClientStatus.FeedProperties(Dictionary

2 datas) dans C:\Users\Sebastien\Documents@ Git\Skynet\ConstellationPackages\ddwrt\StateObjects\WirelessClientsStatus.cs:ligne 21
à ddwrt.WRTStatusFromProperties1.RequestStatus(DeviceElement device, Object[] args) dans C:\Users\Sebastien\Documents\@ Git\Skynet\ConstellationPackages\ddwrt\Base\WRTStatusFromProperties.cs:ligne 18 à ddwrt.Program.RequestAndPushStatus[TWRTStatus](DeviceElement device, String name, Object[] args) dans C:\Users\Sebastien\Documents\@ Git\Skynet\ConstellationPackages\ddwrt\Program.cs:ligne 121

HUm oui à mon avis un problème de culture quand je parse les nombres (genre le . ou , comme séparateur de décimal sur les OS US ou FR).

Tu peux me dire quelle est la culture de ton OS.

Et peux tu m’envoyer le resultat de l’appel de ton router /Status_Wireless.live.asp (exemple : http://ip_rout_ddwrt/Status_Wireless.live.asp).

Merci

Une idée du problème ?

J’ai vu une mise à jour, j’ai essayé mais j’ai :

[MIDGARD_UI/DD-WRT] 22:52:36 : Invalid password for device RouterAJS : L’entrée n’est pas une chaîne Base 64 valide, car elle contient un caractère non-Base 64, plus de deux caractères de remplissage ou un caractère non conforme parmi les caractè
res de remplissage.

J’ai effectivement un % dans mon mdp. Une idée du problème ?

Package mis à jour en 1.4 avec support des builds 30000+ de DD-WRT (je viens d’upgrader mon AP de r28000 à r31160).

Je te laisse retester :wink:

J’ai malheureusement la même erreur :frowning:

J’ai supprimé le % de mon mot de passe mais cela ne fonctionne toujours pas :

[MIDGARD_UI/DD-WRT] 00:28:56 : Invalid password for device RouterAJS : Longueur non valide pour un tableau de caractères Base 64 ou une chaîne.

Mon mot de passe contient majuscule, minuscule, chiffres et fait 14 caractères.

Hello,

Je reprends le sujet, l’attribut password demande le mdp du user DD-WRT et doit être encodé en base64.

Tu peux utiliser par exemple ce site : https://www.base64encode.org/

Car en principe c’est bien encodé en base 64 l’exception ci dessous ne doit pas se lever !

Salut,

Alors j’ai essayé de mettre mon mot de passe encodé avec ton site, voici les nouvelles erreurs avec la configuration de base :

[MIDGARD_UI/DD-WRT] 07:37:19 : Unable to Push WL1.Stats : System.Exception: Unable to parse interface stats. Raw: Thu Jul 6 07:37:17 CEST 2017 à ddwrt.StatInterface.RequestStatus(DeviceElement device, Object[] args) dans C:\Users\Sebastien\Documents\@ Git\Skynet\ConstellationPackages\ddwrt\StateObjects\StatInterface.cs:ligne 75 à ddwrt.Program.RequestAndPushStatus[TWRTStatus](DeviceElement device, String name, Object[] args) dans C:\Users\Sebastien\Documents\@ Git\Skynet\ConstellationPackages\ddwrt\Program.cs:ligne 121

J’ai pleins d’erreur du même genre. Je pense c’est lié à ma configuration qui n’est peut-être pas adaptée à mon routeur. Comment savoir les interfaces accessibles ?

Pour info voici la configuration :

<ddwrtConfiguration xmlns="urn:ddwrt">
    <devices>
        <device name="RouterAJS" uri="http://192.168.1.1" username="my_username" password="my_password" numberOfCores="2">
            <status pushLANStatus="true" pushRouterStatus="true" pushWANStatus="true" interval="10000">
                <wirelessInterface name="WL0" interfaceName="wl0" />
                <wirelessInterface name="WL1" interfaceName="wl1" />
                <wirelessInterface name="WL2" interfaceName="wl2" />
            </status>
            <stats interval="2000">
                <interface name="WAN.Stats" interfaceName="vlan2" />
                <interface name="WL0.Stats" interfaceName="eth1" />
                <interface name="WL1.Stats" interfaceName="eth2" />
                <interface name="WL2.Stats" interfaceName="eth3" />
            </stats>
            <wirelessClients enable="true" interval="5000" />
        </device>
    </devices>
</ddwrtConfiguration>

Dans ton cas ici il n’arrive pas à récupérer les données “WL1.Stats”. A mon avis tu n’as qu’une interface Wifi sur ton routeur ?

Il faudrait donc dans ce cas que tu supprimes les interfaces WL1 et WL2 des stats et des status.

La config ci-dessus était pour mon ancien routeur, un Netgear R8000 avec 3 interfaces Wireless.

Même en enlevant WL1 et WL2 j’ai toujours des erreurs :

[MIDGARD_UI/DD-WRT] 08:09:12 : Unable to Push WL0.Stats : System.Exception: Unable to parse interface stats. Raw: Tue Jul 11 08:09:09 CEST 2017 à ddwrt.StatInterface.RequestStatus(DeviceElement device, Object[] args) dans C:\Users\Sebastien\Documents\@ Git\Skynet\ConstellationPackages\ddwrt\StateObjects\StatInterface.cs:ligne 75 à ddwrt.Program.RequestAndPushStatus[TWRTStatus](DeviceElement device, String name, Object[] args) dans C:\Users\Sebastien\Documents\@ Git\Skynet\ConstellationPackages\ddwrt\Program.cs:ligne 121 [MIDGARD_UI/DD-WRT] 08:09:12 : Unable to Push WL0 : System.FormatException: Le format de la chaîne d'entrée est incorrect. à System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal) à System.Number.ParseDecimal(String value, NumberStyles options, NumberFormatInfo numfmt) à System.Decimal.Parse(String s, IFormatProvider provider) à ddwrt.WirelessStatus.FeedProperties(Dictionary`2 datas) dans C:\Users\Sebastien\Documents\@ Git\Skynet\ConstellationPackages\ddwrt\StateObjects\WirelessStatus.cs:ligne 54 à ddwrt.WRTStatusFromProperties`1.RequestStatus(DeviceElement device, Object[] args) dans C:\Users\Sebastien\Documents\@ Git\Skynet\ConstellationPackages\ddwrt\Base\WRTStatusFromProperties.cs:ligne 19 à ddwrt.WirelessStatus.RequestStatus(DeviceElement device, Object[] args) dans C:\Users\Sebastien\Documents\@ Git\Skynet\ConstellationPackages\ddwrt\StateObjects\WirelessStatus.cs:ligne 44 à ddwrt.Program.RequestAndPushStatus[TWRTStatus](DeviceElement device, String name, Object[] args) dans C:\Users\Sebastien\Documents\@ Git\Skynet\ConstellationPackages\ddwrt\Program.cs:ligne 121 [MIDGARD_UI/DD-WRT] 08:09:14 : Unable to Push WL0.Stats : System.Exception: Unable to parse interface stats. Raw: Tue Jul 11 08:09:11 CEST 2017 à ddwrt.StatInterface.RequestStatus(DeviceElement device, Object[] args) dans C:\Users\Sebastien\Documents\@ Git\Skynet\ConstellationPackages\ddwrt\StateObjects\StatInterface.cs:ligne 75 à ddwrt.Program.RequestAndPushStatus[TWRTStatus](DeviceElement device, String name, Object[] args) dans C:\Users\Sebastien\Documents\@ Git\Skynet\ConstellationPackages\ddwrt\Program.cs:ligne 121 [MIDGARD_UI/DD-WRT] 08:09:16 : Unable to Push WL0.Stats : System.Exception: Unable to parse interface stats. Raw: Tue Jul 11 08:09:13 CEST 2017 à ddwrt.StatInterface.RequestStatus(DeviceElement device, Object[] args) dans C:\Users\Sebastien\Documents\@ Git\Skynet\ConstellationPackages\ddwrt\StateObjects\StatInterface.cs:ligne 75 à ddwrt.Program.RequestAndPushStatus[TWRTStatus](DeviceElement device, String name, Object[] args) dans C:\Users\Sebastien\Documents\@ Git\Skynet\ConstellationPackages\ddwrt\Program.cs:ligne 121

Ma configuration :

<ddwrtConfiguration xmlns="urn:ddwrt">
    <devices>
        <device name="RouterAJS" uri="http://192.168.1.1" username="Hydro" password="abc" numberOfCores="2">
            <status pushLANStatus="true" pushRouterStatus="true" pushWANStatus="true" interval="10000">
                <wirelessInterface name="WL0" interfaceName="wl0" />
            </status>
            <stats interval="2000">
                <interface name="WAN.Stats" interfaceName="vlan2" />
                <interface name="WL0.Stats" interfaceName="eth1" />
            </stats>
            <wirelessClients enable="true" interval="5000" />
        </device>
    </devices>
</ddwrtConfiguration>

En effet le “Raw Message” est “Tue Jul 11 08:09:09 CEST 2017” ! Il n’arrive donc pas à trouver les infos ce qui lève l’erreur !

Tentes d’abord de désactiver les stats afin de tester la récupération des status.

Ensuite pour les stats, le package appelle l’URL http://<ton router>/fetchif.cgi?<interfaceName>.

Donc avec ton fichier de config ci-dessus, il va appeler les URLS : http://<ton router>/fetchif.cgi?vlan2 puis http://<ton router>/fetchif.cgi?eth1 car tu as déclaré deux interfaces nommées “WAN.Stats” (nom du SO) qui représente l’interface “vlan2” (nom de l’interface dans DD-WRT) et “WL0.Stats” pour l’interface “eth1”.

Mais pas sur que ton router ait exactement ces interfaces là ! Il faut donc les customiser : à la fois le nom de l’interface au sens StateObject et nom dans le systeme DD-WRT (vlanX, ethX ou brX).

Regardes donc dans la rubrique “Status” sur l’interface de DD-WRT ou bien en SSH/Telnet via la commande “ifconfig”.

Ensuite, avant de modifier ta config du package, testes l’URL “fetchif.cgi?” avec tes interfaces depuis ton navigateur pour être sûr que le package saura exploiter les infos!