Linux shell script zur Einrichtung geht nicht.

  • Ich wollte mir ein Script schreiben, das mir neue Shellies in das heimische WLAN bringt.

    Bisher habe ich geschafft, dass das Script erkennt, wenn ein neuer Shelly seinen AP anbietet, der Rechner sich dann an diesem AP anmeldet und einige Parameter setzt.

    Die Zeile 'curl http://192.168.33.1/settings/sta?ssid=abcd&ipv4_method=dhcp' wird übergeben und angezeigt. Bei der Übergabe des WLAN-Schlüssels scheitere ich. Ob ich es in den obigen Befehl integriere oder eine eigene Zeile schreibe ('curl http://192.168.33.1/settings/sta?key=xxxxxx') wird es nicht oder falsch übergeben und wenn ich dann aktiviere bin ich im Nirwana. Der AP ist abgeschaltet und im Heimnetz meldet er sich nicht an. Dann hilft nur Reset.


    Hat von euch schon jemand die Übergabe des key geschafft?

  • waki:

    Ich denke, Du musst ssid und key in einem einzigen Curl-Aufruf angeben. Gibst Du nur eins von beiden an, wird sofort der Verbindungsaufbau versucht, und der scheitert freilich, da die zweite Angabe ja noch fehlt.



    Folgendes funktioniert bei mir:


    Weiter sind für mich noch folgende GET-Parameter praktisch:

    Code
    settings_sntp_server='192.168.178.1'
    settings_mqtt_enable='true'
    settings_mqtt_user='mosquitto'
    settings_mqtt_pass='mosquitto'
    settings_mqtt_server='192.168.178.20:1883'
    
    url="http://$ip/settings?sntp_server=$settings_sntp_server&mqtt_enable=$settings_mqtt_enable&mqtt_user=$settings_mqtt_user&mqtt_pass=$settings_mqtt_pass&mqtt_server=$settings_mqtt_server"
    curl "$url"


    Die Cloud lässt sich auch gleich deaktivieren:

    Code
    settings_cloud_enabled='0'
    
    url="http://$ip/settings/cloud/?enabled=$settings_cloud_enabled"
    curl "$url"

    .

    Edited 6 times, last by Hiegeix7 ().

  • Der key hat keine Sonderzeichen, nur Buchstaben und eine Zahl.


    Auch das obige Script funktioniert bei mir nicht. Es verhält sich genauso wie bei mir mit einer Zeile.

    Der key wird ja auch nicht in der Antwort vom Shelly angezeigt. Das ist aber immer so, auch bei einer reinen Abfrage.

  • Also bei mir klappts, das heißt Du hast noch irgendwo einen Tippfehler. Bitte poste doch hier Dein Skript, mit unkenntlich gemachten Geheimnissen. Verwende dabei bitte im Editor den Button oben für Code </>

  • Da ich das Alles als Test auf einem Raspi probiere, muss ich nichts unkennlich machen. Ist bisher quick and dirty.

  • waki: Ich habe aus unseren gemeinsamen Erkenntnissen ein Skript gebastelt. Vielleicht ist es nützlich für Dich – für mich auf jeden Fall :-)


    .

    Edited once, last by Hiegeix7 ().

  • Da hast Du Dir ein geiles Script ausgedacht. Ich werde es gerne probieren.

    Ein Verständnisproblem habe ich noch:

    Wenn ich dhcp verwenden will und daher das erste Argument wegfällt, wie kann dann der Name vergeben werden, da er ja dann das erste Argument ist?


    Bei mir steht in Zeile 21 enabled=true. Das ist doch dasselbe wie enabled=1?

  • Ein Verständnisproblem habe ich noch:

    Wenn ich dhcp verwenden will und daher das erste Argument wegfällt, wie kann dann der Name vergeben werden, da er ja dann das erste Argument ist?

    Korrekt. Du kannst die beiden Argumente aber einfach vertauschen, indem du Zeilen 5 und 8 im Skript tauschst. Damit steht der Name an erster und die IP-Adresse an zweiter Stelle.

    Bei mir steht in Zeile 21 enabled=true. Das ist doch dasselbe wie enabled=1?

    Ich habe das jetzt nicht getestet, gehe aber davon aus, dass das keinen Unterschied macht.

    Die Parameternamen und die Parameterwerte habe ich in den Firefox-Web-Developer-Tools direkt aus dem Request geholt, den das Shelly-Webinterface absendet. Da stand dann halt enabled=true.

    Edited once, last by Hiegeix7 ().

  • Ich hatte gestern leider nicht viel Zeit um mich mit dem Script zu beschäftigen, konnte dann aber doch so langsam durchsteigen und es für mich anpassen.


    Wie beschrieben habe ich die Argumente getauscht und kann somit auch ohne statische IP arbeiten.


    Warum es bei mir anders ist, kann ich nicht sagen, aber ich musste die zwei Zeilen mit 'awk' um eine Zahl senken. "

    Code
    current_ssid="$(nmcli device "$wlan_device" list | grep '^\*' | awk '{print $3}')"
     auf 
    current_ssid="$(nmcli device "$wlan_device" list | grep '^\*' | awk '{print $2}')"
     usw.

    (Ich arbeite auf einem alten Netbook mit Lununtu 18.4.)


    Um die starke Netzbelastung zu verhindern, habe ich auch noch COIOT abgeschaltet. (Tip hier aus dem Forum)

    Code
    settings_coiot_enabled='0'
    
    # disable Coiot
    if [ "$settings_coiot_enabled" == '0' ]; then
      url="http://$shelly_init_ip/settings?coiot_enable=$settings_coiot_enabled"
      echo "$url"
      curl -s "$url" > /dev/null
    fi

    Die weiteren Anpassungen bei mir betreffen nur Rolladensteuerungen, da ich hier gerade eine größere Zahl einzurichten habe.


    Nochmals vielen Dank für die konstuktive Hilfe.

  • Warum es bei mir anders ist, kann ich nicht sagen, aber ich musste die zwei Zeilen mit 'awk' um eine Zahl senken. "

    Code
    current_ssid="$(nmcli device "$wlan_device" list | grep '^\*' | awk '{print $3}')"
     auf 
    current_ssid="$(nmcli device "$wlan_device" list | grep '^\*' | awk '{print $2}')"
     usw.


    Das Kommando nmcli liefert bei mir folgende Ausgabe:

    Code
    $ sudo nmcli device wifi list                                                                                                                                                          
    IN-USE  BSSID              SSID                    MODE   CHAN  RATE        SIGNAL  BARS  SECURITY
    *       C4:6E:1F:4F:CB:80  mySSID                  Infra  36    405 Mbit/s  74      ▂▄▆_  WPA2
            8E:AA:B5:43:1F:55  shelly1pm-8CAAB5431F55  Infra  6     54 Mbit/s   89      ▂▄▆█  --
    […]


    Sehen die Spalten bei Dir anders aus? Würde mich wundern…


    Zum Verständnis:

    Bei mir in Zeile 43 wählt grep '^\*' die Zeile mit dem * in der ersten Spalte, und awk '{print $3}' nimmt dann die SSID in Spalte 3.

    In Zeile 52 fehlt bei der ausgewählten Shelly-Zeile die erste Spalte mit dem *, daher muss dort mit awk Spalte 2 genommen werden.


    Aber Hauptsache, es funktioniert bei Dir. :-)

  • Und so schaut es bei mir aus:

    Code
    nmcli device wifi list
    IN-USE  SSID         MODE   CHAN  RATE       SIGNAL  BARS  SECURITY 
    *       AstaroGuest  Infra  8     65 Mbit/s  58      ▂▄▆_  WPA2     

    Übrigens muss ich auch vor der Abfrage immer einen Rescan machen, da der alte Hobel mir sonst nur den aktuellen Zugang anzeigt.

    Code
    nmcli device "$wlan_device" rescan
  • Ja, Deine Spalten sehen anders aus als bei mir, daher passt Deine Änderung. 👍

    Mit sudo in Zeile 52 benötige ich keinen Rescan. Die Unterschiede hängen bestimmt an der Version von nmcli. Dahingehend könnte man das Skript noch flexibler gestalten. Vielleicht mache ich das irgendwann, wenn ich die Muße habe. :-)


    Code
    $ nmcli --version
    nmcli tool, version 1.30.4-1.fc34


    Vielleicht kannst Du diesen Thread noch als „erledigt“ markieren.

  • Okay – hat mir jetzt keine Ruhe gelassen…


    Die Lösung mit den Versionsunterschieden umzugehen ist einfach: Man kann nmcli sagen, welche Spalten man sehen will:

    Code
    $ sudo nmcli -f IN-USE,SSID device wifi list
    IN-USE  SSID             
    *       mySSID
            shelly1pm-8CAAB5431F55

    .