Yun met twee sites en json op de verkeerde port.

Arduino specifieke Software
Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Yun met twee sites en json op de verkeerde port.

Berichtdoor Koepel » 17 Jan 2017, 14:47

Hallo, ik zit met een lastig probleem waar ik niet uit kom.

De Yun draait OpenWRT en op het IP nummer zit de admin configuratiepanel.
Ik wil er een website op draaien (misschien wel met php5 en sqlite3), en die website staat op een sd kaartje of usb stick op /mnt/sda1.

De webserver uhttpd heeft als home map /www met daar ook een cgi-bin map.
Daar staat een symlink 'sd' naar /mnt/sda1/arduino/www
Mijn website staat daarom op <IP>/sd/index.html
In mijn website kan ik dan geen cgi scripts draaien. Ook moet ik overal /sd voor de bestanden zetten terwijl ik algemene website wil, die ik nog kan verplaatsen.

Vervolgens maakte ik twee instances voor uhttpd. Op poort 81 het admin configuratiepanel en op poort 80 mijn usb stick.
Dat werkt en beide instances hebben hun eigen cgi-bin map. Ook de Bridge naar de ATmega32U4 werkt.

De local datastore is in ram, en daar wordt de json opgeslagen. Dat is bijna hetzelfde als de /REST interface. Die zit echter nauw verbonden aan het admin configuratiepanel, daardoor zit de json op poort 81.
In mijn webpagina gebruik ik zepto.min.js om json op te halen, maar die kan niet van poort 81 ophalen, alleen de eigen poort 80.
Dit werkt niet: $.getJSON("localhost:81/data/get", function(json) {


Wanneer ik json laat vervallen, dan zou ik de gegevens kunnen overdragen via een bestand, maar dan heb ik een script nodig om ze uit dat bestand te halen.
Als het usb stickje er niet in zit, dan moet ik natuurlijk nog steeds bij het admin configuratiepanel kunnen.

Ik weet zelf geen enkele oplossing, dus ik hoop dat iemand iets weet :?:

Advertisement

Gebruikers-avatar
Berichten: 631
Geregistreerd: 15 Nov 2015, 11:54

Re: Yun met twee sites en json op de verkeerde port.

Berichtdoor Gij Kieken » 17 Jan 2017, 16:06

Ik denk dat je in je router Port Forwarding zal moeten toepassen om de geblokeedre port 80 te omzeilen.
Ofwel dmz (dat is een ommetoertje om er toch te geraken).

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: Yun met twee sites en json op de verkeerde port.

Berichtdoor Koepel » 17 Jan 2017, 17:26

Port 80 en 81 doen het gewoon, ik zou er zelfs nog meer kunnen maken.
Maar mijn website zit op 80, en de json is blijkbaar verbonden met het admin panel op 81.
Waarschijnlijk is het niet mogelijk om met zepto.min.js van een andere site de json op te vragen. Met wget in een terminal kan ik dat wel.

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: Yun met twee sites en json op de verkeerde port.

Berichtdoor Koepel » 19 Jan 2017, 00:16

Misschien ben ik iets verder (hele diepe zucht).

Het blijkt dat /tmp in OpenWRT in ram is. Daar kan ik bestanden met parameters naar toe schrijven.

Wanneer ik iedere seconde de waarden in mijn webpagina vanaf de ATmega32U4 wil updaten, dan is FileIO erg belasten voor de cpu load in OpenWRT, een Bridge.put() naar json is te doen, en een runProcess met "echo" om een bestand te schrijven is nog net ietsje sneller.

Nu wil ik dat bestand in mijn HTML pagina lezen en met de waarden misschien een HTML5 canvas gauge laten zien.

Omdat ik nu PHP heb draaien, probeerde ik dit:
php code
<?php
print_r(parse_ini_file("/tmp/myData.ini"));
?>
Dan zie ik de waarden die de ATmaga32U4 heeft geschreven.

Zijn er nog andere (betere) manieren ?

Kan iemand mij helpen om dat in variabelen te lezen en iedere seconde te updaten, zodat ik kan zien wat die manier doet met de cpu load ?

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Yun met twee sites en json op de verkeerde port.

Berichtdoor nicoverduin » 19 Jan 2017, 13:00

Als je json format verstuurd moet een json parser gebruiken om de te decoderen. En die is er vast we ergens op het web.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: Yun met twee sites en json op de verkeerde port.

Berichtdoor Koepel » 19 Jan 2017, 13:50

Bij de Yun wordt daarvoor "zepto.min.js" gebruikt. Maar die kan alleen van de eigen port 80 de json ophalen, en niet van port 81. Dat zou niet alleen het script zijn, maar ook de browser die niet toestaat dat Javascript gegevens van een andere website ophaalt :?

Op dit moment ben ik bezig om de gegevens naar de webpagina te krijgen via een bestand in /tmp (dat in ram is). Dat bestand heb ik nu in php.ini-achtig formaat. Het lukt nog niet om dat iedere seconde te updaten in mijn html pagina.

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Yun met twee sites en json op de verkeerde port.

Berichtdoor nicoverduin » 19 Jan 2017, 15:11

Eerst om het voor mezelf te begrijpen:
a) je hebt eigenlijk 2 server toepassingen op de yun draaien.
b) waarvan er een op de Yun storage is opgeslagen en de ander op een USB stick.
c) en je gebruikt /tmp was transport medium tussen beide servers.
Klopt dat?
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: Yun met twee sites en json op de verkeerde port.

