Situatie schets:
Een solar inverter van het merk GoodWe is enkel in staat te communiceren over HTTP / Wireless met een server in China. Ik wil dit graag binnen mijn eigen muren afhandelen. Eerste instantie geprobeerd om dit te doen via de USB poort onderaan het apparaat. Helaas no luck.
Als alternatief heb ik nu een Raspberry Zero ingericht als Wireless AP en daarmee de inverter laten verbinden. Nu loopt dus al het verkeer van de omvormer via de raspberry. Bingo.. Middels iptables zorg ik er nu voor dat al het verkeer vanaf de omvormer wordt doorgestuurd naar het lokale ip-adres van de raspberry.
Nu is het idee om al de communicatie van de omvormer af te laten handelen door een PHP script op de webserver op de raspberry. Daar ontstaat het probleem. De HTTP client van omvormer is een zeer eenvoudige implementatie kennelijk, want een HTTP-code 301 snapt de omvormer niet.
De omvormer doet altijd een POST naar http://www.goodwe-power.com/Acceptor/Datalog. Door de ip-tables aanpassing zie ik netjes in de logs van Apache dat er elke 10 seconde een verzoek binnenkomt voor URL /Acceptor/Datalog. Dus dat stuk werkt. Ik heb daarop dus een RewriteRule gemaakt in .htaccess om het verzoek naar /Acceptor/Datalog te laten doorsturen naar /Acceptor/Datalog/index.php.
Echter wat ik ook probeer, Apache blijft een 301 sturen naar /Acceptor/Datalog/. De omvormer snapt dit echter niet en daar loopt de communicatie met de omvormer dus dood.
Ik doe iets fout in de .htaccess, maar krijg het niet voor elkaar om dit correct op te zetten. Zover ik weet moet je een internal redirect kunnen doen, maar Apache lijkt alles als External Redirect te beschouwen.
Wie zou me kunnen helpen om .htaccess correct te krijgen?
Omdat index.php een default document is, had ik gehoopt dat het wat eenvoudiger zou zijn. Dit bleek niet uit te maken, dus doe ik het volgende:
Middels onderstaande rewrite probeer ik /Acceptor/Datalog te laten wijzen naar /Acceptor/Datalog.php. Resultaat: 404. Dus deze is niet goed.
Deze ook geprobeerd door elk verzoek door Apache de .php extensie achter te laten zetten. Dus /Acceptor/Datalog zou dan /Acceptor/Datalog.php moeten worden. Ook geen succes.
De error log toont het volgende:
Dus de internal redirect stuk werkt, maar ik snap niet waarom apache probeert om url '/Acceptor/Datalog.php.php' te openen. Wat doe ik niet goed.
Een solar inverter van het merk GoodWe is enkel in staat te communiceren over HTTP / Wireless met een server in China. Ik wil dit graag binnen mijn eigen muren afhandelen. Eerste instantie geprobeerd om dit te doen via de USB poort onderaan het apparaat. Helaas no luck.
Als alternatief heb ik nu een Raspberry Zero ingericht als Wireless AP en daarmee de inverter laten verbinden. Nu loopt dus al het verkeer van de omvormer via de raspberry. Bingo.. Middels iptables zorg ik er nu voor dat al het verkeer vanaf de omvormer wordt doorgestuurd naar het lokale ip-adres van de raspberry.
Nu is het idee om al de communicatie van de omvormer af te laten handelen door een PHP script op de webserver op de raspberry. Daar ontstaat het probleem. De HTTP client van omvormer is een zeer eenvoudige implementatie kennelijk, want een HTTP-code 301 snapt de omvormer niet.
De omvormer doet altijd een POST naar http://www.goodwe-power.com/Acceptor/Datalog. Door de ip-tables aanpassing zie ik netjes in de logs van Apache dat er elke 10 seconde een verzoek binnenkomt voor URL /Acceptor/Datalog. Dus dat stuk werkt. Ik heb daarop dus een RewriteRule gemaakt in .htaccess om het verzoek naar /Acceptor/Datalog te laten doorsturen naar /Acceptor/Datalog/index.php.
Echter wat ik ook probeer, Apache blijft een 301 sturen naar /Acceptor/Datalog/. De omvormer snapt dit echter niet en daar loopt de communicatie met de omvormer dus dood.
Ik doe iets fout in de .htaccess, maar krijg het niet voor elkaar om dit correct op te zetten. Zover ik weet moet je een internal redirect kunnen doen, maar Apache lijkt alles als External Redirect te beschouwen.
Wie zou me kunnen helpen om .htaccess correct te krijgen?
Omdat index.php een default document is, had ik gehoopt dat het wat eenvoudiger zou zijn. Dit bleek niet uit te maken, dus doe ik het volgende:
Middels onderstaande rewrite probeer ik /Acceptor/Datalog te laten wijzen naar /Acceptor/Datalog.php. Resultaat: 404. Dus deze is niet goed.
code:
1
2
3
| Options +MultiViews RewriteEngine On RewriteRule Datalog Datalog.php [L] |
Deze ook geprobeerd door elk verzoek door Apache de .php extensie achter te laten zetten. Dus /Acceptor/Datalog zou dan /Acceptor/Datalog.php moeten worden. Ook geen succes.
code:
1
2
3
4
| Options +MultiViews RewriteEngine On RewriteCond %{REQUEST_FILENAME}.php -f RewriteRule ^(.*?)/?$ /$1.php [NC,L] |
De error log toont het volgende:
code:
1
2
3
| d#b62b2058/subreq] [perdir /var/www/html/] applying pattern '^(.*?)/?$' to uri 'Acceptor/Datalog.php' [Sun Jun 11 18:03:17.450946 2017] [rewrite:trace2] [pid 9657] mod_rewrite.c(475): [client 192.168.50.64:55091] 192.168.50.64 - - [www.goodwe-power.com/sid#b5937e30][rid#b62b2058/subreq] [perdir /var/www/html/] rewrite 'Acceptor/Datalog.php' -> '/Acceptor/Datalog.php.php' [Sun Jun 11 18:03:17.452261 2017] [rewrite:trace1] [pid 9657] mod_rewrite.c(475): [client 192.168.50.64:55091] 192.168.50.64 - - [www.goodwe-power.com/sid#b5937e30][rid#b62b2058/subreq] [perdir /var/www/html/] internal redirect with /Acceptor/Datalog.php.php [INTERNAL REDIRECT] |
Dus de internal redirect stuk werkt, maar ik snap niet waarom apache probeert om url '/Acceptor/Datalog.php.php' te openen. Wat doe ik niet goed.
Signature van nature