Forum: PC-Programmierung Bilder ändern auf einer website anhand einer Anlage


von Charel P. (charel)


Lesenswert?

Hallo,
Ich hätte ne Frage, ich hab 2 Ideen weiss aber nicht was die bessere 
ist.

Also ich hab den Raspberry Pi der als Server läuft (Apache2). Auf der 
Website sind 3 LED Und 3 Button Heizung ein  Aus  Störung. Ich kann 
mit den Buttons den Zustand der Heizung verändern das klappt anhand PHP 
und PYTHON und SQLITE

So jetzt möchte ich dass die 3 Bilder den realen Wert der Anlage schauen 
und diese an die Website schicken bzw diese verändern.

1 Lösung bevor ich eine Website aufrufe wird ein hpscript aufgerufen der 
wiederum ein pythonscriptaufruft. In diesem Script wird dann alles 
analysiert und dann die Website geschrieben wird in eine File die dann 
als html aufgerufen wird.

2 Lösung eine php website

Also ich rufe heizung.php auf :
1Php --> Python --> SQLite
2 Php script schaut was in der Datenbank steht und benutzt dann Bild a 
oder b . Die Website wird dann durch echo übergeben.

Vielen Dank im Voraus. Das wäre meine idee gibt es was leichteres zum 
beispiel durch javascript oder so ?

von Sheeva P. (sheevaplug)


Lesenswert?

Charel P. schrieb:
> Ich hätte ne Frage, ich hab 2 Ideen weiss aber nicht was die bessere
> ist.

Ich würde Dir gerne helfen, habe aber leider nicht einmal ansatzweise 
verstanden was Du da machst, warum Du es machst, und wie Du es machst.

Bitte tu' Dir -- und uns -- den Gefallen und ordne bitte Deine Gedanken, 
formulier sie strukturiert und im Idealfall ohne große Rechtschreib- und 
Grammatikfehler, und gerne auch mit Beispielcode. Viel Erfolg!

von Charel P. (charel)


Lesenswert?

Hallo,
Ich hätte ne Frage, ich hab 2 Ideen weiss aber nicht was die bessere
ist.


Also ich hab den Raspberry Pi der als Server läuft (Apache2). Auf der 
Website sind 3 LEDs(Bilder) und 3 Button Heizung: Ein  ;Aus  ;Störung.

Ich kann mit den drei Schalter die Heizung steuern. 1 Einmal einschalten 
, auschalten und die Heizung in den Dauermodus setzen. Die Heizung wird 
ansonsten per Temperaturfühler überwacht im Normalfall. Durch die 
Betätigung eines Schalters wird ein PHP - Script aufgerufen, der nur ein 
Python-script aufruft. Im Python-script wird die Heizung durch die GPIOs 
angesteuert. Das funktioniert auch alles wunderbar.


So jetzt möchte ich aber noch wissen wie der aktuelle Betrieb der 
Heizung ist von der Website aus. Deswegen hab ich 3 LEDs als Bilder.

-Die 1 LED zeigt graue LED (nicht eingeschaltet) oder grüne 
LED(eingeschaltet) durch Schalter Heizung an.

-Die 2 LED zeigt graue LED (eingeschaltet) oder grüne LED 
(ausgeschaltet) durch den Schalter Heizung aus.

-Die 3 LED zeigt graue LED (fehlerfrei) oder rote LED (Störung) an.

So damit jetzt die Bilder je nach Zustand der Anlage gewechselt wird 
hätte ich 2 Lösungen.

1 Lösung: Ich rufe keine html-datei auf sondern eine php-datei. Dort 
wird mit Hilfe von Python und SQLite den Zustand ermittelt umd 
anschliessend wird die ganze Website per echo ...   ausgegeben.

2 Lösung: Bevor die Website aufgerufen wird, wird erst der Zustand der 
Anlage ermittelt. In der Html-datei wird dann durch javascript Jquery 
durchgeführt. Verbindung zum Server geöffnet mit Rückgabewert. Anhand 
diesem Rückgabewert wird dann durch java... Bild1 oder 2 eingefügt.

Was ist die bessere Variante? Oder gibt es noch was anderes.

von Joachim B. (jar)


Lesenswert?

Charel P. schrieb:
> Also ich hab den Raspberry Pi der als Server läuft