Berichtdoor Koepel » 19 Jan 2017, 19:08

Dat klopt bijna.
Ik gebruik de /tmp om gegevens van de ATmega32U4 over te brengen naar de OpenWRT linux kant. Dan geeft het niet op welke port de server draait.

Alles draait om de Bridge tussen de ATmega32U4 en OpenWRT. Bij alles wat ik probeer is de Bridge het probleem.
De Bridge in OpenWRT is in Python en dat kan de cpu in OpenWRT erg belasten.
Vanuit de ATmega32U4 kan ik via de Bridge bestanden schrijven en commando's geven en json data versturen naar OpenWRT.

Ik denk dat ik PHP bestanden kan draaien waar ik maar wil, maar als ik 1 server draai dan kan de cgi-bin map maar op één plaats zijn (denk ik) en die wordt al gebruikt voor het admin panel. Op mijn USB stick wil ik ook een cgi-bin map.

De json werkte goed met 1 server. Stel dat ik cgi-bin opgeef, en een soort keuzepagina maak van /www/index.html. Dan zou ik daar kunnen kiezen tussen het admin panel of mijn website op het USB stickje. Mijn website zou dan alle paden in de html code relatief kunnen doen.
Zou ik dan vanuit PHP een linux commando kunnen geven voor internet radio en het volume ?

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Yun met twee sites en json op de verkeerde port.

Berichtdoor nicoverduin » 19 Jan 2017, 19:45

De combi PHP en HTML wordt eigenlijk overal gebruikt. Ik heb jaren gewerkt met osCommerce voor mijn webwinkel. Dat zijn eigenlijk 2 toepassingen in een. De default gaat gewoon naar de winkel (voor alle gebruikers). De admin functie doe ik met een extensie. Alles werkt met relatieve paden. Anders valt er weinig te verhuizen.
Op mijn hosting provider heeft welke website (stuk of 7) zijn eigen cgi dus dat is geen enkel probleem.
Bij mijn web toepassingen heb ik 3 standaard folders (data, logs en wwwroot.
binnen wwwroot heb ik aspnet_client (gebruik ik niet), cgi-bin en search. Tevens heb ik in wwwroot index.htm staan.
Jij zou de optie kunnen hebben om dan inderdaad daar te switchen en beide applicaties in aparte folders kunnen zetten en via een button dan switchen. osCommerce doet eigenlijk hetzelfde alleen moet ik daar apart de admin folder meegeven in de URL. Daarna blijf je in dezelfde subfolder. Dus je gaat niet elke keer naar boven.

Ik ga naar de default winkel folder als volgt:
html code
<meta http-equiv="refresh" content="0;URL=catalog/index.php">


Dus mogelijk tijd om naar je architectuur te kijken van de server applicaties
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: Yun met twee sites en json op de verkeerde port.

Berichtdoor Koepel » 19 Jan 2017, 20:55

Bedankt, ik ben daar mee verder gegaan.

Mijn website op het USB stickje heeft nu .PHP bestanden, en alle paden in de broncode zijn relatief.
Ik heb alles terug gezet naar 1 server.
De Bridge.put() in de ATmega32U4 en het lezen van json met zepto.min.js en dat iedere seconde updaten, dat is weer hersteld.
De startpagina is nu een keuze tussen admin panel en mijn website op het USB stickje. Na een paar seconden schakel ik gewoon door naar mijn USB stickje.

Op mijn USB stickje kan ik inderdaad geen bestanden meer uitvoeren in mijn cgi-bin :(
Door een symbolic link te zetten in de echte /www/cgi-bin lukt het een beetje, maar dan is het pad in mijn html code niet meer relatief.

Met PHP kan ik al wel commando's uitvoeren:
Code: Alles selecteren
  $last_line = system('madplay -Q mp3/*.mp3 -o /dev/dsp1 &', $retval);
Dus internet radio zal ook wel lukken.

So far so good.

Aanvulling: Ik moest naast de '&' achteraan ook nog de '-Q' voor madplay toevoegen.
Laatst gewijzigd door Koepel op 19 Jan 2017, 21:11, in totaal 2 keer gewijzigd.

Volgende

Terug naar Arduino software

Wie is er online?

Gebruikers in dit forum: KeithGam en 42 gasten