Net-IO dyndns per PHP daten hohlen

OP #2206148
Lesenswert?

Hallo an alle die mit dem NET-IO arbeiten


Ich habe ein Net-IO Board unter
www.joseffranz.dyndns-remote.com am laufen.

Da läuft die Radig Software drauf ,etwas abgewandelt.

Man kann die analogen Daten per PHP Sript irgendwie abhohlen.

Ich habe auf einen externen Rechner PERL installiert.

habe aber keine ahnung von PHP .

Ziel ist es die analogen werte vom NET-IO zu loggen.

Bitte um Hilfe.

wenn ich "perl func.php" aufrufe kommt eine Fehlermaeldung auf Zeile 1.
Ist sicherlich nur eine function ??


<?
php
# ------------------------------------------------
# Datei: func.php
# ------------------------------------------------
# Beschreibung:
# Stellt zentrale Funktionen zur Verfuegung:
# - getAVRNetIOValue()
# ------------------------------------------------
# Autor: Christian Haeussler
# geändert am: 19.01.2009
# ------------------------------------------------

function getAVRNetIOValue($id) {
  $value = NULL;
  $handle = fopen("http://joseffranz.dyndns-remote.com/daten.html";, "r") 
or die("Die Werte des AVR-Net-IO konnten nicht abgerufen werden!");
  while ( ($data = fgetcsv($handle, 1000, "=")) !== FALSE ) {
      $num = count($data);
      $row++;
      if ($data[0] == $id) {
        $value = $data[1];
      }
  }

  fclose($handle);

  return $value;
}
?>
Gast #2206164
Lesenswert?

Juppo Nini schrieb:
> wenn ich "perl func.php" aufrufe kommt eine Fehlermaeldung auf Zeile 1.
> Ist sicherlich nur eine function ??

also php muss man mit php und nicht mit perl starten. Perl hat nichts 
mit php zu tun. Es sind 2 getrennte spachen und es gibt 2 verschienden 
interpreter dafür.
Gast #2206179
Lesenswert?

Juppo Nini schrieb:
> was muss ich für windows nehmen ?

was du willst, es ist nur eine ganze einfach webanfrage. Dafür kann man 
so ziehmlich jeden Programmiersprache verwenden.

Was willst du später damit machen, welche Sprache kannst du?

Unter windows kann man es mit

batch und wget
perl
windows scripting host
c#
c++
usw machen.
OP #2206202
Lesenswert?

hallo nochmal

ich möchte die analogen werte des net-io in einen einstellbaren 
zeitfenster auf den windows rechner loggen.


verbindung über dyndns

geht das auch mit get und post ??

Wie muss dann das html sript auf dem net-io aussehen ?

das php hatte ich gefunden.
man schreibt das könnte dann auf dem ftp-server laufen und per cron jop 
zyklisch aufrufen.

Gruß Juppo
Gast #2206206
Lesenswert?

Juppo Nini schrieb:
> hallo nochmal
>
> ich möchte die analogen werte des net-io in einen einstellbaren
> zeitfenster auf den windows rechner loggen.
gut

> verbindung über dyndns
ist egal aber gut zu wissen

> geht das auch mit get und post ??
ich kenne zwar das NET-IO nicht aber ich vermute mal get

> Wie muss dann das html sript auf dem net-io aussehen ?
es gibt kein html script. Wenn du mit dem browser das richtige sieht 
wird es wohl schon stimmen.

> das php hatte ich gefunden.
> man schreibt das könnte dann auf dem ftp-server laufen und per cron jop
> zyklisch aufrufen.
wozu den aufwand kann der windows rechner nicht direkt as netio abfrage?


lade dir mal wget für windows runter und spiele damit rum

wget http://joseffranz.dyndns-remote.com/daten.html
#2206441
Lesenswert?

auf deinem NET-IO liegt die Datei 'data.json', die u.a. die aktuellen 
Werte enthält, und vom Browser alle 500ms geladen wird.
Um es möglichst einfach zu machen lege dir auf dem NET-IO eine Datei an, 
die <b>nur</b> die Messwerte enthält, die du brauchst. Die Datei lädst 
du zyklich z.B. mit AutoIt (ist rech einfach) und liest die Werte aus 
der Datei aus.

Sascha
OP #2215023
Lesenswert?

Hallo und Guten morgen

Ich bin ein Stück weiter mit mein Projekt.

Möchte Daten vom NET-IO Board auslesen.


Das PHP Sript läuft super mit der Orginalsoftware.

Es wird getadc 1 aufgerufen und die Daten werden in einer Datei mit Time 
Stempel gespeichert.

Nun versuche ich die funktion "getadc" oder andere
"fwrite($sock,"IP \r\n");" aufzurufen und auch in einer Datei zu 
speichern.

Leider bekomme ich nur "0" zurück.

Wie macht die Orginalsoftware von POLLIN das ?

oder wie muss ich die bei der function zurückgeben ?

