[PHP] url triggeren in PHP

Pagina: 1
Acties:

Onderwerpen

Vraag


Acties:
  • 0 Henk 'm!

  • henryd
  • Registratie: Maart 2009
  • Laatst online: 22-06 15:45
Ik wil vanuit PHP deze url laten uitvoeren / triggeren:

http://mijnsite.nl:8080/j...light&idx=57&switchcmd=On

Ik plaats het op php forum omdat het volgens mij meer PHP vraagstuk is dan dat het iets met domoticz te maken heeft.
...

Doel: Hiermee in domoticz een lamp inschakelen.
...

Wat ik al gevonden of geprobeerd heb maar wat niet werkt.

code:
1
2
3
4
5
6
7
<?php 
$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL, "http://url:8080/json.htm?type=command&param=switchlight&idx=57&switchcmd=On");
curl_setopt ($ch, CURLOPT_HEADER, 0);
curl_exec ($ch);
curl_close ($ch);
?>

Alle reacties


Acties:
  • 0 Henk 'm!

  • regtur2
  • Registratie: December 2008
  • Laatst online: 19-09 08:00
Welke foutmelding krijg je?

Misschien mis je de curl extensie en kun je beter gebruik maken van fopen (http://php.net/manual/en/function.fopen.php)

fopen("http://www.example.com/", "r");

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

henryd schreef op dinsdag 26 januari 2016 @ 20:26:
Wat ik al gevonden of geprobeerd heb maar wat niet werkt.
Oh! Het werkt niet! Duidelijk!

;)

Wát werkt er niet? Doet het niks? Krijg je een foutmelding? Crasht je hele systeem? Loopt je webserver vast? Wordt de URL wel aangeroepen maar werkt het aan de andere kant niet? Probeer je bij het openen van topics (zowel op GoT als elders) eens in te leven in de mensen die meelezen en niet op je scherm kunnen kijken. Als je niet alles omschrijft dat er gebeurt is je topic gewoon niet bruikbaar, wat betekent dat je minder kans hebt op een antwoord.

Ik zou niet klooien met cURL voor zoiets simpels en ook fopen is wat veel van het goede, dan zit je ineens met een file pointer die je eigenlijk ook weer moet sluiten. Met domweg file_get_contents zou je er ook moeten komen.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
Er is ook iets als allow_url_fopen he, en er is een situatie waarin beiden niet kan, zie bijv. http://en.code-bude.net/2...-without-allow_url_fopen/

Ik zou de command line versie van curl nemen, en
curl -v "http://url:8080/json.htm?type=command&param=switchlight&idx=57&switchcmd=On"

doen om te kijken of dat wel werkt. Zo ja, ligt het aan de installatie van php (zie zeg link hierboven), zo nee, dan ligt het aan een foute url/foute headers die curl gebruikt.. Je kunt ook met iets als tcpdump / Wireshark kijken wat er nu precies gebeurd.

(Sowieso zou een lamp inschakelen eigenlijk niet een GET request mogen zijn..)

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


Acties:
  • 0 Henk 'm!

  • henryd
  • Registratie: Maart 2009
  • Laatst online: 22-06 15:45
@NMe: met hij doet niks bedoel ik :hij blijft maar laden. geen foutmelding. (had ik er inderdaad even bij moeten zetten.

tsja het vreemde is als ik fopen gebruik of het via curl doe dat hij ook maar blijft laden.
Als ik andere url neem zoals google.com dan gaat het wel goed.

Dan zou je natuurlijk gelijk denken dat de url misschien niet bereikbaar is vanaf de webserver. Ik heb in domoticz IP adres van de webserver gewhitelist. Dus zou niks te maken moeten hebben met IP adres dat het niet mag.

Weet iemand of het uberhaupt wel mogelijk is dat dit via PHP kan? Als ik de url intik in de browser en op enter druk gaat het lampje aan. en krijg ik respons in de browser waarin staat
{
"status" : "OK",
"title" : "SwitchLight"
}

Maar dit hoef ik niet perse in PHP binnen te krijgen. Ik wil in eerste instantie gewoon dat de url wordt geactiveerd door PHP en de lamp gaat branden.

Acties:
  • 0 Henk 'm!

  • Rekcor
  • Registratie: Februari 2005
  • Laatst online: 05-09 21:08
Als het in de browser kan, kan het ook in PHP.

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Rekcor schreef op woensdag 27 januari 2016 @ 12:16:
Als het in de browser kan, kan het ook in PHP.
Aangenomen dat de host waar de PHP op uitgevoerd wordt ook bij de betreffende host die de lamp aanstuurt kan. En dat lijkt me nu eerder het probleem. Misschien een DNS probleem, misschien een routing en/of subnet probleem, misschien een firewall probleem of iets anders in die richting.

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • henryd
  • Registratie: Maart 2009
  • Laatst online: 22-06 15:45
UPDATE: ik weet waar het probleem vandaan komt! Maar nog niet hoe ik het op moet lossen.

Ik heb het even op mn lokale webserver geprobeerd en daar werkt het direct!

het ligt dus of dat de aanmelding niet goed verloopt; toch vreemd want ik heb het ip gewhitelist. Lag dus niet aan het script maar aan de domoticz software of authenticatie.

Ik weet genoeg! Voor dit probleem ga ik naar het domoticz forum. Thnx voor jullie hulp! zeker geholpen.

Acties:
  • 0 Henk 'm!

Verwijderd

Een file_get_contents moet genoeg zijn hiervoor.
Ik doe het zo:
PHP:
1
2
3
4
5
6
7
8
9
function sw($idx,$state="",$name=""){
    print $this->stamp."  --- SWITCH ".$idx." ".$name." ".$state."
";
    if(empty($state))
        file_get_contents($this->api."json.htm?type=command&param=switchlight&idx=".$idx."&switchcmd=Toggle");
    else
        file_get_contents($this->api."json.htm?type=command&param=switchlight&idx=".$idx."&switchcmd=".$state);
    usleep(250000);
}

Acties:
  • 0 Henk 'm!

  • Ventieldopje
  • Registratie: December 2005
  • Laatst online: 19-09 11:00

Ventieldopje

I'm not your pal, mate!

Er zijn veel manieren om de interactie aan te gaan met API's en daarom ook vrij veel oplossingen. Zelf gebruik ik graag Httpful, een kleine library die het makkelijk maakt om allerlei soorten requests te doen naar je API en om te gaan met authenticatie en de response.

De implementatie van cURL in PHP is zo oud als de weg naar rome en totaal niet meer van deze tijd maar wel de meest betrouwbare en flexibele. Vandaar dat er libraries zijn die als een moderne wrapper om cURL gebouwd zijn om zowel je leven als programmeur makkelijker te maken zonder in te leveren op flexibiliteit.

Maar goed, dat is allemaal offtopic want het ligt dus waarschijnlijk aan de Domoticz software ;)

