Hop til indhold
  • 0

Kommunikation mod WebSceneview - Løsning i PHP


Jan Petersen
 Share

Spørgsmål

Her er en løsning i php, der åbner op for muligheden for at læse og sætte værdier på controlleren (version 2 med viewer) via WebSceneView. Der burde være de samme muligheder som hvis det vises i en browser, men alt er dog ikke testet af.Installationen er simpel: (Du må gerne bytte om på punkt 1 & 2 :lol:)1)Pak php filen ud og ret login/password/ip-adresse i starten af den.2)Lav en scene i WebSceneView i SceneDesign med elementer du vil kunne se eller styre, efter disse regler:Keywords, værdier og kommandoer sættes i kontrollen:* Det keyword der ønskes benyttes, svarer til feltet "Betegnelse".* Værdien for tændt/slukket svarer til hhv Aktiv- og Inaktiv tekst.* Navnet på kommandoerne sættes i navnefeltet i underelementerne.3)Kør scriptet med php fra kommandolinjen, og du vil (forhåbentlig) få vist en liste over keywords og tilhørende værdier. Hvis der er underelementer der kan styres, vises de i kantede parenteser. Mit output ser bla. således ud:AlarmHverdag=06:30:00Vækning=Inaktiv [Aktiver, DeAktiver, Snooze]Hvis jeg kun vil se hvad tid alarmen er sat til, kalder jeg programmet som: php ihcc.php AlarmHverdagHvis jeg vil sætte vækning til, kalder jeg programmet som: php ihcc.php Vækning AktiverDet kan tilsyneladende ikke lade sig gøre at sætte bla. tidspunkter (Tag dig nu snart sammen, LK :angry:) men det har jeg løst med email kontrol, som er en helt anden historie..Lige en note eller 3:Jeg benytter Linux men det burde også virke fra Windows. Controlleren kører med iso-8859-1 tegnsæt og jeg benytter UTF-8, så det jeg læser fra controlleren bliver konverteret. - Bare et hint, hvis det ikke virker hos dig.Jeg tror det er en god regel, ikke at benytte mellemrumstegn i de navne og værdier der benyttes i SceneDesign.. Jeg er tilhænger af at dele viden og jeg håber nogen kan få glæde af dette program. Det har ihvertfald åbnet op for, at jeg nu bla både kan sætte og læse vækketidspunkt samt status vha sms :woohoo: Ændringer og forbedringer modtages gerne ;) God fornøjelse! [file name=ihcc.zip size=1629]http://ihc-user.dk/media/kunena/attachments/legacy/files/ihcc.zip[/file]

ihcc.zip

Link til kommentar
Del på andre sites

9 svar på dette spørgsmål

Recommended Posts

  • 0

Super tiltag. Godt gået og lidt karma herfra :cheer: Et par forslag/kommentarer:Hvis man har flere sider/webscenes var det måske en ide at man kunne angive dette i komandoen, uden at skulle rette i scriptet.i denne tråd :http://www.ihc-user.dk/index.php?option=com_kunena&Itemid=34&func=view&catid=7&id=12697#12697 efterlyses en løsning der kan logge data løbende og det kan man jo med dette scipt hvis det køres som cron job (eller på anden vis periodisk). Kunne du lave en udgave der er specifikt rette mod dette sådan at de data man ønsker udlæst bliver tilføjet en .dat / .log fil ?Er ikke specielt god til at programere fra bunden selv :blush: , men kan som regel godt finde ud af at modificere og rette lidt i eksisterende kode ;)

Link til kommentar
Del på andre sites

  • 0

