Forum: Mikrocontroller und Digitale Elektronik PHP-Script verarbeiten


von Hi M. (himmelreich)


Lesenswert?

Hallo Zusammen,

ich hab zur Überwachung meiner Heizung ein PHP-Script geschrieben das 
alle 5 Minuten die Temperaturdaten an volkszähler sendet. Dies 
funktioniert auch soweit einwandfrei auf meinem Laptop

Um die Datenübertragung dauerhaft zu betreiben verbraucht der Laptop 
aber zu viel Energie

Ein AVR-NET-IO hab ich zuhause herumliegen, könnte man damit das script 
verarbeiten lassen?

Oder ist für diese Lösung ein Mini-PC wie z.B. Raspberry Pi sinnvoller.

Das Script holt die Daten von der Heizung filtert diese und sendet es 
dann formatiert an volkszähler

Was wäre die beste Lösung welche dann auch so wenig wie möglich Energie 
verbraucht

Im Voraus schon mal Danke für eure Antwort

Gruß Himmelreich

von Weingut P. (weinbauer)


Lesenswert?

PHP auf dem NetIO?

nee, eher nicht ... aber das RasPi kann das
Apache und PHP, kein Problem.

von himmelreich (Gast)


Lesenswert?

Hallo weinbauer,

Danke für deine Antwort.

Gibt es noch was kleineres im bezug auf Energieverbrauch als das RasPi 
was das gewüschte ausführen kann?

Ich hab auch noch einen Wlan-Accespoint Linksys WRT54GL mit Tomato 
Firmware der tagsüber läuft.
Kann nicht der das Skript ausführen, denn die Konfigurations-Oberfläche 
wird ja über den Browser aufgerufen, sprich es ist also schon ein 
Webserver integriert oder?

Danke schon mal für eure Hilfe

Gruß
Himmelreich

von cyprius (Gast)


Lesenswert?

Wie komplex ist denn dein PHP-Skript? Wenn es einfach nur Daten irgendwo 
hin POSTet, kannst du auch mit dem NetIO eine TCP-Verbindung aufmachen 
und das selbst erledigen :)

von McLovin (Gast)


Lesenswert?

Genau, sehe das auch so wie cyprius. Im Prinzip musst du ja nur 
vorgefertigte Pakete an den Volkszähler senden, die je nach Messwert 
entsprechend modifiziert werden, die Header bleiben aber ja immer 
gleich. Von daher sollte das mit dem NetIO gehen.

Mit dem WRT54GL würde das von der Rechenleistung her wohl auch gehen, da 
ist nachdem was ich gerade gesehen habe wohl auch GPIO dran, über die 
Pins müsstest du die Messwerte also auch lesen können. Das ist 
vermutlich die einfachste Lösung.

von Himmelreich (Gast)


Lesenswert?

Hallo zusammen,

und danke für eure Antwort.

