Forum: Mikrocontroller und Digitale Elektronik Net-IO dyndns per PHP daten hohlen


von Juppo N. (juppo)


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;
}
?>

von Chris (Gast)


Lesenswert?

<?PHP sollte es heißen, weis aber nicht ob das auch die Lösung ist..

von Peter II (Gast)


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.

von Juppo N. (juppo)


Lesenswert?

AH HA

was muss ich für windows nehmen ?

von raketenfred (Gast)


Lesenswert?

schnapp dir mal xampp

das ist für anfänger sehr gut geeignet

von citb (Gast)


Lesenswert?

Einen, der sich damit auskennt. Der kann Dir auch gleich die 
Rechtschreibpruefung einschalten.

citb

von Peter II (Gast)


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.

von Peter II (Gast)


Lesenswert?

raketenfred schrieb:
> schnapp dir mal xampp
> das ist für anfänger sehr gut geeignet
und was soll er damit? Er will irgendwie werte loggen. Dafür braucht er 
keinen webserver sondern ein webclient.

von Juppo N. (juppo)


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

von Peter II (Gast)


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

von juppo (Gast)


Lesenswert?

Hallo

der controller hat keine fat ,sonder er arbeitet im ram.

deshalb ist "daten" auch nicht verhanden.

Gruß juppo

von citb (Gast)


Lesenswert?

juppo schrieb:
> deshalb ist "daten" auch nicht verhanden.
>
> Gruß juppo

Und wieso ist dann da was zu sehen?

citb

von juppo (Gast)


Lesenswert?

ob /daten oder /main ist irgend wie egal.

überlegung ist ob ich mit wget an den variablen von net-io komme.

juppo

von Sascha W. (sascha-w)


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

von Juppo N. (juppo)


Lesenswert?

Moin

So dann bekomme ich meine Werte im Browser zu sehen.
Wie kan ich diese in einer Datei ablegen ?

von Juppo N. (juppo)


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
?>

von Läubi .. (laeubi) Benutzerseite


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?

von Juppo N. (juppo)


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.