Ankündigung

Einklappen
Keine Ankündigung bisher.

Baustein erstellen httplib -> [Name or service not known]

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

    HS/FS Baustein erstellen httplib -> [Name or service not known]

    Ich versuche mich gerade an der Erstellung meines ersten HS-Bausteines. Nun quäle ich mich schon einige Stunden rum und komme zu keinem verwertbaren Ergebnis.

    Baustein:
    Code:
    #5000|"Gatter\UND, 2 Eing"|0|2|"E1"|"E2"|4|"A1"|"A2 neg"|"A3 (sbc)"|"A4 neg (sbc)"|
    5000|"pushover"|0|4|"Trigger"|"Text"|"API-Token"|"User-Token"|2|"Debug3"|"Debug4"
    
    ##5001|Anzahl Eing‰nge|Ausg‰nge|Offset|Speicher|Berechnung bei Start
    5001|4|2|0|0|0
    
    ##5002|Index Eingang|Default Wert|0=numerisch 1=alphanummerisch
    #Trigger
    5002|1|0|0
    #Text
    5002|2|0|1
    #API-TOKEN
    5002|3|0|1
    #USER-TOKEN
    5002|4|0|1
    
    ##5004|ausgang|Initwert|runden bin‰r (0/1)|typ (1-send/2-sbc)|0=numerisch 1=alphanummerisch
    5004|1|0|1|1|0
    5004|2|0|1|1|0
    
    ##5012|abbruch bei bed. (0/1)|bedingung|formel|zeit|pin-ausgang|pin-offset|pin-speicher|pin-neg.ausgang
    5012|0|"__import__('httplib').HTTPSConnection("api.pushover.net").request("POST", "/1/messages.json", __import__('urllib').urlencode({"token": "XfGudhGJYFuPyhBZfuPLiMx4m8us","user": "HjPZsezdRRZxJVxA7gLVj6Vc3t4x","message": "hello world"}), { "Content-type": "application/x-www-form-urlencoded" })"|""|""|0|0|0|0
    Ziel ist es eine Nachricht direkt über die pushover-API zu versenden.

    Der Homeserver gibt folgende Exception:
    Code:
    [COLOR=#000000][FONT=Times]File "./../hssrc/hs_logik.py", line 227, in calc[/FONT][/COLOR]
    [COLOR=#000000][FONT=Times]File "case", line 1, in [module][/FONT][/COLOR]
    [COLOR=#000000][FONT=Times]File "/usr/lib/python2.6/httplib.py", line 914, in request[/FONT][/COLOR]
    [COLOR=#000000][FONT=Times]File "/usr/lib/python2.6/httplib.py", line 951, in _send_request[/FONT][/COLOR]
    [COLOR=#000000][FONT=Times]File "/usr/lib/python2.6/httplib.py", line 908, in endheaders[/FONT][/COLOR]
    [COLOR=#000000][FONT=Times]File "/usr/lib/python2.6/httplib.py", line 780, in _send_output[/FONT][/COLOR]
    [COLOR=#000000][FONT=Times]File "/usr/lib/python2.6/httplib.py", line 739, in send[/FONT][/COLOR]
    [COLOR=#000000][FONT=Times]File "/usr/lib/python2.6/httplib.py", line 1112, in connect[/FONT][/COLOR]
    [COLOR=#000000][FONT=Times]File "/usr/lib/python2.6/socket.py", line 547, in create_connection[/FONT][/COLOR]
    [COLOR=#000000][FONT=Times]gaierror: [Errno -2] Name or service not known[/FONT][/COLOR]
    [COLOR=#000000][FONT=Times][5012L, 19898L, 0L, '__import__(\'httplib\').HTTPSConnection("api.pushover.net").request("POST", "/1/messages.json", __import__(\'urllib\').urlencode({"token": "XfGudhGJYFuPyhBZfuPLiMx4m8us","user": "HjPZsezdRRZxJVxA7gLVj6Vc3t4x","message": "hello world"}), { "Content-type": "application/x-www-form-urlencoded" })', '', '', 0L, 0L, 0L, 0L][/FONT][/COLOR]
    Anmerkung1:
    Die Codezeile für sich funktioniert in python2.6 wunderbar (Experte 4.0 / FS3)

    Anmerkung2:
    Diverse Varianten von HTTPSConnection("api.pushover.net:453") oder HTTPSConnection("api.pushover.net",453) laufen ebenfalls ins leere. Trage ich die IP von api.pushover.net ein (108.59.13.232) dann gibt es schonmal keine Exception, aber auch keine Nachricht.

    Anmerkung3:
    Leider lässt sich die API nur über den Nameserver ansteuern. Wenn man die IPs direkt wählt (auch in der Python-Shell) gibt es weder eine Fehlermeldung, noch eine Nachricht aufs Handy (Die Daten per Wireshark scheinen allerdings identisch).

    Anmerkung4:
    Wireshark sieht auch nichts, leider auch nicht von anderen Rechnern von denen es funktioniert. Vom iMac jedoch sehe ich die Kommunikation (hier läuft auch der Wireshark).

    Gibt es irgendwas im Homeserver dass die ganze Geschichte limitiert? Goolge sagt es sei ein DNS-Problem. Der HS verschickt allerdings brav emails und meldet sich beim Portal. Als DNS-Server habe einmal die Fritzbox und alternativ noch google mit 8.8.8.8 eingetragen.

    Wollte das eigentlich als kleine Übung for der Beschäftigung mit ByteCode angehen, aber scheitere ja schon hier.

    Vielleicht hat einer der Experten einen Tip ?

    Gruß Mirko

    Umgezogen? Ja! ... Fertig? Nein!
    Baustelle 2.0 !

    #2
    Der HS kann so kein DNS. Das muss man ihm erst beibringen. Mit der Ip geht es wahrscheinlich. Frag NilsS, der erklärt dir das.
    Gruß Matthias
    EIB übersetzt meine Frau mit "Ehepaar Ist Beschäftigt"
    - PN nur für PERSÖNLICHES!

    Kommentar


      #3
      Das Problem ist jetzt folgendes, so viel konnte ich herausfinden, bzw. so hat es mit der Pushover Support erklärt.
      Das SSl-Zertifikat ist auf ap.pushover.net ausgestellt. Verbinde ich mich nun mit der direkten IP dann schlägt das fehlt und er Server sendet ein 404. Das kann ich an anderen Rechnern nachvollziehen.

      Da hilft mein gedachter (in anderen Bausteinen abgeschauter) Workaround mit socket.gethostbyname('api.pushover.net') leider auch nicht. Bleibt für mich also die Frage warum der HS 'api.pushover.net' nicht auflösen kann?

      Grüße
      Umgezogen? Ja! ... Fertig? Nein!
      Baustelle 2.0 !

      Kommentar


        #4
        Sorry Mirko, das ich erst jetzt drauf gucke. Hab recht viel um die Ohren.

        Das Problem mit dem gethostbyname ist das der HS beim Start noch keine IP/DNS Konfiguration hat. Der Python Prozess startet und ändert das, jedoch wirken sich die Änderungen nicht auf bereits gestartete Anwendungen aus. Daher ist im HS eine eigene Resolverfunktion eingebaut.
        Du kannst (falls kein SNI oder SSL Vhosts auf dem Webserver sind)

        Code:
        5012|0|"__import__('httplib').HTTPSConnection(pItem.MC.DNSResolver.getHostIP("api.pushover.net")).request("POST", "/1/messages.json", __import__('urllib').urlencode({"token": "XfGudhGJYFuPyhBZfuPLiMx4m8us","user": "HjPZsezdRRZxJVxA7gLVj6Vc3t4x","message": "hello world"}), { "Content-type": "application/x-www-form-urlencoded" })"|""|""|0|0|0|0
        verwenden.


        Wenn das nicht geht, musst du die eigentliche socket.getaddrinfo überschreiben, dann kannst du die Funktionen wieder korrekt verwenden, da sie intern das getaddrinfo verwenden.

        Code:
          global socket
          import socket
          ## socket DNS Resolver tauschen, da HS startet bevor es gültige IP/DNS Einstellungen gibt
          ## testen ob nicht schon getauscht
          if not hasattr(socket,"_hs_dnsresolver"):
              ## alltes getaddrinfo speichern
              socket._socket_getaddrinfo = socket.getaddrinfo
              ## den HS internen Resolver an das socket Modul binden
              socket._hs_dnsresolver = self.MC.DNSResolver.getHostIP
              ## neue getaddrinfo Funktion
              def _hsgetaddrinfo(host, port, family=0, socktype=0, proto=0, flags=0): return socket._socket_getaddrinfo(socket._hs_dnsresolver(host),port, family,socktype,proto,flags)
              ## und die alte gegen die neue ersetzen
              socket.getaddrinfo = _hsgetaddrinfo
        Nils

        aktuelle Bausteine:
        BusAufsicht - ServiceCheck - Pushover - HS-Insight

        Kommentar


          #5
          Hallo
          Gibt es an dieser Ecke schon Neuigkeiten ? Sprich, läuft der pushover Baustein und würdest du diesen zur Verfügung stellen ?
          Wäre Klasse.
          Viele Grüße und schon mal Danke
          Hans-Jürgen

          Kommentar


            #6
            Habe gestern erst den Beitrag hier mühevoll wieder gesucht (auch gefunden und abonniert) und gehe davon aus in den nächsten Tagen was anzufangen. Wir dann auch ein frei erhältlicher Baustein, allerdings weiß ich nicht genau wie lange "in den nächsten Tagen" wird. Probieren werde ich es jedenfalls - Hexenwerk ist es dank NilsS`s Hilfe wohl nicht.
            Umgezogen? Ja! ... Fertig? Nein!
            Baustelle 2.0 !

            Kommentar


              #7
              Hi Mirko,

              Schau dir mal die Sourcecode von mein Slack Logikbaustein an. Code und Funktionalität ist fast gleich mit was du brauchst.

              Ciao,

              Jean-Paul.

              Kommentar


                #8
                Ok. So wenn mann erst drei Tagen sich geärgert hat an den Homeserver, und dan endlich ein Slack Logikbaustein fertig hat... Dann ist es extrem einfach um in weniger dan 1.5 Stunde das ding um zu bauen für Pushover...

                So bitte schön: Hier ist 19626_Pushover.hsl

                Version 0.9, da ich selbst kein Pushover kunde bin, und es nicht aktiv benutze, deswegen auch nicht extensiv getestet habe.

                Steht auch wieder auf Github, und wird hoffentlich auch schnell im download Bereich fertig gestellt.

                Viel spaß damit!

                Jean-Paul.
                Angehängte Dateien
                19626_Pushover - Gira Homeserver to Pushover API Logic module
                Zuletzt geändert von doprojp; 31.12.2015, 10:42.

                Kommentar


                  #9
                  Ich hol das nochmal hoch.
                  Der Pushover Baustein funktioniert einwandfrei.
                  Jetzt bietet Pushover neuerdings auch Bildverarbeitung an.
                  Kann man das in den Baustein integrieren?

                  Vielen Dank,
                  Martin

                  Kommentar


                    #10
                    Dein Baustein scheint nicht mehr zu funktionieren.

                    02.04.2023 18:51:09 (33)
                    File "hs_logik.py", line 230, in calc
                    File "formula", line 1, in [module]
                    File "[19626_Pushover]", line 45, in sendmsg
                    File "/usr/lib/python2.7/urllib2.py", line 154, in urlopen
                    return opener.open(url, data, timeout)
                    File "/usr/lib/python2.7/urllib2.py", line 429, in open
                    response = self._open(req, data)
                    File "/usr/lib/python2.7/urllib2.py", line 447, in _open
                    '_open', req)
                    File "/usr/lib/python2.7/urllib2.py", line 407, in _call_chain
                    result = func(*args)
                    File "/usr/lib/python2.7/urllib2.py", line 1241, in https_open
                    context=self._context)
                    File "/usr/lib/python2.7/urllib2.py", line 1198, in do_open
                    raise URLError(err)
                    URLError: [urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:661)]
                    [5012L, 19626L, 0L, 'EC[2] and len(EN[2])]0', 'SN[1].sendmsg(EN[2], EN[3], EN[4], EN[5], EN[6], EN[7], EN[8], EN[9], EN[10], EN[11])', '', 0L, 0L, 0L, 0L]

                    Nils Pushover Baustein geht aber noch.

                    Nur zur Info.​

                    Kommentar

                    Lädt...
                    X