Messwerte des air-Q in eigenen Webseiten verwenden



  • Erstellt man auf einem eigenen Server im lokalen Netz Webseiten, in denen air-Q Messwerte dargestellt werden sollen, so beschafft man sich diese z.B. mit Javascript über das air-Q API.
    Dann stolpert man aber über das Problem "Access-Control-Allow-Origin".
    Browser verhindern Daten eines anderen Servers (hier der air-Q) in Webseiten abzufragen, wenn dieser Server nicht explizit dieses erlaubt hat.
    Und der Webserver auf dem air-Q erlaubt es nicht.

    Abhilfe kann man schaffen mit einem kleinen php-Skript, quasi als Proxy.
    Dieses php-Skript macht nichts anderes als das air-Q API abzufragen und das Ergebnis zu transferieren.

    proxy.php:

    <?php
    
    header('Access-Control-Allow-Origin: *'); 
    
    $_GET_lower = array_change_key_case($_GET, CASE_LOWER);
    
    $address = '';
    if (array_key_exists('address', $_GET_lower)) {$address = $_GET_lower['address'];}
    
    if ($address == '') {
    	header('Content-Type: text/html');
    	echo 'Usage: ../proxy.php?address=<complete address you want to call>';
    } else {
    	// because of possible addtional parameters in URI you can not use $address got from $_GET  
    	$address=substr($_SERVER[REQUEST_URI] ,strpos($_SERVER[REQUEST_URI], 'http'), strlen($_SERVER[REQUEST_URI]));
    	$ch = curl_init();
    	curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
    	curl_setopt ($ch, CURLOPT_URL, $address);
    	$output = curl_exec($ch);
    	header('Content-Type: ' . curl_getinfo($ch, CURLINFO_CONTENT_TYPE)); // for example: application/json; charset=UTF-8
    	echo $output;
    
    	curl_close ($ch);
    }
    
    ?>
    
    

    Statt in Javascript jetzt die Daten mit einer URL ähnlich

    http://<IP-Adresse des air-Q>/data
    

    abzufragen, fragt man dann in Javascript über

    http://<Server-IP-Adresse>/proxy.php?address=http://<IP-Adresse des air-Q>/data
    

    die Daten vom air-Q ab.

    Auch das Problem, dass der air-Q kein https anbietet, wird so umgangen. Also

    https://<Server-IP-Adresse>/proxy.php?address=http://<IP-Adresse des air-Q>/data
    

    funktioniert in Javascript auch.

    In den Webseiten selbst muss jetzt natürlich noch die Decodierung erfolgen. Proxy.php codiert oder decodiert nichts!



  • das ist für viele interessant!
    Danke für den Beitrag!



  • @Micha
    Ich sehe du hast dich schon damit beschäftigt.
    Ich würde gerne meine Daten auch auf meine Wetterstationen Seite einbinden.

    Https://wetter.priesterath.net

    Hast du eine Beispiel Seite wo ich mir das anschauen kann?
    Kenne mich in php nicht besonders gut aus.

    Danke und lg Sperber



  • Hallo @Sperber
    Also wirklich fantastisch Deine Wetterstation-Seite; Hut ab!

    So einfach kann ich jetzt Deine Frage nicht beantworten, da ich die Architektur Deines Systems nicht kenne.
    Hat der Server einen direkten Zugang zu Deinem air-Q?

    JA: Dann kannst Du vom Server aus die Daten vom air-Q abfragen mit der Sprache in der Du Deine Seiten programmiert hast. Du musst halt in dieser Sprache die Decodierung schreiben. Für JavaScript und Python stehen Beispiele in der technischen Dokumentation. Für php kannst Du den Teil aus dem Skript in https://forum.air-q.com/topic/27/hausautomation-fhem/4 extrahieren.

    NEIN: Dann brauchst Du einen Server als eine Art Middleware zwischen Deinem Heimnetz und dem Server. Dieser Server muss also von Deiner Wetterstationsseite erreichbar sein, und dieser Server muss Deinen air-Q erreichen können. In diesem Fall kannst Du eigentlich das Skript unter https://forum.air-q.com/topic/27/hausautomation-fhem/4 direkt auf diesem Server installieren. Deine Wetterstationsseite fragt dann via diesem Skript die Daten des air-Q ab (z.B. http://<Server-IP>/airq/get.php?cmd=data).

    Eventuell gibt es noch eine weitere Alternative, wenn Du auf Deinem Wetterstationsserver z.B. eine Datenbank verwendest. Dann kannst Du den air-Q so konfigurieren, dass er die Daten via http-post an Deinen Server schickt. Auf Deinem Server brauchst Du dann einen entsprechenden Service, der diese http-post Anfragen bearbeitet. Wie das funktioniert, kannst Du z.B. aus https://forum.air-q.com/topic/93/eigene-air-q-datenbank/4 entnehmen, aber das ist auch in php geschrieben.

    Den Proxy hier in diesem Thread benötigst Du nur, wenn auf Clientseite also im Browser Daten vom air-Q eingebunden werden sollen. Und wenn Du diesen Weg wählen solltest, dann hast Du sofort ein Security-Problem. Der Code zur Abfrage Deines air-Q ist sichtbar und kann von jedem extrahiert und missbräuchlich verwendet werden.



  • @Micha
    Danke für die Blumen...
    Deine Diagramme sind ja super cool !!

    Ich bin ein copy und paste Programmierer 😉 Mit der Unterstützung der Entwickler kriege ich das dann irgendwie hin...aber wehe es fehlt ein Komma dann kack ich ab 😉

    Die Grafiken vom PWS Dashboard habe ich gemacht...ich Photoshope am liebsten 😉

    Ich hab einen eigenen WebServer priesterath.net oder cool..
    Der wird von einem Profi betreut der mir sicher alles installieren kann was nötig ist.

    Deine Datenbank Version ist sicher die beste Lösung und sieht echt Hammer aus !!!!
    10 Hoch 10 Pluspunkte dafür !!

    Ich habe jetzt 3 Luftsensoren nebeneinander draußen stehen, weil ich den Daten nicht traue gg
    Air-Q, Purple Air and IQAir Air Visual oder Germany vs. Schweiz vs. UST(rump)

    Ich teste den Air-Q für den Außen betrieb egal was passiert.
    Innen interessiert mich nicht...
    Sind alle Fenster offen und voll Durchzug passt das eh, aber sind sie geschlossen, es wird gekocht der Rottweiler furzt und ne Kippe brennt, dann ist alles verseucht und ich kann mich laut Daten gleich erschießen 😉

    Ich will die Daten allen zugänglich machen.
    Die drei Sensoren und die Offiziellen, zeichne ich jetzt ein paar Monate auf... Und dann ans Bundesumweltamt schicken und mal fragen was jetzt richtig ist 😉

    Ich mess halt gerne als Kältetechniker...:)

    Den Server werde ich jetzt mal vorbereiten lassen.....

    THX Sperber



  • Das Problem "Access-Control-Allow-Origin" ist mit Firmware-Version 1.61 behoben.

    D.h. diesen Proxy hier braucht man nicht mehr.


Log in to reply