Das Script sieht aus wie folgt:
1
<?php
2
$anfang_z = 'pm ';
3
$zei_ers = array("\n", " ");
4
5
//$telnet = fopen("E:\\Heizung\\hz.txt", "r");
6
7
$telnet = fsockopen("192.168.1.100", "23", $errno, $errstr, 5);
8
9
if (!$telnet){
10
    echo "ERROR: $errno - $errstr<br />\n";
11
    exit();
12
}
13
else{
14
15
     $dat_zeile = fgets($telnet, 500);
16
     //echo $dat_zeile;
17
18
     // Stringanfang finden
19
     $anfang = strpos($dat_zeile, $anfang_z) +3;
20
     //echo $anfang ;
21
     // Teilstring ohne Anfang herausschneiden
22
     $rest = substr($dat_zeile, $anfang, 500);
23
     //echo "Rest: $rest";
24
25
     $laenge = strlen(trim($rest));
26
     //echo "Länge: $laenge";
27
     $rest_2 = trim(substr($rest, 0, $laenge));
28
     //echo $rest_2;
29
     $test = str_replace($zei_ers, ";", $rest_2);
30
     //echo $test;
31
32
     $arr = explode(';',$test);
33
     //print_r( $arr );
34
35
     list($Temp_Ofen, $Temp_Abgas, $Lambda, $Puffer_Oben, $Puffer_Mitte, $Puffer_unten, $Temp_Aussen, $HK1_Vorlauf_IST, $TVL_2, $Raum_1_TR1, $TR2, $TB1_Boiler, $Hk1_Vorl_Soll_TVLs_1, $TVLs_2, $TRs_1, $TRs_2, $Primärklappe_IST, $Primärklappe_Soll, $Sek_ist, $Sek_soll, $SZsoll_Saugzug, $RLP, $ZK, $O2_soll, $U_Lambda, $TRG_soll, $TRG_max, $TKsoll, $TVL_3, $TVL_4, $TR3, $TR4, $TB2, $TVLs_3, $TVLs_4, $TRs_3, $TRs_4, $TVL_5, $TVL_6, $TR5, $TR6, $TB3, $TVLs_5, $TVLs_6, $TRs_5, $TRs_6, $SZist, $Tplat, $TRL, $PufLad, $TB4, $TB5, $TB6, $MWZ_Vorl, $MWZ_Rueckl, $MWZ_Durchf, $MWZ_Leist, $TFW, $TRLsoll, $TA_Gem_Aussen, $VFS_Flow, $VFS_Temp, $IO32_VL, $IO32_521_Pa, $IO32_522_Pa, $IO32_509_Pa, $IO32_510_Pa, $Dig_CHAN_0, $Dig_CHAN_1, $Dig_CHAN_2, $Dig_CHAN_3, $Dig_CHAN_4, $Dig_CHAN_5, $Dig_CHAN_6, $Dig_CHAN_7) = explode(';',$test);
36
37
     //echo "Temperatur Ofen: $Temp_Ofen";
38
39
     //Daten an demo.volkszaehler.org uebertragen
40
     fopen ("http://demo.volkszaehler.org/middleware.php/data/[volkszähler-id].json?operation=add&value=$HK1_Vorlauf_IST", "r");
41
     fopen ("http://demo.volkszaehler.org/middleware.php/data/[volkszähler-id].json?operation=add&value=$Puffer_Oben", "r");
42
     fopen ("http://demo.volkszaehler.org/middleware.php/data/[volkszähler-id].json?operation=add&value=$Puffer_Mitte", "r");
43
     fopen ("http://demo.volkszaehler.org/middleware.php/data/[volkszähler-id].json?operation=add&value=$Puffer_unten", "r");
44
     fopen ("http://demo.volkszaehler.org/middleware.php/data/[volkszähler-id].json?operation=add&value=$Temp_Aussen", "r");
45
}
46
fclose($telnet);
47
?>
Die Heizung liefert die Werte einwandfrei also muss nichts gemessen 
werden.

Welche Lösung wäre am geeignetsten? Priorität liegt auf Energieverbrauch 
und wenn es geht auf PHP Verarbeitung.

PHP deshalb weil ich das einigermaßen versteh und spätere Änderungen 
leichter durchführen kann.

Das gesuchte Teil soll die gesendeten Daten von der Heizung annehmen, 
filtern und an volkszäler weitergeben.

Bin offen für alle Vorschläge

NetIo liegt herum, WRT54GL läuft Tagsüber eh, RasPi wäre interessant mal 
auszuprobieren

Danke schon mal für eure Antworten

Gruß Himmelreich

: Bearbeitet durch User
von zagge (Gast)


Lesenswert?

Auf dem WRT54GL sollte ein (Open o.ä.) WRT laufen, da wäre dann php kein 
allzu großes Problem.

von Weingut P. (weinbauer)


Lesenswert?

die fopen im unteren Scriptbereich sind nichts Anderes als 
Datenübertragung per $_GET ... das sollte man dem NetIO beibiegen können 
die Requests zu senden ... hab ich persönlich aber nochnicht gemacht.

Noch nicht so klar ist mir wo Dein Server die Daten her holt ... aus ner 
TXT-Datei wie mir scheint, das steht dann beim NetIO nichtmehr zur 
Verfügung.

Was den Energieverbrauch angeht bin ich mir nichtmal so sicher ob das 
NetIO wesentlich weniger zieht, hab beide in Betrieb, also auch das Pi 
und beide Gehäuse werden bei mir handwarm. Muss ich echt mal nachmessen.

Dazu bietetr das Pi dann noch n paar mehr Möglichkeiten, hab meinem erst 
die Tage so ne USB-Wetterstation drangehängt, was bei der 
Heizdatenerfassung durchaus auch von Interesse wäre.

: Bearbeitet durch User
von René K. (cyprius)