zb:
void command_ip (void)
{
  write_eeprom_ip(IP_EEPROM_STORE);
  (*((unsigned long*)&myip[0])) = 
get_eeprom_value(IP_EEPROM_STORE,MYIP);
  usart_write("My IP: 
%1i.%1i.%1i.%1i\r\n",myip[0],myip[1],myip[2],myip[3]);
}
1
<?php
2

3
/*
4
    Programm "avr_poll.php" wird jede Minute über "Geplante Tasks" aufgerufen:
5
    "c:\php\php-win.exe avr_poll.php"
6

7
    Parameter:
8
    Rv=2210 Ohm
9
    UFühler=4,98V
10
    Uref=3,42V
11

12
    -> Temp=(Digit-401)/2,5
13

14
*/
15

16

17
$path=".\\";
18
//$path="c:\xampp\php";
19
$avr_adresse="192.168.0.91";
20
$avr_port="23";
21

22
function make_filename() {
23
   global $path;
24
//   $fname=$path.'Heizung_'.date('m_Y').'.csv';
25
   $fname=$path.'TEST_NETIO'.date('m_Y').'.txt';
26
   if (!file_exists($fname)) {
27
      $hd=fopen($fname,"w");                     // Überschrift, wenn Datei neu
28
      fwrite($hd,"Datum / Zeit;Taußen;Tvor;Trück;Brenner\r\n");
29
      fclose($hd);
30
   }
31
   return($fname);                               // ".\Heizung_09_2010.csv"
32
}
33

34

35

36
// ---------------------- Main() ------------------------
37

38

39

40
$sock = @fsockopen($avr_adresse, $avr_port, $errno, $errstr, 15);
41
if ($sock===FALSE)
42
   exit;                                  // raus, wenn offline (nach 15 Sek.)
43
fwrite($sock,"initlcd\r\n");              // zu Beginn das LCD initialisieren
44
fread($sock,128);                         // void: response !immer! abholen!
45
fclose($sock);
46

47
// ------------------------------------------------------
48

49
$sock = @fsockopen($avr_adresse, $avr_port, $errno, $errstr, 15);
50
fwrite($sock,"IP \r\n");
51
//$ret1=trim(fread($sock,128));             // Aussentemperatur
52
$ret1=fread($sock,128);             // Aussentemperatur
53
usleep(1000);
54
/*
55
fwrite($sock,"getadc 2\r\n");
56
$ret2=trim(fread($sock,128));             // Vorlauftemperatur
57
usleep(1000);
58

59
fwrite($sock,"getadc 3\r\n");
60
$ret3=trim(fread($sock,128));             // Rücklauftemperatur
61
usleep(1000);
62
*/
63
fwrite($sock,"getadc 4\r\n");
64
$ret4=trim(fread($sock,128));             // indiktiver Magnetventil-Sensor
65

66
// ------------------------------------------------------
67

68
$datetime=date("d.m.Y H:i");
69
$lcd1="writelcd 1.$datetime\r\n";
70

71
//$taussen=($ret1-401)/2.50;                // lt. Excel s.o.
72
$taussen=($ret1);                // lt. Excel s.o.
73
$tvor=($ret2);
74
$trueck=($ret3);
75

76
if ($ret4>50) {                           // muss Schwelle überschreiten
77
   $brenner="1";
78
   $brenner_sternchen="*";
79
} else {
80
   $brenner="0";
81
   $brenner_sternchen=" ";
82
}
83

84
$lcd2="writelcd 2.".sprintf("Ta%3d Tv%2d Tr%2d%1s\r\n",round($taussen),round($tvor),round($trueck),$brenner_sternchen);
85

86

87
fwrite($sock,$lcd1);                      // "13.09.2010 17:46"
88
fread($sock,128);
89

90
fwrite($sock,$lcd2);                      // "Ta-10 Tv55 Tr35*"
91
fread($sock,128);
92

93
fclose($sock);                            // fertig beim AVR-Board
94

95
// ------------------------------------------------------
96

97
$temps=sprintf("%.1f;%.1f;%.1f",$taussen,$tvor,$trueck);
98
$temps=str_replace(".",",",$temps);       // deutsches Format: Fließzahl mit ","
99
$zeile=sprintf("%s;%s;%s\r\n",$datetime,$temps,$brenner);
100
                                          // "13.09.2010 21:13;5,7;45,3;35,0;1"
101

102
$fname=make_filename();                   // Datei ggf. neu anlegen
103
$hd=fopen($fname,"a");
104
fwrite($hd,$zeile);                       // Zeile wegschreiben
105
fclose($hd);
106

107

108
?>
Persönliche Seite #2215124
Lesenswert?

Juppo Nini schrieb:
> Nun versuche ich die funktion

Zumindest für das testen wäre es sicher ungemein hilfreich bei fsockopen 
nicht alle Fehler mittels des vorrangestelltem @ zu unterdrücken ;)
Ansosnten scheint mir das alles doch recht optimistisch programmiert zu 
sein, hast du es den schonmal mit einem minimalistischem Programm und 
ein paar Debugausgaben probiert?
OP #2215460
Lesenswert?

Hallo

Wie schon geschrieben läuft es mit der Orginal Pollin Software.
Git es dazu die Sourcen ?

Bin auch soweit das mit der Radig software ich die funktionen über 
realterm

telnet (192.169...) ansprechen kann und die ausgeführt werden.

"ad CRLF"
es werden die werte c1,c2,c3 zurückgesendet.

zb.
in cmd.c von AVR


void command_ad (void)
{
  unsigned char c1 = 101;
  unsigned char c2 = 102;
  unsigned char c3 = 103;
  usart_write ("%2i%2i%2i\r\n",c1,c2,c3);

  lcd_print(1,0,"%s","command_ad");
//    return(c1);
//  usart_write ("%i",193);
}



dann hab ich mir gedacht das das PHP Sript
die funktion "ad" auch aufruft.
aber dem ist nicht so ,sehe ich an der lcd ausgabe.



$sock = @fsockopen($avr_adresse, $avr_port, $errno, $errstr, 15);
fwrite($sock,"ad \r\n");
//$ret1=trim(fread($sock,128));             // Aussentemperatur
$ret1=fread($sock,128);             // Aussentemperatur
usleep(1000);



das PHP Sript habe ich nicht selber geschrieben sonder irgendwo 
gefunden.
Macht aber genau das was ich möchte.

Gruß Juppo

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren