Search

Register

Thanks for signing-up! You will receive an email with further instructions to activate your account!

username already taken
You already have an account? .

Login

Forgot password?
Don't have an account yet? Register now for using the UI-Designer and the forum or creating projects.
Login to create topics and posts!



Statusrückmeldung per TCP

#1 Oct. 14, 2018 18:11:06 by binderji

Statusrückmeldung per TCP

Hallo
Mit folgendem Prog. versuche ich mit dem Handy zwei Ausgänge zu schalten.
das funktioniert alles soweit, nur mit der Rückmeldung habe ich Probleme.
wird der 1. Ausgang gesetzt, werden am Handy alle Rückmeldungen auf HIGH gesetzt.
Ich hoffe iher könnt mir weiter helfen.
DANKE

{
"style": "flat",
"orientation": "portrait",
"pagebuttonwidth": "dynamic",
"navigation": "fixed",
"description": "EthernetShield",
"preventSleep": false,
"navBackground": "0,0,0",
"connections": [
{
"host": "10.0.0.6",
"eventBased": true,
"name": "arduino_test",
"port": 95,
"protocol": "tcp"
}
],
"theme": "dark",
"version": 2,
"navigationalign": "left",
"device": "Redme Note3",
"type": "NetIOConfiguration",
"pages": [
{
"sound": "active",
"name": "EG",
"items": [
{
"text": "V1-22",
"top": 0,
"height": 60,
"width": 100,
"fontsize": 20,
"textcolor": "238,12,12",
"type": "label",
"left": 300
},
{
"sends": [
"w2:1"
],
"border": "255,255,255",
"top": 120,
"height": 60,
"width": 60,
"shape": "rect",
"background": "45,45,45",
"textcolor": "230,230,230",
"type": "button",
"left": 60,
"parseResponse": "\\d+",
"formatResponse": "heiz_{0}.png",
"reads": "r2",
"interval": 1000
},
{
"sends": [
"w3:1"
],
"border": "255,255,255",
"top": 240,
"height": 50,
"width": 60,
"shape": "rect",
"background": "45,45,45",
"textcolor": "230,230,230",
"type": "button",
"left": 60,
"parseResponse": "\\d+",
"formatResponse": "heiz_{0}.png",
"reads": "r3",
"interval": 1000
},
{
"top": 130,
"left": 250,
"width": 60,
"height": 80,
"type": "label",
"text": "newLabel",
"textcolor": "230,230,230",
"reads": "r7",
"interval": 2000,
"formatResponse": "lamp_{0}.png",
"parseResponse": "\\d+"
}
],
"label": "EG",
"width": 400,
"connection": "arduino_test",
"background": "40,40,40",
"fitToScreen": true,
"height": 600
}
],
"switchOnSwipe": false,
"name": "Arduino VISU (2)"
}
#include <SPI.h>
#include <Ethernet.h>



byte mac[] = {0x80, 0x3F, 0x5D, 0xF8, 0x86, 0xDB};
byte ip[] = {10, 0, 0, 6};
byte gateway[] = {10, 0, 0, 138};
byte subnet[] = {255, 255, 255, 0};
EthernetServer server(95);
EthernetClient client;
String readString = String(100);

boolean laststatus2=false;
boolean status2=false;
boolean togglestate2=false;
boolean laststatus3=false;
boolean status3=false;
boolean togglestate3=false;


void setup()
{
Ethernet.begin(mac, ip, gateway, subnet);
server.begin();

pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(7, INPUT);


Serial.begin(9600);
}

void loop()
{

char c;
char inByte;
boolean currentLineIsBlank = true;
client = server.available();
if(client)
{



c = client.read();
if (readString.length() < 5) {
readString = readString + c;

}
if (c == '\n' && currentLineIsBlank) {


//-------------Ausgang 2 BEGINN--------------------
if (readString.indexOf("w2:1")>-1 &&laststatus2==false)
{
togglestate2=!togglestate2;
digitalWrite(2, togglestate2);
status2=false;
laststatus2=true;
}
if (status2==false)
{
laststatus2=false;
}
if (readString.indexOf("r2")>-1)
{
client.println(togglestate2);
}
//-------------Ausgang 2 ENDE--------------------



//-------------Ausgang 3 BEGINN--------------------
if (readString.indexOf("w3:1")>-1 &&laststatus3==false)
{
togglestate3=!togglestate3;
digitalWrite(3, togglestate3);
status3=false;
laststatus3=true;
}
if (status3==false)
{
laststatus3=false;
}
if (readString.indexOf("r3")>-1)
{
client.println(togglestate3);
}
//-------------Ausgang 3 ENDE--------------------


//-------------Eingang 7 BEGINN--------------------
if (readString.indexOf("r7")>-1)
{
client.println(digitalRead(7));
}
//-------------Eingang 7 ENDE--------------------





readString = "";
}

}
} // loop end

#2 Oct. 15, 2018 02:36:43 by mcgiver0510

Statusrückmeldung per TCP

Hallo Hannes,