Lesenswert?

Es sieht so aus, als wäre das eine Datei mit Testdaten, um nicht jedes 
mal eine Telnet-Verbindung aufzubauen. Die Zeile ist ja auch schon 
auskommentiert.
Ansonsten lässt sich das Skript sehr leicht aufdröseln und z.B. mit dem 
NetIO umsetzen. Wenn du die Stromsparfunktionen von AVR & ENC benutzt, 
kannst du den Gesamtverbrauch nahezu vernachlässigen.

: Bearbeitet durch User
von Himmelreich (Gast)


Lesenswert?

Hallo cyprius,

Danke für deine Antwort

Die Textdatei hz.txt war eine Testdatei ist aber wie du schon gesagt 
hast auskommentiert

Momentan wird tatsächlich alle 5 Minuten eine Telnet-Verbindung zur 
Heizung aufgebaut um die Daten abzufragen.

Kann NetIo das Script verarbeiten oder muss ich das Script im NetIo mit 
einer anderen Sprache nachbauen?
Hast du vielleicht links wo so was ähnliches beschrieben ist, denn bei 
NetIO bin ich kompletter Anfänger.

Hab NetIo für ein anderes Projekt mal bestellt, aber es kam nie zur 
Realisierung

Gruß Himmelreich

von Karl H. (kbuchegg)


Lesenswert?

Himmelreich schrieb:

> Kann NetIo das Script verarbeiten

Nein.
Mit PHP kannst du am NetIo nichts anfangen.

Es sollte aber kein allzugroßes Problem sein, die Funktionalität selber 
in C nachzuprogrammieren. Vorausgesetzt du kannst C

von René K. (cyprius)


Lesenswert?

Hallo Himmelreich,

> Kann NetIo das Script verarbeiten oder muss ich das Script im NetIo mit
> einer anderen Sprache nachbauen?

wie der Vorposter schon geschrieben hat, ist der NetIO erstmal "nur" 
eine Entwicklungs-Plattform und bietet keine eigene Skriptsprache. Es 
handelt sich letztendlich nur um einen Atmega32 in Basisbeschaltung und 
einen per SPI angeschlossenen ENC28J60.

Ich habe die originale Pollin-Firmware nie gesehen, vermute aber stark, 
dass diese in C geschrieben ist. Das wäre auch der Weg, den du 
beschreiten müsstest: Das Skript müsstest du zu Fuß in C umsetzen.

Wenn du bereits C kannst, empfehle ich dir das hervorragende Datenblatt 
des ENCs als Lektüre. Da steht alles drin was du wissen musst und noch 
ein bisschen mehr.

Ohne C-Vorkenntnisse wäre das aber etwas oversized. In diesem Fall musst 
du in den sauren Apfel beißen und alles neu lernen, oder z.B. auf einen 
Rasbpi/deinen Router ausweichen.

: Bearbeitet durch User
von Himmelreich (Gast)


Lesenswert?

Hallo Zusammen,

Danke an alle für eure Antwort

Ich werds mit den Router oder RasPi versuchen, wobei ich mehr zu RasPi 
tendiere.

Ist RasPi die beste Lösung wenn ich mich für einen Energiesparenden 
Einplatinencomputer entscheide oder gibt es da noch bessere Alternativen

Falls RasPi eine gute Lösung ist, was wäre die beste Bezugsquelle und 
was sollte ich beim Kauf beachten?

Im Voraus schon mal Danke

Gruß
Himmelreich

von Thorsten (Gast)


Lesenswert?

Der Router sollte für diese Aufgabe eigentlich ausreichen, dann 
verschwendest Du auch keine zusätzliche Energie.

Falls es doch etwas Richtung RasPi sein soll, kann ich die Boards von 
Olimex (A13 Mini) empfehlen, die kommen im Standby mit deutlich weniger 
als 1 Watt aus. RasPi und auch das BeagleBone Black sind da deutlich 
energiehungriger.

von Nik D. (y2kicn)


Lesenswert?

Falls du bis nächstes Jahr warten kannst, wäre der Tessel vielleicht die 
perfekte Lösung: http://technical.io/

Ansonsten ist eine Telnet Verbindung und ein paar Post /GET requests 
ohne SSL natürlich auch von einem AVR aus möglich, erfordert aber viel 
mehr Software als ein Tessel (der basiert auf node.js)

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.