Ankündigung

Einklappen
Keine Ankündigung bisher.

Kleines Problem mit fetch_url

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

    #16
    also Dank stackoverflow bin ich ein mini schritt weiter. Die URL wird korrekt zusammen gebaut...leider bleibt der http error. Es ist also vermutlich ein decode problem.


    2018-04-26 21:45:09 INFO sms sms -------------->http://gateway.sms77.io/api/sms?u=us...text=ALARMtest -- sms.py:<module>:14
    2018-04-26 21:45:09 INFO _cplogging CP Server Thread-8 192.168.10.10 - admin [26/Apr/2018:21:45:09] "POST /logics.html HTTP/1.1" 200 13063 "http://192.168.10.110:8383/logics.html" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:53.0) Gecko/20100101 Firefox/53.0" -- _cplogging.py:access:285
    2018-04-26 21:45:09 DEBUG __init__ Main KNX[default]: 1.0.30 read 0/3/103 -- __init__.pyarse_telegram:373
    2018-04-26 21:45:09 DEBUG __init__ Main KNX[default]: 1.0.101 set 0/3/103 to 00 -- __init__.pyarse_telegram:339
    2018-04-26 21:45:09 ERROR scheduler sms Logic: sms, File: /usr/lib/python3.4/urllib/request.py, Line: 579, Method: http_error_default, Exception: HTTP Error 400: Bad Request -- scheduler.py:_task:394
    Traceback (most recent call last):
    File "/usr/local/smarthomeNG/lib/scheduler.py", line 382, in _task
    exec(obj.bytecode)
    File "/usr/local/smarthomeNG/logics/sms.py", line 15, in <module>
    site = urllib.request.urlopen(url)
    File "/usr/lib/python3.4/urllib/request.py", line 153, in urlopen
    return opener.open(url, data, timeout)
    File "/usr/lib/python3.4/urllib/request.py", line 461, in open
    response = meth(req, response)
    File "/usr/lib/python3.4/urllib/request.py", line 571, in http_response
    'http', request, response, code, msg, hdrs)
    File "/usr/lib/python3.4/urllib/request.py", line 499, in error
    return self._call_chain(*args)
    File "/usr/lib/python3.4/urllib/request.py", line 433, in _call_chain
    result = func(*args)
    File "/usr/lib/python3.4/urllib/request.py", line 579, in http_error_default
    raise HTTPError(req.full_url, code, msg, hdrs, fp)
    urllib.error.HTTPError: HTTP Error 400: Bad Request

    Kommentar


      #17
      kein Leerzeichen drin:

      sms -------------->|http://gateway.sms77.io/api/sms?u=user&p=12345&to=004912345&text=ALARMtest|<------------- -- sms.py:<module>:14

      Kommentar


        #18
        Bin ich echt der erste der das Problem hat? Kann mal bitte jemand den Title ändern in "Großes Problem mit urllib"

        Kommentar


          #19
          Was für ein hässliches, nerviges Problem. Ich hätte in den Tisch beissen können! Hier jetzt meine Lösung..rausbekommen durch probieren (habe die Anfrage an eigenen Server geschickt und dabei ist folgendes angekommen "ALARMtest%00%00%00%00%00%00%00%00%00%00"...wa rum auch immer. Mit

          bla = urllib.parse.quote(bla)
          bla = bla.replace("%00","")

          funktioniert es jetzt. Keine Ahnung woher die ganzen 0 bzw. %00 herkommen. Im python log standen die jedenfalls nicht..

          Gruss, Micha


          Kommentar


            #20
            Da wird dann wohl bei 'Nicht-Alarm' ein String[14] mit lauter 0x00 von 7/7/251 gesendet. Das erklärt auch, warum sonst noch niemand dieses Problem hatte; vermutlich hat noch niemand sonst diese konkrete Anlage so eingebunden. Dass die ganzen Nullen nicht zumnidest als Sonder- oder Fragezeichen im Log stehen, ist natürlich unschön.

            Code:
            [Alarmanlage]
            
                [[Alarmmelder]]
                    type = str
                    knx_dpt = 16
                    knx_listen = 7/7/251
                    knx_init = 7/7/251
                    visu_acl = rw
            
                    [[[Alarmtext]]]
                        # dieses Item hier in der Logik nehmen
                        type = str
                        eval = ...replace("%00","")
                        eval_trigger = ..
            (ungetestet)

            Am Rande: Wozu visu_acl = rw?

            /tom

            Kommentar


              #21
              Code:
              [Alarmanlage]
                  [[Alarmmelder]]
                      type = str
                      knx_dpt = 16
                      knx_init = 7/7/251
                      eval = value.replace("%00", "")
              Hi Tom,

              im Prinzip sollte es auch so klappen. knx_listen braucht man nicht, wenn man ein knx_init hat. Und der eval kann direkt den Wert bereinigen.

              Gruß, Waldemar

              OpenKNX www.openknx.de

              Kommentar


                #22
                Stimmt, danke - hab mal wieder den Wald vor lauter Bäumen nicht gesehen ...
                /tom

                Kommentar


                  #23
                  Zitat von Tom Bombadil Beitrag anzeigen
                  Da wird dann wohl bei 'Nicht-Alarm' ein String[14] mit lauter 0x00 von 7/7/251 gesendet. Das erklärt auch, warum sonst noch niemand dieses Problem hatte; vermutlich hat noch niemand sonst diese konkrete Anlage so eingebunden. Dass die ganzen Nullen nicht zumnidest als Sonder- oder Fragezeichen im Log stehen, ist natürlich unschön.

                  Code:
                  [Alarmanlage]
                  
                  [[Alarmmelder]]
                  type = str
                  knx_dpt = 16
                  knx_listen = 7/7/251
                  knx_init = 7/7/251
                  visu_acl = rw
                  
                  [[[Alarmtext]]]
                  # dieses Item hier in der Logik nehmen
                  type = str
                  eval = ...replace("%00","")
                  eval_trigger = ..
                  (ungetestet)

                  Am Rande: Wozu visu_acl = rw?

                  /tom
                  Wozu visu_acl = rw? ist falsch.

                  Ja vermutlich. Muss ich mal probieren..die Daten kommen vom ABB SCM/S1.1 da ist vermutlich die Ursache zu suchen..

                  Kommentar


                    #24
                    Nur mal so aus Interesse: Bist Du sicher, dass da ein Text geliefert wird? Kommt mir etwas ungewöhlich vor - hätte da eigentlich eher einen INT oder FLOAT Typ erwartet (Alarmpunkt oder Linie.Alarmpunkt). Aber bin auch kein Alarmanlagenprofi ...
                    /tom

                    Kommentar


                      #25
                      ABB SCM/S1.1

                      KO 34 "Text alarmierender Melder" 14 bytes 16.* Zeichensatz

                      Gruss, Micha

                      Kommentar


                        #26
                        wer kann weiterhelfen,
                        habe eine http anfrage die mir mit get Parameter Name=Parameterwert zurück gibt.
                        Diese werte möchte ich gerne als Item mit knx-listen oder send weiter leiten, bearbeiten.
                        Dazu würde ich die wrt-daten gerne als wert in smartvisu verarbeiten dazu muß ich die werte aber als item haben.

                        http get Parameter Name=Parameterwert als item zugänglich machen.
                        da ich die daten für die Steuerung über knx brauche.

                        wie würde die anweisung jetzt aufgebaut ist für mich die Frage?

                        Kommentar


                          #27
                          Hi,
                          Deine frage habe ich nicht so recht verstanden
                          du must doch die get url selber zusammenbauen dann hast du doch schon den Wert den du senden willst. Woher kommt den der Wert?
                          VG
                          Jürgen

                          Kommentar


                            #28
                            Hallo,
                            Die werte kommen von einem wrt54gl reflow, mochte nicht auf den Linksys zugreifen sondern nur die Werte die im reflow gesendet werden verarbeiten. Dazu wiel ich die Daten mit get url abrufen und den datensatz der gesendet wird über items die ich mit meinem knx system verbinden kann.die einzelnen daten Sätze sind durch & zeichen getrend. Also eine funktion um den wrt zu überwachen.

                            mfg
                            Edwin

                            Kommentar


                              #29
                              Hi Edwin,

                              das ist ein bisschen wirr, was Du da schreibst. Ich kenne den Linksys nicht, aber Du schreibst einerseits, dass da "Werte im reflow gesendet" werden, andererseits, dass Du mit get die Daten lesen willst (polling).
                              Normalerweise ist es immer besser, auf Daten, die gesendet werden zu reagieren statt ein polling zu betreiben. Wenn Du Einfluss auf das Sendeformat hast, kannst Du Dir die Werte direkt vom Router an ein Item schicken lassen über das network plugin. Schau da mal in die Doku, im Prinzip geht das über eine Url, die ungefähr so aussieht:
                              Code:
                              http://<ip vom shNG server>:<port von network plugin>/item|router.linksys.wert|<gesendeter Wert>
                              Mit dieser URL wird das Item "router.linksys.wert" mit <gesendeter Wert> beschrieben.

                              Wenn Du polling machen musst/willst, musst Du Dir eine Logik schreiben, die per get die Werte abholt, die response parsed und die resultierenden Werte in passende Items schreibt. Diese Logik kannst Du dann mit normalen shNG-Mitteln triggern, z.B. über cycle, crontab oder watch_item.

                              Gruß, Waldemar
                              OpenKNX www.openknx.de

                              Kommentar


                                #30
                                Hallo Waldemar

                                möchte mich bedanken für die ausfürliche beschreibung werde das mal in die Tat umsetzen.

                                Gruß Edwin

                                Kommentar

                                Lädt...
                                X