dein Problem liegt im Parsen und natürlich darin - was du der App schickst…

versuch mal folgende Änderung für deinen oberen Button :
in der App-Config :
parse Response : \d+
formatResponse : heiz_{0}.png <<-- zum Verständnis erstmal ohne Bildchen...
ersetzen durch :
parse Response:Button1#(\d+)
formatResponse : {0.1}

in deinem Programm :
dieses :
client.println(togglestate2);
ersetzen durch :
client.println("Button1#"+String(togglestate2));

Wenn dein Programm deinen Ausgang auch wirklich toggelt - sollte es so klappen.
( habe nichts geprüft )
Du solltest in deinem Button eine “0” oder “1” angezeigt bekommen.

Das hier bitte durcharbeiten :
https://netioapp.com/de/forum/topic/1964/?page=1#post-5999

Wenn du eine “eventBased”-Connection nutzt, kann dein Arduino zu jeder Zeit Daten zur App schicken…
z.b. über einen Timer etc.
somit könntest du auf ein “Item-Read” mit Interval z.b. verzichten…

… melde dich bitte mal - ob es geklappt hat …

nochmal ein Tipp zum Code :
sowas : w2:1 --- sind Hieroglyphen
warum nicht so : ToggleAusgang2 <<<- sowas kann man lesen und verstehen...
und sieht sofort was da gemacht wird

oder :
if (readString.indexOf("r2")>-1) --- ebenfalls Hieroglyphen
warum nicht so :
if (readString.indexOf("StatusAusgang2")>-1

auch solltest du dir eine saubere und klare Strukturierung deines Codes angewöhnen.

sonst lese ich ihn demnächst nicht mehr…
klar ist es am Anfang schwer ( musste ich mir auch sehr oft anhören…)
es hilft aber auch dir und Anderen deinen Code besser zu verstehen…

Beispiel :
//-------------Ausgang 2  BEGINN--------------------
if (readString.indexOf("w2:1")>-1 &&laststatus2==false)
{
togglestate2=!togglestate2;
digitalWrite(2, togglestate2);
status2=false;
laststatus2=true;
}
if (status2==false)
{
laststatus2=false;
}
if (readString.indexOf("r2")>-1)
{
client.println(togglestate2);
}
//-------------Ausgang 2 ENDE--------------------
************************************************************************************************
das könnte aber auch so Aussehen :
unter deinen "includes" folgendes einfügen :
#define Ausgang2 2 <<<---- hier aber einen sinnvolleren Namen wählen
#define ToggleAusgang2 digitalWrite(Ausgang2, !digitalRead(Ausgang2))

ebenso das ändern :
pinMode(2, OUTPUT);

in

pinMode(Ausgang2, OUTPUT); /* auch wenn es dir im mom unsinnig erscheint - es ist Aussagekräftiger*/

//-------------Ausgang 2 BEGINN-------------------- <<--- sowas ist gut !!!
if ( readString.indexOf ( "ToggleAusgang2" ) > - 1 )
{ /* die Klammern sind hier sofort erkennbar*/
ToggleAusgang2; /* was hier gemacht wird - erkennt man sofort */
}

/******************* hier eventuell auch noch unterteilen ************************/
eventuell so :
/******** hier wird der Status von Ausgang2 gelesen und zur APP geschickt ********/

if ( readString.indexOf ( "StatusAusgang2" ) > - 1 )
{
String state = String ( digitalRead( Ausgang2 ));
client.println ( "Button1#" + state + '\n' );
}

//-------------Ausgang 2 ENDE-------------------- <<--- sowas ist gut !!!
meine Erklärungen bitte wegdenken...

ich will dich nun wirklich nicht ärgern - aber sowas ist für andere Leute lesbarer…
auch besteht eine sehr grosse Gefahr darin, dass du selber deinen Code nach einer gewissen Zeit
nicht mehr verstehst…und wenn er mal grösser wird - wird es noch schwieriger…

nochwas zum Thema Rückmeldungen :
wenn du einen PortPin liest - sagt es nur aus - das der PIN irgendeinen Zustand hat… mehr nicht…
sollte dieser PIN ein Relais schalten - kannst du folgende böse Überraschungen erleben :
RelaisSpule ist unterbrochen - Lampe leuchtet nicht - obwohl der PortPIN sagt Lampe leuchtet…
Relais schaltet - aber Lampe defekt - PortPIN sagt aber alles OK…

bei einer Lampe ist das vielleicht nicht so tragisch - bei Motoren etc. aber schon…
– ein Motor kann z.b. mechanisch blockiert werden - wird also eingeschaltet und verbrennt - weil er sich nicht
drehen kann…dein PortPin sagt aber - alles OK - ich hab' ja geschaltet…
wie du vielleicht erkennst - muss man auch seine Rückmeldungen im wirklichen Leben eindeutiger machen…

Wenn du “C” oder “C++” lernen möchtest - ist dieses eine gute Adresse :
https://www.proggen.org/doku.php


lg






Edited mcgiver0510 (Oct. 15, 2018 13:22:23)