Ankündigung

Einklappen
Keine Ankündigung bisher.

Logik - Tools

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    [callidomus] Logik - Tools

    Hi,

    Code:
    cd.tools.fetch_url(URL, [username=BENUTZER], [password=PASSWORT], [timeout=SEKUNDEN]): liefert die URL zurück. Optional kann ein BENUTZER/PASSWORT und oder Timeout angegeben werden.
    Was macht diese Funktion den genau? Die Beschreibung finde ich einwenig zu spärlich. Ich hätte gedacht das der Rückgabewert ein String ist mit dem inhalt der url. Laut Fehlermeldung wenn ich was mit dem Rückgabewert mache ist es aber ein bool.

    Das ist der code
    [CODE
    #Daten von WR Runterladen
    #content = "1455356432;24214;26711;9590;9560;9595;142;151;372 ;376;361;356;3210;4";
    content = cd.tools.fetch_url( "http:/192.168.102.33/realtime.csv")
    data = content.split(";", 14 )
    [/CODE]

    das ist die Fehlermeldung
    Code:
    2016-07-06 00:26:48 ERROR    Powador12TL3 Logic: Powador12TL3, File: /data/callidomus/local/logics/Powador12TL3.py, Line: 4, Method: <module>, Exception: 'bool' object has no attribute 'split'
    Traceback (most recent call last):
      File "/mfs/core/lib/scheduler.py", line 398, in _task
        exec(obj.bytecode, _globals)
      File "/data/callidomus/local/logics/Powador12TL3.py", line 4, in <module>
        data = content.split(";", 14 )
    AttributeError: 'bool' object has no attribute 'split'

    Viele Grüsse
    Jürgen
    Zuletzt geändert von heckmannju; 05.07.2016, 23:28.

    #2
    Hallo Jürgen,

    ja, es liefert den Inhalt einer Webseite zurück. Was erwartest Du denn noch als Beschreibung?
    Ich denke das Problem wird bei Dir durch: http:/ verursacht. Da fehlt ein /

    Bis bald

    Marcus

    Kommentar


      #3
      Hi Markus,

      Danke das fehlen des / wird es wohl sein.

      zu deiner Frage

      Was erwartest Du denn noch als Beschreibung?
      das ist der Text der hilfe.

      cd.tools.fetch_url(URL, [username=BENUTZER], [password=PASSWORT], [timeout=SEKUNDEN]): liefert die URL zurück. Optional kann ein BENUTZER/PASSWORT und oder Timeout angegeben werden.

      Ich würde erwarten das gesagt wird was genau die Funktion den zurückliefert. String, int, Array was auch immer "liefert die URL zurück" sagt mir recht wenig. Und ob eine Exeption im Fehlerfall fliegt. Das hätte ich bei meinem Fehler eigentlich erwartet.

      Ein kurzes Beispiel zur verwendung vielleicht auch noch hilfreich. Du solltes bedenken das nicht alle Phyton Gurus sein können.

      Warum kommt dann eigenlich ein bool im Falle zurück wenn ein / fehlt?

      Viele Grüsse
      Jürgen
      Zuletzt geändert von heckmannju; 06.07.2016, 15:00.

      Kommentar


        #4
        Hallo Jürgen,

        in dem Logfile, auch auf der Status Seite, steht eine Warnung kurz vor dem Error den Du oben gepostet hast. Da steht das er eine Problem hat die URL zu holen.
        Es ist wirklich hilfreich das Logfile anzusehen, wenn man ein Problem hat. Die Errors und Warnings sind besonders wichtig.

        Als Rückgabe kommt ein Bool, da ein leerer String falsch wäre. Dann könntest Du einen Fehler nicht entdecken.
        Ich denke ein None würde hier aber noch besser passen. Mal überlegen.

        Bis bald

        Marcus

        Kommentar


          #5
          Zitat von callidomus Beitrag anzeigen
          Als Rückgabe kommt ein Bool, da ein leerer String falsch wäre. Dann könntest Du einen Fehler nicht entdecken.
          Ich denke ein None würde hier aber noch besser passen. Mal überlegen.
          Nein zwei unterschiedliche Typen zurückgeben ist schlecht! Für Fehler gibt es doch exceptions.

          Die Warnung hab ich gesehen aber auch nicht verstanden und da ein bool zurückkommen habe statt einem String oder Byte array bin ich von einem Fehler in deiner Funktion ausgegangen.
          Zuletzt geändert von heckmannju; 06.07.2016, 20:32.

          Kommentar


            #6
            Perl-style halt ;-)

            Kommentar


              #7
              Zitat von trollvottel Beitrag anzeigen
              Perl-style halt ;-)
              Was ist Perl Style?

              Kommentar


                #8
                Ach mit Perl wird sowas gerne gemacht, dass eine Funktion kontextabhängig unterschiedliche Datentypen zurückgibt. In Python eigentlich nicht.

                Kommentar


                  #9
                  Hallo Jürgen,

                  da habe ich meine Benutzer wohl unterschätzt.

                  Eine Exception weitergeben ist in der Tat das Beste.

                  In Testing wird diese Exception geworfen.

                  Bis bald

                  Marcus

                  Kommentar


                    #10
                    Hi,
                    kannst du auch die zip responses gleich unzippen in der Funktion?

                    Code:
                    if resp.getheader( "Content-encoding" ) == "gzip":
                        data = gzip.decompress(content)
                    else:
                        data = content
                    Viele Grüsse
                    Jürgen

                    Kommentar


                      #11
                      Hallo Jürgen,

                      ich habe in Testing support für gzip eingebaut. Ich zweifle aber die Funktionstüchtigkeit, auch von dem Code oben, an. Hast Du eine Webseite zur Hand die fetch_url ein gzip komprimierten Inhalt liefert?

                      Code:
                      callidomus.core update
                      callidomus.core restart
                      Bis bald

                      Marcus

                      Kommentar


                        #12
                        Ja ich habe das an meinem kaco wr so getestet. Das hat Funktioniert. Zumindest vom Visual Studio aus. Was man aber eigentlich das zu sagen muss das sich der Webserver auf dem wr nicht korrekt verhält das er das gezip zurückschickt. Da bei senden nicht die headers die sagen das der Client gzip kann nicht gesetzt werden.
                        VG Jürgen
                        Zuletzt geändert von heckmannju; 12.07.2016, 22:27.

                        Kommentar


                          #13
                          Hallo Jürgen,

                          genau. Deswegen ist der Code so eigentlich sinnlos. Das klappt nur mit dem kaputten Webserver.

                          Bis bald

                          Marcus

                          Kommentar


                            #14
                            Hi,
                            wie bekommt man raus das das Script das erste mal läuft nach dem Restart von core? An der stelle will ich ein Dict. aufbauen. Mit den möglichen zuständen des WR. Das will ich nur einmal machen.

                            Viele Grüsse
                            Jürgen

                            Kommentar


                              #15
                              Hi Jürgen,

                              schau doch am Anfang des Scripts nach, ob das Dict schon da ist.

                              Gruß, Waldemar
                              OpenKNX www.openknx.de

                              Kommentar

                              Lädt...
                              X