Charel P. schrieb:
> Durch die
> Betätigung eines Schalters wird ein PHP - Script aufgerufen, der nur ein
> Python-script aufruft. Im Python-script wird die Heizung durch die GPIOs
> angesteuert.

damit WEISS der PI den Zustand der Heizung!

Charel P. schrieb:
> Bevor die Website aufgerufen wird, wird erst der Zustand der
> Anlage ermittelt.

wieso also?

Der PI kann die Bilder austauschen oder man nutzt Checkbox und HTML

von Charel P. (charel)


Lesenswert?

Jo aber der Zustand der  Heizung kann sich verändern und die website 
wird 1 mal alle 5 minuten wieder aufgerufen.

von Joachim B. (jar)


Lesenswert?

mit
<meta http-equiv="refresh" content="120">

im HTML Code aktualisiere ich alle 2 Minuten beim NETIO die Webseite

LED on / off

<td>
<input type="checkbox" name="OUT" value="G" >
 PCres (PC6)
</p>
<p align="center"><input type="submit" name="SUB" value="Senden"></p>
</td>
<td>
<p align="left"><img src="ledoff.gif" alt="" width="17" height="17"> 
PCres (PA1)</p>
</td>

z.B.

von Charel P. (charel)


Lesenswert?

Danke ich schaue mal

von Baku M. (baku)


Lesenswert?

Moinsen!

Ich mache sowas gerne mit Javascript und Ajax (gibt es recht einfach mit 
jqery).
Hat den Vorteil, daß man nicht immer die Seite komplett neu laden 
muss,und deswegen 'straflos'  etwas öfter nachfragen kann.

Bin etwas in Eile, bei Interesse ggfs. später mehr...

IdS,
Baku

von Anderer Frank (Gast)


Lesenswert?

Baku M. schrieb:
> Moinsen!
>
> Ich mache sowas gerne mit Javascript und Ajax (gibt es recht einfach mit
> jqery).
> Hat den Vorteil, daß man nicht immer die Seite komplett neu laden
> muss,und deswegen 'straflos'  etwas öfter nachfragen kann.
>
> Bin etwas in Eile, bei Interesse ggfs. später mehr...
>
> IdS,
> Baku

So würde ich das auch machen (y)

von bla (Gast)


Lesenswert?

Baku M. schrieb:
> Ich mache sowas gerne mit Javascript und Ajax (gibt es recht einfach mit
> jqery).

Ajax ja, jQuery nö. jQuery braucht man eigentlich nicht mehr, das 
aktuelle JavaScript kann genug:

https://scotch.io/tutorials/how-to-use-the-javascript-fetch-api-to-get-data

von M.K. B. (mkbit)


Lesenswert?

Deinen Lösung funktioniert und ist in Ordnung, ich schlage hier aber nur 
ein paar Möglichkeiten vor, wie man es noch besser machen könnte. Die 
Einarbeitung dafür kann aber etwas Zeit in Anspruch nehmen.

Warum gehst du dem Umweg über php und das Python Script. Du könntest ja 
auch den Webserver gleich mit Python realisieren und direkt auf die 
Datenbank zugreifen.