Nå så fik jeg tid til at prøve og lege lidt med det, men jeg kan ikke få det til at virke :( Har instaleret WAMP (Windows, Apache, Mysql, PHP) på en PC. Det virker OK. Kan vise phpinfo og phpmyadmin.Har en websceneview sceneID 0 der hedder Test, med et KIPtryk, en lampe og en tæller (kwh). Retter Login/password/IP i ihcc.php så det passer, (virker i en browser når jeg kalder websceneview). Hvis jeg så åbner filen ihcc.php i en browser eller kører kommandoen php ihcc.php fra kommando linien viser den bare teksten/indholdet af filen. Det er som om der ikke eksekveres nogen kode. Hvad mon der mangler eller hvad gør jeg forkert ?

Link til kommentar
Del på andre sites

  • 0

Hej Lars,Prøv i første omgang at rette "<?" til "<?php" i starten af filen. Jeg tror det er derfor. Det kan sættes i php.ini, men i dit tilfælde er det nok nemmest at rette i scriptet.Mht de andre ting, kan det sagtens lade sig gøre. En god idé at benytte scriptet til en log funktion. I stedet for at køre det som et cronjob, ville jeg måske lave en funktionsblok som sender en email når den værdi der skal logges, bliver ændret, og starte scriptet derfra?Ved nærmere afprøvning, fandt jeg ud af at det ikke er alle værdier der bliver fanget, så det arbejder jeg i første omgang videre på./Jan

Link til kommentar
Del på andre sites

  • 0

Har rette /? til /?php og det hjalp lidt. Nu eksekveres koden, men med følgende fejl:

Notice: Undefined index: argc in C:\wamp\www\ihcc.php on line 126Notice: Undefined index: argc in C:\wamp\www\ihcc.php on line 127Fatal error: Call to undefined function http_post_fields() in C:\wamp\www\ihcc.php on line 48

Det er uden når php ihcc.php køres uden keywords eller andre argumenter.mht log vil jeg foretrække at man kan sætte tiden for hvor tit der skal logges. Jeg vil f.eks. anvende den til at logge temperatur, og kwh timer løbende (måske hver 1, 5, 60 minut), ikke om en tilstand nu er tilstæde. I den situation kan jeg godt se idéen med mail til at start scriptet kan anvendes.

Link til kommentar
Del på andre sites

  • 0

Godt arbejde! Min webserver understøtter desværre ikke http_post_fields() funtionen, og Synology har desværre ikke gjort det nemt at tilføje funktioner.jeg har rodet noget rundt, og har fundet følgende funktion som skulle kunne erstatte http_post_fields() men jeg kan ikke lige få det til at virke.. any one? function HttpRequest( $url, $method = 'GET', $data = NULL, $additional_headers = NULL, $followRedirects = true ) { # in compliance with the RFC 2616 post data will not redirected $method = strtoupper($method); $url_parsed = @parse_url($url); if (!@$url_parsed['scheme']) $url_parsed = @parse_url('http://'.$url); extract($url_parsed); if(!is_array($data)) { $data = NULL; } else { $ampersand = ''; $temp = NULL; foreach($data as $k => $v) { $temp .= $ampersand.urlencode($k).'='.urlencode($v); $ampersand = '&'; } $data = $temp; } if(!@$port) $port = 80; if(!@$path) $path = '/'; if(($method == 'GET') and ($data)) $query = (@$query)?'&'.$data:'?'.$data; if(@$query) $path .= '?'.$query; $out = "$method $path HTTP/1.0\r\n"; $out .= "Host: $host\r\n"; if($method == 'POST') { $out .= "Content-type: application/x-www-form-urlencoded\r\n"; $out .= "Content-length: " . @strlen($data) . "\r\n"; } $out .= (@$additional_headers)?$additional_headers:''; $out .= "Connection: Close\r\n\r\n"; if($method == 'POST') $out .= $data."\r\n"; if(!$fp = @fsockopen($host, $port, $es, $en, 5)){ return false; } fwrite($fp, $out); while (!feof($fp)) { $s = fgets($fp, 128); echo $s; if ( $s == "\r\n" ) { $foundBody = true; continue; } if ( $foundBody ) { $body .= $s; } else { //echo $s; if(($method != 'POST') and ($followRedirects) and (preg_match('/^Location:(.*)/i', $s, $matches) != false) ) { fclose($fp); return HttpRequest( trim($matches[1]) ); } $header .= $s; if(preg_match('@HTTP[/]1[.][01x][\s]{1,}([1-5][01][0-9])[\s].*$@', $s, $matches)) { $status = trim($matches[1]); } } } fclose($fp); return array('head' => trim($header), 'body' => trim($body), 'status' => $status); }

Link til kommentar
Del på andre sites

  • 0

http_post_fields() ligger i en PEAR extension som hedder pecl_http, men det ser umiddelbart ud til at PEAR ikke er helt porteret til Windows? http_get() som også benyttes, ligger i samme extension :( Det må være muligt at finde en erstatning men husk på, at disse rutiner skal understøtte https://Ellers kan det jo være en løsning at lave det i .NET under Windows, er der nogen der er friske på det? :woohoo: Pt vil jeg helst koncentrere mig om at forbedre programmet, den erfaring vil også kunne benyttes ved en evt portering. Måske er der nogen out there som har bedre erfaring med php under Windows end mig? - Ellers kigger jeg gerne på det, når jeg har fået det andet på plads :cheer:

Link til kommentar
Del på andre sites

  • 0

Ja, det er godt at der endelig er kommet skub i udviklingen:-) Jo mere jo bedre! Lad os dele erfaringerne, så skal vi nok få noget godt ud af det.Umiddelbart tror jeg du kan ignorere fejlene om linje 126&127 hvis du ikke bruger argumenter på kommandolinjen. Grunden til fejlen kan være enten at php versionen er < 4.1 eller en indstilling i php.ini. Du kan evt prøve at erstatte $_SERVER['argc'] med $argc og $_SERVER['argv'] med $argv.

Link til kommentar
Del på andre sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gæst
Svar på dette spørgsmål

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loader...
 Share

×
×
  • Tilføj...

Important Information

Privatlivspolitik og We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.

1200x630bb.png

ok