Ankündigung

Einklappen
Keine Ankündigung bisher.

Push-Nachrichten mit dem EibPc erzeugen

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

    Push-Nachrichten mit dem EibPc erzeugen

    Hallo,

    ich versuche mich an der Möglichkeit mit dem EibPc auf einem iPhone/iPad eine Push-Nachricht zu erzeugen.
    Ich bin nun so weit gekommen, dass der EibPc nun eine URL aufrufen müsste, von der aus dann eine Push-Nachricht erzeugt wird.
    Folgende URL müßte vom EibPc aufgerufen werden werden.

    https://prowl.weks.net/publicapi/add?apikey=[key]&application=[%sitename]&event=%status&description=%device %name %status %down (%message) ------ Last Result: %lastvalue Date/Time: %datetime Timezone: %timezone

    Wie kann ich mit dem EibPc diese URL aufrufen?
    Welche befehle muss ich nutzen (sendtcp)?
    Wie kann ich die URL in einem String unterbringen und welche Endekennungen werden benötigt?
    Vielleicht gibt es jemanden hier, der schon eine Idee dazu hat.
    Das Thema wäre bestimmt von einigen von Interesse. Wäre schön, wenn wir bei diesem Thema weiterkommen würden.

    Gruß
    Markus

    #2
    Gibt's die auch mit http statt https?
    Firma: Enertex Bayern GmbH, Ebermannstädter Straße 8, 91301 Forchheim
    Amazon: KNXnet/IP Router
    , KNXnet/IP Interface

    Kommentar


      #3
      Ja, http geht auch.

      Kommentar


        #4
        Zitat von Marha Beitrag anzeigen
        https://prowl.weks.net/publicapi/add?apikey=[key]&application=[%sitename]&event=%status&description=%device %name %status %down (%message) ------ Last Result: %lastvalue Date/Time: %datetime Timezone: %timezone
        Gehört zwar nicht direkt in diesen Thread, aber: warum sollte dies besser (performanter) sein als SMTP mit TLS?

        Gruss, Othmar
        EIB/KNX, VISU mit knxd + linknx + knxweb, Steuerbefehle via SMS und Email mit postfix + procmail

        Kommentar


          #5
          Hat keiner eine Idee oder ein ähnliches Bsp?

          Gruß
          Markus

          Kommentar


            #6
            Du brauchst für so eine Webabfrage so etwas wie ein "wget" für den EibPC. Derzeit noch in Entwicklung und mangels EibPC kann ich auch nicht weitermachen.

            Ich habe so etwas mal begonnen für die Prüfung der Dynamischen IP. Derzeitiger Code:

            [highlight=epc]
            ////////////////////////////////////////////////////////////////////////////////
            //
            // Externe IP überwachen
            //
            //
            // the idea is to look up the IP of the dyndns service
            //
            //www.nwlab.net/cgi-bin/show-ip-js
            //
            //
            // Variablen definieren
            DynDNS_URL=$myhomehost.dyndns.org$

            DynDNS_IP=0u32
            External_IP = 0u32
            External_IP_FirstDot = 0u16
            External_IP_SecondDot = 0u16
            External_IP_ThirdDot = 0u16

            External_IP_First_Byte_String = $$
            External_IP_Second_Byte_String = $$
            External_IP_Third_Byte_String = $$
            External_IP_Fourth_Byte_String = $$

            External_IP_First_Byte = 0u32
            External_IP_Second_Byte = 0u32
            External_IP_Third_Byte = 0u32
            External_IP_Fourth_Byte = 0u32


            External_Web_Port = 80u16
            External_Web_URL = $www.nwlab.net$
            External_Web_IP = 0u32
            External_WebDoc = $/cgi-bin/show-ip-js$
            External_Request_String = $$
            External_ReadIP = 0u32
            External_ReadPort = 0u16
            External_ReadBuffer = $$
            External_IPString = $$
            External_Connect = 99u08

            ExternUeberwachen = AUS

            // result will be like " ... document.write('95.33.64.16');"


            //if cycle(10,0) or after(systemstart(),20000u64) then {
            // ExternUeberwachen = EIN;
            //} endif

            if after(ExternUeberwachen == EIN,600u64) then {
            DynDNS_IP=resolve(DynDNS_URL);
            External_Web_IP=resolve(External_Web_URL);
            DebugOut_String( $Resolving $+DynDNS_URL);
            DebugOut_String( $Resolving $+External_Web_URL);
            } endif

            if ExternUeberwachen == EIN and DynDNS_IP > 0u32 and External_Web_IP > 0u32 then {
            External_Connect = connecttcp(External_Web_Port,External_Web_IP);
            DebugOut_String( $Connecting to $+convert(External_Web_IP,$$));
            } endif

            // TCP Anfrage senden
            if after(External_Connect==0u08,1u64) then {
            External_Request_String = $GET $+External_WebDoc+$ HTTP/1.1$+CRLF+$Host: $+External_Web_URL+CRLF+CRLF;
            /* sendtcparray(External_Web_Port,External_Web_IP, External_Request_String, size(External_Request_String)) */;
            sendtcp(External_Web_Port,External_Web_IP, External_Request_String);
            DebugOut_String( External_Request_String );
            } endif

            // Empfang eines Paketes
            if event(readtcp(External_ReadPort,External_ReadIP,Ex ternal_ReadBuffer)) and External_ReadIP == External_Web_IP then {
            DebugOut_String( $Readtcp from $+convert(External_ReadIP, $$)+$ @ Port $+convert(External_ReadPort, $$) );
            External_IP_FirstDot = find(External_ReadBuffer,$'$,0u16)+1u16;
            External_IP_SecondDot = find(External_ReadBuffer,$'$,1u16);
            External_IPString=split(External_ReadBuffer,Extern al_IP_FirstDot,External_IP_SecondDot);
            IPStringtoU32( External_IPString, External_IP )
            } endif

            // TCP Verbindung schliessen
            if after(ExternUeberwachen,10000u64) then {
            closetcp(External_Web_Port,External_Web_IP)
            } endif

            [/highlight]

            Das könnte für Dich ein Ansatzpunkt sein.

            Gruß,
            Bernd

            Kommentar


              #7
              Danke Bernd,

              werde mich mal damit auseinandersetzten.
              Was hat bei Dir denn nicht funktioniert?

              Gruß
              Markus

              Kommentar


                #8
                Zitat von Marha Beitrag anzeigen
                Was hat bei Dir denn nicht funktioniert?
                Es ist schlicht unfertig und es muß noch dran gearbeitet werden. Die IP aus der Rückmeldung vom Webserver muß noch korrekt extrahiert werden und dann muß der Dyndns upgedatet werden...

                Gruß,
                Bernd

                Kommentar


                  #9
                  Hoi

                  Also man sendet einfach eine URL und das war's. Hehe, hoffentlich
                  [highlight=epc]
                  // Prowl
                  ProwlPort = 80u16
                  ProwlIP = resolve($prowl.weks.net$)
                  ProwlKey= $12345123451234512345123451234512345$
                  ProwlBetreff = $Eib-Message$
                  ProwlText = $Ein möglichst später dynamischer Text.$

                  /*ProwlString = Hier alles zusammenbasteln */
                  ProwlString = $/publicapi/add?apikey=$ + ProwlKey + $&application=$ + ProwlBetreff + $&description=$ + ProwlText
                  sendtcp(ProwlPort,ProwlIP,ProwlString);
                  [/highlight]
                  Grüsse Bodo
                  Fragen gehören ins Forum, und nicht in mein Postfach;
                  EibPC-Fan; Wiregate-Fan; Timberwolf-Fan mit 30x 1-Wire Sensoren;

                  Kommentar


                    #10
                    Hallo Bodo,

                    mit Deinem Vorschlag habe ich es nicht hinbekommen.
                    Ich habe auch mal Terminierungszeichen angehängt.

                    sendtcp(ProwlPort,ProwlIP,ProwlString,0x0A,0x0D);
                    sendtcp(ProwlPort,ProwlIP,ProwlString,0x0A,0x0D,0x 0A,0x0D);

                    Hat beides nicht funktioniert. Wäre zu schön gewesen...........

                    Gruß
                    Markus

                    Kommentar


                      #11
                      Hoi

                      Ja ich muss zuhause noch mal nachschauen woran es hängt.
                      Angemeldet hattest Du Dich ja schon, wegen dem API-KEY.
                      Eigentlich sollte man von jedem Browser aus eine Message initiieren können... (Adresszeile)
                      So zum testen ...
                      Grüsse Bodo
                      Fragen gehören ins Forum, und nicht in mein Postfach;
                      EibPC-Fan; Wiregate-Fan; Timberwolf-Fan mit 30x 1-Wire Sensoren;

                      Kommentar


                        #12
                        Also so, wie der Bodo oben geschrieben hat wird es definitiv nicht funktionieren. Zum einen hat er kein connecttcp eingebaut und das ganze ist nicht event gesteuert. Ich hoffe allerdings, das Du das schon berücksichtigt hattest. Wenn ja, dann poste doch mal Deinen kompletten bisherigen Code zum Nachschauen. (Wenn nein, dann setzen und erstmal den Rest anbauen)

                        Gruß,
                        Bernd

                        Kommentar


                          #13
                          Hoi

                          Uups, sorry
                          Klaro connect...
                          Kommt davon, wenn man Fernheilung betreiben will
                          Grüsse Bodo
                          Fragen gehören ins Forum, und nicht in mein Postfach;
                          EibPC-Fan; Wiregate-Fan; Timberwolf-Fan mit 30x 1-Wire Sensoren;

                          Kommentar


                            #14
                            Ja, ich habe einen Key von Prowl bekommen. Diesen in Firefox eingegeben und es kommt eine Push-Nachricht aufs iPhone. Dies geht also schonmal.

                            Ja, ich habe sowohl Deinen Vorschlag, Bernd, als auf Deinen Vorschlag, Bodo, mit meinen Ideen "gemixt". Folgendes kam dabei herau:

                            if after(prowlStart1 == EIN,1000u64) then ProwlIP = resolve($http://prowl.weks.net$) endif
                            if after(prowlStart1 == EIN,1500u64) then prowlConncetStaus1 = connecttcp(ProwlPort,ProwlIP) endif
                            if after(prowlStart1 == EIN,2000u64) then {
                            ProwlString = $GET $ + $/publicapi/add?apikey=$ + ProwlKey + $&priority=2&application=$ + ProwlBetreff + $&event=Info1$ + $&description=$ + ProwlText + $ HTTP/1.1$;
                            sendtcp(ProwlPort,ProwlIP,ProwlString);
                            prowlCnt1 = prowlCnt1 + 1u08;
                            prowlStart1 = AUS } endif
                            if after(prowlStart1 == EIN,2500u64) then closetcp(ProwlPort,ProwlIP) endif

                            Funktioniert aber nicht.

                            Die Zeile mit sendtcp habe ich wie oben schon geschrieben jeweils abgeändert.

                            Gruß
                            Markus

                            Kommentar


                              #15
                              Hi Markus,

                              if after(prowlStart1 == EIN,1000u64) then ProwlIP = resolve($http://prowl.weks.net$) endif
                              if after(ProwlIP > 0,1500u64) and prowlStart1 then prowlConnectStatus1 = connecttcp(ProwlPort,ProwlIP) endif
                              if after(prowlConnectStatus1 == 0,1u64) and prowlStart1 then {
                              ProwlString = $GET $ + $/publicapi/add?apikey=$ + ProwlKey + $&priority=2&application=$ + ProwlBetreff + $&event=Info1$ + $&description=$ + ProwlText + $ HTTP/1.1$;
                              sendtcp(ProwlPort,ProwlIP,ProwlString);
                              prowlCnt1 = prowlCnt1 + 1u08;
                              } endif

                              if after(prowlConnectStatus1 == 0,2500u64) then {
                              prowlStart1 = AUS;
                              closetcp(ProwlPort,ProwlIP)
                              } endif

                              if after(prowlStart1 == EIN, 10000u64) then {
                              prowlStart1 = AUS
                              } endif

                              Kann es leider nicht testen, aber probiers mal so.

                              Gruß,
                              Bernd

                              Kommentar

                              Lädt...
                              X