Befehl über die Webseite wird doppelt ausgeführt!?!?!?!?!?!

Hallo an euch alle :wink:
Ich bin absoluter Neueinsteiger und versuche eine Hausautomation.
Eigentlich habe ich schon alles so "zurechtgestückelt" das es funktioniert wie ich es will, aber beim letzten Test der gesamten Komponenten im Zusammenspiel gab es dann eine doofe Überraschung.
Der Befehl über meine Webseite an das Ethernet-Shield wird ausgeführt, aber beim nächsten Befehl führt er den nächsten und vorherigen aus.
Das verstehe ich überhaupt nicht und habe schon einiges versucht z.B. Refresh, "Grundlink" der Webseite öffnen,......
Ich hoffe das Problem ist einigermaßen verständlich und warte auf die Lösung die vielleicht jemand hat.
Programmcode ist im Anhang in einer Textdatei!
Seid bitte nachsichtig mit mir :blush:
Vielen Dank im Voraus dafür!!!!!

Mit freundlichen Grüßen
Tobi

Tobias - Haussteuerung.txt (14.7 KB)

Willst du denn sicher dass der Arduino der Webserver sein soll? Es wäre einfacher wenn du nach dem hier es machst

hi,

ich hab' den sketch mal "unbesehen" auf den arduino geladen (nur IP angepaßt), bin dann draufgekommen, daß Du ja keine webseite zur verfügung stellst. anscheinend schickst Du nur befehle.
schreib' bitte, was Du da schickst, dann muß ich mir das nicht selbst auseinanderklabüstern.

gruß stefan

Hallo und vielen Dank an euch beide für das Interesse!!!

  1. skorpi08 ich habe mir den Link angeschaut und finde das interessant. Ich werde diese Weise in den nächsten Tagen versuchen zum Laufen zu bringen, aber das wird schwierig. Meine aktuelle Version nutzt den Arduino Mega 2560 R3 als Webserver, da ich die Rückmeldungen vom Haus direkt angezeigt bekommen wollte (Arduino liest direkt aus und gibt es an die Webseite aus) und das auf Ethernet-Shield und Arduino zusammen nicht hinbekommen hatte. Beim ersten Versuch hatte ich die Webseite auf der SD-Karte im Ethernet-Shield und der Arduino hat so wie jetzt die Ardressleiste des Browsers ausgelesen z.B. http://192.168.2.106/?pinD22=0.
    Bei dieser Adressleiste: http://192.168.2.106/?pinD22=0 liest der Arduino pin (welcher pin), D (Digitaler Pin), 0 (schalte auf Low).
    So gebe ich die Befehle über die Webseite an den Arduino, wobei ich das über beide Versionen (Ethernet-Schield mit Webseite auf SD-Karte / Arduino als Webserver) geschafft habe, jedoch hatte ich das mit der Rückmeldung vom Arduino an die Webseite nicht hinbekommen und ging auf die 2.Version (Arduino als Webserver) und es funktionierte :wink:

Ich bin jetzt ein Jahr dabei mit dem Arduino wenn es die Zeit hergibt (selten) zu arbeiten und seit ein paar Monaten habe ich das Ethernet-Shield dazu gekauft um meine eigene Hausautomation zu erstellen.
Mir geht es vorerst nur um das saubere und sichere Schalten von Ausgängen des Arduino-Mega und die Rückmeldung über andere Ports das es erfolgreich war. Alles soll über die Webseite einwandfrei funktionieren und angezeigt werden. Es wäre fast geschafft wenn nicht die doofe Sache wäre (z.B. Pin 23 wird geschaltet, als nächstes Pin 24 und dabei wird gleichzeitig auch Pin 23 wieder mitgeschaltet, Pin 25 wird geschaltet und Pin 24 ebenso wieder mitgeschaltet).
Meine Versuche mit css und php waren auch soweit ok aber habe diese nie komplett umgesetzt.
Grundlegend habe ich kein Problem mit Programmieren von Siemens S5/S7, Freelance, WinCC, .......usw., aber C ist nochmal sehr viel schwieriger meiner Meinung nach, trotz der Hilfe der Librarys!