Das mit dem Neuladen der Seite ist einfach, wenn du das aber häufiger 
machst, dann steigt die Wahrscheinlichkeit, dass die Seite beim Klick 
neu geladen wird und dein Klick nicht angenommen wird.
Deshalb würde wir ich auch AJAX verwenden und nur die Daten abfragen und 
die Seite lokal im Browser aktualisieren. Wenn die Seite noch weiter 
wachsen soll, weil weiter Aktoren/Sensoren eingebunden werden, dann 
würde ich es aber nicht wie baku mit jquery machen, sondern lieber eine 
Framework verwenden. Ich verwenden mittlerweile React 
(https://reactjs.org/). Allerdings erfodert das ganze etwas 
Einarbeitung, gerade wenn man aus der Embedded Welt kommt.

Dir Krönung wären dann websockets. In diesem Fall hältst du einen 
"Leitung" vom Browser zu deinem Server offen und der Server schickt 
deinem Browser ein Update, sobald sich ein Zustand ändert.

Ich sage jetzt nicht, dass man das unbedingt soweit treiben muss, hängt 
davon ab, wann man fertig werden will und was man in Zukunft noch 
erweitern möchte.

von Weingut P. (weinbauer)


Lesenswert?

php kann auch mit SQLite

http://php.net/manual/de/book.sqlite.php

von Christian R. (supachris)


Lesenswert?

Ich hab auch sowas gebaut, aber entkoppelt. Der Raspberry hängt an der 
Heizung, am Stromzähler usw und loggt alle 5 min seine Daten in eine 
Datenbank auf meinem V Server. Auf dem V Server läuft dann auch der 
Apache, der mittels PHP die aktuellen und kummulierten Werte aus der DB 
ausliest, die Homepage zusammen baut, Bilder tauscht, Text und Grafiken 
und die Bilder einbaut usw...
Kannst du natürlich auch alles auf dem Raspi laufen lassen, wollte ich 
aber aus Sicherheitsgründen nicht.

von Charel P. (charel)


Lesenswert?

Vielen dank für die kommentaren ich schaue mir die einzelne vorschläge 
an und was ich mit meinen Kenntnisse möglich ist. Vielen Dank

von Baku M. (baku)


Lesenswert?

bla schrieb:
> Baku M. schrieb:
>>[...]
> Ajax ja, jQuery nö. jQuery braucht man eigentlich nicht mehr, das
> aktuelle JavaScript kann genug:
>
> https://scotch.io/tutorials/how-to-use-the-javascript-fetch-api-to-get-data

Schau mal an, da hab ich wohl die Zeit verpennt :-)
Das ist aber so ein typisches Verhalten (auch bei mir): Wenn etwas 
funktioniert, dann macht man das eben immer so.

Besten Dank für den Hinweis sagt
Baku

von der eine oder der andere (Gast)


Lesenswert?

https://caniuse.com/#search=fetch

naja, für eigene (private) projekte und seiten mit (hauptsächliche) 
technisch interessierter zielgruppe ja.

allgemein nein, da die ie-unterstützung nicht ausreicht - das (hier 
unflätiges schimpfwort einsetzen) teil ist immer noch viel zu weit 
verbreitet (anteil > 0%)

von bla (Gast)


Lesenswert?

der eine oder der andere schrieb:
> https://caniuse.com/#search=fetch
>
> naja, für eigene (private) projekte und seiten mit (hauptsächliche)
> technisch interessierter zielgruppe ja.
>
> allgemein nein, da die ie-unterstützung nicht ausreicht - das (hier
> unflätiges schimpfwort einsetzen) teil ist immer noch viel zu weit
> verbreitet (anteil > 0%)

Wenn man diese Zielgruppe unbedingt braucht, dann verwendet man 
heutzutage einen Polyfill anstatt die ganze Seite nur deswegen mit 
Uralttechnik zu bauen.
https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch#Polyfill

Den Polyfill schmeisst man dann bei gegebener Zeit (wenn auch der letzte 
sein ungepatchtes Windows von 2015 entsorgt hat) einfach raus.

von Frank E. (Firma: Q3) (qualidat)


Lesenswert?

Um für eine Statusänderung die Webseite neu auzurufen - das ist 
unprofessionell, denn das kann just in dem Moment passieren, indem du 
ein Kommando abschickst und dann ist der Status unklar: angekommen oder 
nicht?

Also macht man die Kommandoebene (Buttons/Schalter) von der Statusebene 
(z.B. LEDs) unabhängig.

Dies ist wiederum ist auf verschiedenen Wegen möglich.

Hat das System Kontakt zum Internet, kann man Ajax/JQuery benutzen, um 
einzelne Objekte unabhängig vom Rest der Webseite zu aktualisieren. 
Kontakt zum Web spielt deshalb eine Rolle, weil man die dazu notwendigen 
Libs üblicherweise per Link (von Google) einbindet und nicht lokal 
vorrätig hält.

Man kann auch etwas "selber basteln", z.B. mit iFrames und die 
Aktualisierung erfolgt per Javascript und Timer. WebSockets (auch 
Javascript) wären wohl auch möglich ...

von M.K. B. (mkbit)


Lesenswert?

Frank E. schrieb:
> Kontakt zum Web spielt deshalb eine Rolle, weil man die dazu notwendigen
> Libs üblicherweise per Link (von Google) einbindet und nicht lokal
> vorrätig hält.

Geht aber auch problemlos ohne Internet, wenn man jquery nicht vom 
Google CDN lädt, sondern vom Server ausliefern lässt. Da ja auch noch 
Bilder verwendet werden sollen, muss der Pi Server sowieso statische 
Dateien ausliefern.

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.