www.maartendeboer.net
1D X | 5Ds | Zeiss Milvus 25, 50, 85 f/1.4 | Zeiss Otus 55 f/1.4 | Canon 200 f/1.8 | Canon 200 f/2 | Canon 300 f/2.8


Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Ik snap de conclusie dat het aan die software ligt niet zo. Er worden maar geen concrete foutmeldingen getoond, maar alle symptomen wijzen imo juist op een verbinding die niet klopt.
Bijvoorbeeld, maar dat is gokken omdat specifieke foutmeldingen niet benoemd worden, een server die uberhaupt niet externe dingen mag aanroepen, firewall/nat config, of een url met een DNS of IP welke enkel op jouw LAN werkt.

Maar verder welles/nietes heeft geen zin zonder debug info.

{signature}


Acties:
  • 0 Henk 'm!

  • Rmg
  • Registratie: November 2003
  • Laatst online: 13:59

Rmg

henryd schreef op woensdag 27 januari 2016 @ 11:19:
@NMe: met hij doet niks bedoel ik :hij blijft maar laden. geen foutmelding. (had ik er inderdaad even bij moeten zetten.

tsja het vreemde is als ik fopen gebruik of het via curl doe dat hij ook maar blijft laden.
Als ik andere url neem zoals google.com dan gaat het wel goed.

Dan zou je natuurlijk gelijk denken dat de url misschien niet bereikbaar is vanaf de webserver. Ik heb in domoticz IP adres van de webserver gewhitelist. Dus zou niks te maken moeten hebben met IP adres dat het niet mag.
zitten Domoticz en de webserver toevallig in het eigen lokale netwerk? en probeer je Domoticz te benaderen via een adres die resolved naar het wan ip?

Acties:
  • 0 Henk 'm!

Verwijderd

henryd schreef op woensdag 27 januari 2016 @ 11:19:
Ik heb in domoticz IP adres van de webserver gewhitelist.
Heb je ook poort 8080 opengezet?

Acties:
  • 0 Henk 'm!

  • belrpr
  • Registratie: Februari 2010
  • Laatst online: 20-09 11:17
Idd firewall laat geen :8080 toe

Acties:
  • 0 Henk 'm!

  • Merethil
  • Registratie: December 2008
  • Laatst online: 11:49
belrpr schreef op zondag 05 juni 2016 @ 15:52:
Idd firewall laat geen :8080 toe
Want iedere firewall werkt hetzelfde? ;)

Kom trouwens nog bij: 8080 is de alternative HTTP port, deze staat juist vaak wél standaard open in Firewalls omdat 't een veelgebruikte poort voor webservers is. Wat eventueel natuurlijk wel zou kunnen is dat er nog port forwarding oid moet gebeuren (ik gok in ieder geval dat de machine waarop het lampje getriggerd moet worden geen VPS bij een hosting partij is o.i.d, dat zou nogal gek zijn)

[ Voor 52% gewijzigd door Merethil op 05-06-2016 16:25 ]


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Ik gok zomaar dat dit probleem ruim vier maanden later niet meer relevant is. ;)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

Verwijderd

Oh.../shakefist@guy ;)
Pagina: 1