Das Ärgerlichste ist das ich kurz vor dem Sanieren meiner Eigentumswohnung bin (noch 2 - 4 Wochen) und ich würde gerne bevor ich das beginne wissen ob ich ein funktionierendes System schaffe und nicht "umsonst" die komplette Wohnung saniere und mit Steuerleitungen ausstatte :smiley:
Ich bezweifle es zwar nicht das ich es schaffe, aber wann und wie ist die Frage........

  1. Stefan danke für deinen Mut meinen Programmcode direkt ohne nachschauen auf deinen Arduino zu laden XD , aber ich verstehe dein Problem nicht :smiley: der Arduino (in meinem Fall Mega 2560 R3) hat im Programmcode schon die Webseite dabei unter Webseitenaufruf / Webseitengestaltung.

/*****************************************

WEBSEITENAUFRUF

*****************************************/

boolean current_line_is_blank = true; // eine HTTP-Anfrage endet mit einer Leerzeile und einer neuen Zeile

while (client.connected())
{
if (client.available()) // Wenn Daten vom Server empfangen werden
{
char c = client.read(); // empfangene Zeichen einlesen
if (c == '\n' && current_line_is_blank) // wenn neue Zeile und Leerzeile empfangen
{ // Standard HTTP Header senden
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connection: close");
client.println();
client.println("");
client.println("");
client.println("<body bgcolor="#FFCC00 ">");
client.println("<h1 align="center" >Haussteuerung - Tobias ");
client.println("");
client.println("
");
client.println("
");
client.println("
");
client.println("
");

/*****************************************

WEBSEITENGESTALTUNG

*****************************************/

/*****************************************
Licht im Arbeitszimmer
*****************************************/

if (digitalRead(38)){
client.print("<font size="5"> Das Licht im Arbeitszimmer ist EINGESCHALTET");
}else{
client.print("<font size="5"> Das Licht im Arbeitszimmer ist AUSGESCHALTET");
}
client.println("
");

client.print("<FORM action="http://192.168.2.106/\" >");
client.print("

<INPUT type="radio" name="pinD22" value="0">Schalten ");
client.print("

<INPUT type="submit" value="Bestätigen"> ");

client.println("
");
client.println("
");
client.println("
");

/*****************************************
Licht im Badezimmer
*****************************************/

if (digitalRead(39)){
client.print("<font size="5">Das Licht im Badezimmer ist EINGESCHALTET");
}else{
client.print("<font size="5"> Das Licht im Badezimmer ist AUSGESCHALTET");
}
client.println("
");

client.print("<FORM action="http://192.168.2.106/\" >");
client.print("

<INPUT type="radio" name="pinD23" value="0">Schalten");
client.print("

<INPUT type="submit" value="Bestätigen">");

client.println("
");
client.println("
");
client.println("
");

/*****************************************
Licht im Schlafzimmer
*****************************************/

if (digitalRead(40)){
client.print("<font size="5"> Das Licht im Schlafzimmer ist EINGESCHALTET");
}else{
client.print("<font size="5"> Das Licht im Schlafzimmer ist AUSGESCHALTET");
}
client.println("
");

client.print("<FORM action="http://192.168.2.106/\" >");
client.print("

<INPUT type="radio" name="pinD24" value="0">Schalten ");
client.print("

<INPUT type="submit" value="Bestätigen"> ");

..........usw.

das ist jetzt ein Auszug und dieser zeigt z.B. wie das Licht im Schlafzimmer geschaltet wird (pinD24 = Digitaler Pin 24) dann eben noch die variable 0 für Low-Signal welche beim Bestätigen hinzugefügt wird und dann sieht der Befehl so aus beim Bestätigen: 192.168.2.106/?pinD24=0.
Der Grund für lediglich das 0-Signal bzw. Low-Signal ist der, dass ich das Sainsmart 16-channel Relaismodul habe, welches nur mit einem Low-Signal durchschaltet. Ich nutzte das jeweilige Relais (16-Relais) lediglich als Taster (Einschalten und sofort wieder aus / Impulsschalter) für das Betätigen des Stromstoßrelais für den z.B. Lichtstromkreis des Schalfzimmers.
Über den 2.Schließer des Stromstoßrelais hole ich mir dann die Rückmeldung ob es angezogen hat und somit das Licht eingeschaltet ist auf den Arduino zurück und dann zur Webseite mit dem Text z.B. Das Licht im Schlafzimmer ist EINGESCHALTET.

Also ich hatte gestern den Code auf dem UNO geladen aber da kam keine Website, der hat nur geladen.....
Bin grad auch dabei ne Website zu erstellen, klappt zwar aber kommen immer neue ideen die mir dann doch schwierigkeiten bereiten. Im moment ist das Login dran. Weiß noch nicht wie ich es machen soll.

Habs zwar als.php aber als .html sollte es auch anzeigen...

<!DOCTYPE html> 
<html>
<head>
<meta charset="UTF-8">
<title>Home Automation</title>
<link rel="stylesheet" href="http://code.jquery.com/mobile/1.2.0/jquery.mobile-1.2.0.css"/>
<script src="http://code.jquery.com/jquery-1.8.2.js"></script>
<script src="http://code.jquery.com/mobile/1.2.0/jquery.mobile-1.2.0.js"></script>
</head> 


<body onload="loadProperties()">
<div data-role="page" id="page">
	<div data-role="header">
    <a href="index.php" data-transition="slide" data-icon="home">Home</a>
            <h1>Wohnzimmer</h1>
    <a href="settings.php" data-transition="slide" data-ajax="true" rel="external" data-icon="gear">Settings</a>

	</div>
	<div data-role="content">	
		<ul data-role="listview">
			<li><a href="#page2">Licht</a></li>
            <li><a href="#page3">Heizung</a></li>
			<li><a href="#page4">Anderes</a></li>
		</ul>		
	</div>
    <div data-role="header">
		<h1>Küche</h1>
        </div>
    <div data-role="content">	
		<ul data-role="listview">
			<li><a href="#page5">Licht</a></li>
            <li><a href="#page6">Heizung</a></li>
			<li><a href="#page7">Anderes</a></li>
		</ul>		
	</div>
	<div data-role="footer">
		<h4>Fußzeile</h4>
	</div>
</div>

<div data-role="page" id="page2">
	<div data-role="header">
    <a href="index.php" data-transition="slide" data-icon="home">Home</a>
		<h1>Wohnzimmer</h1>
	</div>
	<div data-role="content"> Inhalt
    <h2>Light switches</h2>

      <div data-role="fieldcontain">
        <label for="flipswitch3">Decke:</label>
        <select name="flipswitch3" id="flipswitch3" data-role="slider">
          <option value="off">Aus</option>
          <option value="on">Ein</option>
        </select>
      </div>
      <div data-role="fieldcontain">
        <label for="flipswitch2">Tisch:</label>
        <select name="flipswitch2" id="flipswitch2" data-role="slider">
          <option value="off">Aus</option>
          <option value="on">Ein</option>
        </select>
      </div>
      <div data-role="fieldcontain">
        <label for="flipswitch1">Ecke:</label>
        <select name="flipswitch1" id="flipswitch1" data-role="slider">
          <option value="off">Aus</option>
          <option value="on">Ein</option>
        </select>
      </div>

	</div>
	<div data-role="footer">
		<h4>Fußzeile</h4>
	</div>
</div>

<div data-role="page" id="page3">
	<div data-role="header">
    <a href="index.php" data-transition="slide" data-icon="home">Home</a>
		<h1>Seite drei</h1>
	</div>
	<div data-role="content">	
		Inhalt		
	</div>
	<div data-role="footer">
		<h4>Fußzeile</h4>
	</div>
</div>

<div data-role="page" id="page4">
	<div data-role="header">
    <a href="index.php" data-transition="slide" data-icon="home">Home</a>
		<h1>Seite vier</h1>
	</div>
	<div data-role="content">	
		Inhalt		
	</div>
	<div data-role="footer">
		<h4>Fußzeile</h4>
	</div>
</div>
              <script>
	            $('#flipswitch3').change(function (event) {
                var mySwitch = event.currentTarget;
                var val = mySwitch.value == "on" ? 0 :1 ;
			    $.post('sendControl.php?device='+mySwitch.id+'&stat='+mySwitch.value+'&pin='+"8"+'&val='+val, function (response){});  
				
            });
            $('#flipswitch2').change(function (event) {
                var mySwitch = event.currentTarget;
                var val = mySwitch.value == "on" ? 0 :1 ;
			    $.post('sendControl.php?device='+mySwitch.id+'&stat='+mySwitch.value+'&pin='+"7"+'&val='+val, function (response){});  
            });
            $('#flipswitch1').change(function (event) {
               var mySwitch = event.currentTarget;
                var val = mySwitch.value == "on" ? 0 :1 ;
			    $.post('sendControl.php?device='+mySwitch.id+'&stat='+mySwitch.value+'&pin='+"6"+'&val='+val, function (response){});  
            });

			function loadProperties(){
				$.getJSON('properties.json?'+ new Date().getTime(), function(data) {
					//alert ("I am here!");
					$('#flipswitch3').val(data.flipswitch3).slider('refresh');
					$('#flipswitch2').val(data.flipswitch2).slider('refresh');
					$('#flipswitch1').val(data.flipswitch1).slider('refresh');
	 			});
			}

		</script>
</body>
</html>

Hey skorpi08 !!

  1. Die Webseite ist ja mal echt schick
  2. Kann es sein das der UNO den Programmcode nicht schafft?
  3. Die Verschlüsselung war auch etwas was ich lange gesucht hatte und zu keinem Entschluss kam, aber es gab glaube ich die Möglichkeit über einen 2.Server das zu verschlüsseln der dann an das Ethernet-Shield weiterleitet.

Hast du das Phänomen auch schon gehabt mit dem doppelt schalten z.B. eines Ausgangs und/oder eine Lösung?

p.s. danke für dein Einbringen!

hi,

hab's jetzt nach Deinem hinweis auf einen 2560er geladen und läuft.
den fehler gibt es, aber ich bin nicht draufgekommen, was da falsch läuft. es ist verdammt schwer, fremden code nachzuvollziehen.

davon abgesehen finde ich die bedienung ein wenig mühselig, mit der scrollerei und so...
falls Dein arduino im internetz hängt, probier mal den code, den ich anhänge. ich schalte damit bisher nur verschiedene LED-lampengruppen im wohnzimmer, deswegen hab' ich auch noch keine rückmeldung eingebaut. der code ist optimiert für smartphones bzw tablets.
der sketch, den ich anhänge, ist darauf reduziert, eine led an pin 2 mit den obersten beiden buttons ein- und auszuschalten. im original werden wie bei den anderen buttons schieberegister angesteuert.

eine rückmeldung mit änderung der buttonfarbe wäre schön, bin ich aber eben noch nicht angegangen.

gruß stefan

steuerung_test_led_2.ino (3.75 KB)

Hol dir die Lib Webduino, da ist auch ein Beispiel mit dem Login, Web_Authentication.ino - Webduino Authentication example
Hatte auch mal TinyWebServer getestet, weiß aber nicht mehr wie und was es war.

Wenn alles richtig programmiert ist, hat man keine Phänomene :smiley:
Weiß da leider kein rat

hi,

ja, übrigens, die webduino-library brauchst Du auch für meinen sketch.
dort ist auch das authentication-beispiel dabei.

gruß stefan

webduino.zip (31.6 KB)

hi,

ich hab' auf verdacht ein break eingefügt, und das problem ist umgangen.

        if (pin==29)
        {
          if(digitalRead(45)==1) Serial.println("Das Licht im Esszimmer ist EINGESCHALTET"); else Serial.println("Das Licht im Esszimmer ist AUSGESCHALTET");
        }    
        if (pin==30)
        {
          if(digitalRead(46)==1) Serial.println("Das Licht in der Kueche ist EINGESCHALTET"); else Serial.println("Das Licht in der Kueche ist AUSGESCHALTET");
        }  
        
        
      break;
      }
    }

gruß stefan

XD stefan du hast sowas von recht!!!!! XD
Ich bin sowas von baff und ärgere mich das ich noch nicht solche geilen Layouts gefunden hatte.
Hab auf eigene Weise versucht es etwas optisch ansprechender zu gestalten XD ......fail XD
Anbei schicke ich dir mal meine Idee wie ich das gerne Aufbauen würde bzw. ein Versuch das rüberzubringen :smiley:

Ich würde gerne eine Homeseite haben und dann die Unterseiten z.B. Arbeitszimmer, Wohnzimmer, Bad, Schlafzimmer,....... und in diesen einzelnen Unterseiten dann Licht, Steckdose, ... weitere mögliche Unterpunkte und dann echt optisch coole Taster, da ich ja nur einen Impuls senden möchte, aber finde diese "Slidebutton" oder "Schieber" einfach geil und vorallem mit einer farblichen Anzeige. :slight_smile:

steuerung_test_led_2.htm (2.17 KB)

HEY!!!!!!
Stefan es funktioniert wirklich XD es ist also eine beta-Version für den notfall vorerst in der Wohnung vorhanden!!!!
Vielen Dank schon mal für die super Leistung (meiner Ansicht nach) !!!!!
Aber nichts desto trotz werde ich die Steuerung auf das coole Layout versuchen anzupassen, da die einfach geil aussieht :smiley:
Darf man sich hier im Threat darüber weiter unterhalten oder muss man das privat dann machen!?

hi,

natürlich hier im forum, dazu ist es ja da.
Du solltest auch versuchen, Dich in jQuery einzulesen, da gibts alles im internetz.

gruß stefan

Stefan ich meinte hier in diesem Threat "Befehl über die Webseite wird doppelt ausgeführt!?!?!?!?!?!"
Da in anderen Foren immer auf den privaten Austausch von Nachrichten verwiesen wird, sobald die Sache nichts mehr mit dem Hauptthema zu tun hat.
Dein Tipp mit jQuery scheint echt gut zu sein, da es sehr stark sein soll und es vieles sehr vereinfacht.
Es kommt Java sehr nahe was ich gut finde, da ich mich vor ein paar Monaten selbst damit beschäftigen wollte.
Ich werde mich nun auf jQuery mal festlegen was mir sehr wahrscheinlich bei meinem Vorhaben hilft.
Damit kann ich jedoch nur die Webseite gestalten, aber komme der Programmiersprache nicht näher, oder!?

Vielen Dank nochmal Stefan !

Als erstes mach mal das Design, um den rest kümmern wir uns später

hi,

Stefan ich meinte hier in diesem Threat "Befehl über die Webseite wird doppelt ausgeführt!?!?!?!?!?!"
Da in anderen Foren immer auf den privaten Austausch von Nachrichten verwiesen wird, sobald die Sache nichts mehr mit dem Hauptthema zu tun hat.

wegen sowas brauchst Du Dir hier keine sorgen machen. man sieht das nicht so eng hier wie in manchen anderen foren.

jQuery hat in erster linie nichts mit design zu tun, sondern soll die programmierung vereinfachen. alles, was Du mit jQuery machen kannst, geht auch mit javascript. der größte vorteil ist aber meiner meinung nach, daß etwas, das mit hilfe von jQuery geschrieben wurde, für alle browser paßt.

gruß stefan

Fals es hilft....

http://v3-1255.vlinux.de/mediawiki/index.php/Remotesocket#Sourcecode

Ok das ist super mit der Freiheit hier im Forum!!
Also so wie ich das verstanden und in youtube gesehen habe ist das eine vereinfachung der programmierung wie du es gesagt hast und dient der einfacheren Gestaltung der Webseite.
Ich werde mich in jQuery versuchen und hoffe es klappt, wobei es relativ simpler aussieht als anderes!
Eine Frage nebenbei: Ich habe ein tft-lcd module von sharp an der Hand und wollte wissen ob ich das mit dem Arduino Mega einfach ansteuern könnte oder ob das müll ist. Aus dem Datasheet habe ich keine Bedenken bekommen, wobei die Max. Spannung von 6V und der Max. Strom Icc von 160mA mich etwas verunsichern.
Anbei das PDF.
Vielen Dank wiedermal im Voraus und keine Angst das mich das von jQuery ablenkt, denn der Focus liegt erstmal auf jQuery!

LQ057Q3DC02.pdf (596 KB)

Und wie kommst voran?

Der Anfang ging gut, aber nun stehe ich vor einer Mauer über die ich nicht drüber komme.....
Ich habe die zwei Hilfen von euch nach meiner Vorstellung bearbeitet, aber beim kombinieren von beiden hängt es total.

Als Startseite soll die "Homeseite-Layout" erscheinen und als Unterseite z.B. beim klicken des Schlafzimmer-Buttons soll das "Unterseitenlayout" erscheinen, aber daran hängt es leider......

Homeseite-Layout.htm (2.05 KB)

Unterseitenlayout.html (5.29 KB)