ESPeasy

Hallo Bernd,

vielen Dank.

Jetzt versuche ich gerade einen Bewegungsmelder auszuwerten, der zwar mit 5 Volt betrieben wird, aber eine Data Leitung mit einem 3,3 Volt Signal ausgibt. Dieses versuche ich nun mittels Deiner Platine auszulesen und zwar mit der Funktion „SwitchInput“. Leider bekomme ich auch hier keine Änderungen angezeigt.

Axel

Hi Axel,

wenn ich mich recht entsinne muss ein Haken gesetzt werden bei „PullUp Resistor“.

mfg

BerndJ

Mit folgenden Einstellungen funktioniert es:

Axel

Hi Axel,

wir sollten uns angewöhnen die momentan verwendete Softwareversion mit anzugeben, was läuft gerade bei Dir?

mfg

BerndJ

Bei mir steht:

„Build: 100“

Axel

Sehr interessant :smiley:

Wie bekommt man den die Daten in IPS rein ?

daran bin ich auch stark interessiert!

Hi,

Socket Server anlegen, Registervariable dazu und einen Script zuweisen;
und das schöne ist, wir brauchen NICHT zu pollen,
die Daten kommen im eingestelltem Intervall,
bzw. bei Switchen mit maximal 100ms Intervallverzögerung.
(schaut euch den Quellcode an)

Bei mir laufen für die Heizungsanlage momentan 5 ESP´s welche alle Ihre Daten auf einen gemeinsamen Port senden und dort dann die einzelnen Variablen beschreibt.
Ist alles noch in der Entstehungsphase, … natürlich träume ich von einem Modul…

<?

//IPS_LogMessage("Sender ", $_IPS['SENDER']);

if ($_IPS['SENDER'] == 'RegisterVariable'){
$data = $_IPS['VALUE'];

$Prefix1 = "&idx=";                                    // damit fängt der Datensatz an
$Suffix1 = "&";
$Prefix2 = "&svalue=";                                    // damit fängt der Datensatz an
$Suffix2 = "HTTP/1.1";
$Prefix3 = "&switchcmd=";                                    // damit fängt der Datensatz an
$Suffix3 = "HTTP/1.1";

//$Ende1nachZeichen = 2;                                       // und ist xx Zeichen lang
$AnfangID = strlen($Prefix1)+(strpos($_IPS['VALUE'], $Prefix1));
$EndeID = strpos($_IPS['VALUE'], $Suffix1, $AnfangID+1);
$ID = substr($_IPS['VALUE'], $AnfangID, $EndeID-$AnfangID);

$AnfangValue = strlen($Prefix2)+(strpos($_IPS['VALUE'], $Prefix2));
$EndeValue = strpos($_IPS['VALUE'], $Suffix2, $AnfangValue);
$Value = substr($_IPS['VALUE'], $AnfangValue, $EndeValue-$AnfangValue-1);

$AnfangSw = strlen($Prefix3)+(strpos($_IPS['VALUE'], $Prefix3));
$EndeSw = strpos($_IPS['VALUE'], $Suffix3, $AnfangSw);
$Switch = substr($_IPS['VALUE'], $AnfangSw, $EndeSw-$AnfangSw-1);
//IPS_LogMessage("Switch roh: ", $Switch);

	if($Switch == "On"){
      $Switch = true;
      }else{
      $Switch = false;
      }

//IPS_LogMessage("Data rin: ", $data);
//IPS_LogMessage("AnfangID: ", $AnfangID);
//IPS_LogMessage("EndeID: ", $EndeID);
//IPS_LogMessage("EndeValue: ", $EndeValue);
//IPS_LogMessage("IDx: ", $ID);
//IPS_LogMessage("Value: ", $Value);
//IPS_LogMessage("Switch: ", $Switch);


switch ($ID) {
			case "11":
	         SetValueFloat(19733 /*[Technik\Heizung\Heizungskreislauf\Vorlauftemperatur]*/, $Value);
         break;
			case "12":
	         SetValueFloat(35466 /*[Technik\Heizung\Ofen unten\Kesseltemperatur rein]*/, $Value);
         break;
			case "13":
	         SetValueFloat(27988 /*[Technik\Heizung\Ofen unten\Kesseltemperatur raus]*/, $Value);
         break;
			case "14":
	         SetValueFloat(16213 /*[Technik\Heizung\Heizungskreislauf\Raumtemperatur]*/, $Value);
         break;
			case "15":
	         SetValueFloat(50069 /*[Technik\Heizung\Ofen unten\Kesseltemperatur raus Anlegefühler]*/, $Value);
         break;
			case "16":
	         SetValueFloat(41903 /*[Technik\Heizung\Ofen unten\Kesseltemperatur]*/, $Value);
         break;
			case "17":
	         SetValueFloat(37351 /*[Technik\Heizung\Ofen unten\Kesseltemperatur rein Anlegefühler]*/, $Value);
         break;
			case "18":
	         SetValueFloat(37285 /*[Technik\Heizung\WW-Speicher\Speichertemperatur unten]*/, $Value);
         break;
			case "19":
	         SetValueFloat(38710 /*[Technik\Heizung\WW-Speicher\Speichertemperatur oben]*/, $Value);
         break;
			case "21":
	         SetValueFloat(17367 /*[Technik\Heizung\Ofen oben\Kesseltemperatur rein Anlegefühler]*/, $Value);
         break;
			case "22":
	         SetValueFloat(51305 /*[Technik\Heizung\Ofen oben\Kesseltemperatur]*/, $Value);
         break;
			case "23":
	         SetValueFloat(10757 /*[Technik\Heizung\Ofen oben\Kesseltemperatur raus Anlegefühler]*/, $Value);
         break;
			case "24":
	         SetValueFloat(51638 /*[Technik\Heizung\Ofen oben\Temperatur Ansaugluft]*/, $Value);
         break;
			case "25":
	         SetValueFloat(28208 /*[Technik\Heizung\Ofen oben\Temperatur Ofen unten]*/, $Value);
         break;
			case "26":
	         SetValueFloat(47645 /*[Technik\Heizung\WW-Speicher\Wassertemperatur unten]*/, $Value);
         break;
			case "27":
	         SetValueFloat(32898 /*[Technik\Heizung\WW-Speicher\Wassertemperatur oben]*/, $Value);
         break;
			case "28":
	         SetValueFloat(10847 /*[Technik\Heizung\WW-Speicher\Wassertemperatur Zirkulation]*/, $Value);
         break;
			case "29":
	         SetValueFloat(28889 /*[Technik\Heizung\Solaranlage Dach\Solarkollektor Rücklauftemperatur]*/, $Value);
         break;
			case "30":
	         SetValueFloat(26414 /*[Technik\Heizung\Solaranlage Dach\Solarkollektor Vorlauftemperatur]*/, $Value);
         break;
			case "31":
	         SetValueFloat(33279 /*[Technik\Heizung\Solaranlage Dach\Solarkollektor1 Temperatur]*/, $Value);
         break;
			case "91":
	         SetValue(51243 /*[Technik\Heizung\Heizungskreislauf\ESP_Heizungsraum_Uptime]*/, $Value);
         break;
			case "92":
				$UpTimealt = GetValueInteger(25286 /*[Technik\Heizung\Ofen unten\ESP_PO_unten_Uptime]*/);
				$Leistungsvorgabe = GetValueInteger(55234 /*[Technik\Heizung\Ofen unten\LeistungsVorgabeInt]*/);
	         SetValue(25286 /*[Technik\Heizung\Ofen unten\ESP_PO_unten_Uptime]*/, $Value);
	         // WatchDog
					$UpTimeneu = $Value;
					$Diff = $UpTimeneu - $UpTimealt;
					if ($Diff < 0){
					WWWReader_SetPage(52045 /*[WWW Reader Nabbis]*/, "http://192.168.113.201/control?cmd=PWM,13,".$Leistungsvorgabe);
					IPS_ApplyChanges(52045 /*[WWW Reader Nabbis]*/);
					WWWReader_UpdatePage(52045 /*[WWW Reader Nabbis]*/);
					}
         break;
			case "93":
	         SetValue(45598 /*[Technik\Heizung\Solaranlage Dach\ESP_Solaranlage-Dach_Uptime]*/, $Value);
         break;
			case "94":
	         SetValue(33550 /*[Technik\Heizung\WW-Speicher\ESP_WW-Speicher_Uptime]*/, $Value);
         break;
			case "95":
	         SetValue(58161 /*[Technik\Heizung\Solaranlage Dach\U_ESP_Solaranlage-Dach]*/, $Value);
         break;
			case "96":
	         SetValue(28222 /*[Technik\Heizung\WW-Speicher\U_ESP_WW-Speicher]*/, $Value);
         break;
			case "97":
	         SetValue(59097 /*[Technik\Heizung\Heizungskreislauf\U_ESP_Heizungsraum]*/, $Value);
         break;
			case "98":
	         SetValue(29760 /*[Technik\Heizung\Ofen oben\U_ESP_PO_oben]*/, $Value);
         break;
			case "99":
	         SetValue(32802 /*[Technik\Heizung\Ofen unten\U_ESP_PO_unten]*/, $Value);
         break;
	}
}

?>

Hope it helps.

mfg

BerndJ

Hallo Bernd,
vielen Dank für den Tipp mit ESPeasy. Ich habe mich vorher auch mit der Aduino-IDE und diversen Librarys beholfen, aber über das ESPeasy war es ein Leichtes eine kleine Wetterstation zusammen zu klicken :smiley:
Hier mein Setup:


Davis Anemometer – Windstärke und Windrichtung
DHT22 – Temperatur und Luftfeuchtigkeit
BMP085 – Temperatur und Luftdruck

Hier das dazugehörige Setup des ESP:

Den Rest habe ich wie Du bereits beschrieben hast über einen Socket Server, Registervariable und ein Script realisiert. Hier habe ich für die Sensoren, die mehrere Messwerte liefern (DHT22/BMP085) noch ein Explode eingebaut:

<?

//IPS_LogMessage("Sender ", $_IPS['SENDER']);

if ($_IPS['SENDER'] == 'RegisterVariable'){
    $data = $_IPS['VALUE'];

    $Prefix1 = "&idx=";                                    // damit fängt der Datensatz an
    $Suffix1 = "&";
    $Prefix2 = "&svalue=";                                    // damit fängt der Datensatz an
    $Suffix2 = "HTTP/1.1";
    $Prefix3 = "&switchcmd=";                                    // damit fängt der Datensatz an
    $Suffix3 = "HTTP/1.1";

    //$Ende1nachZeichen = 2;                                       // und ist xx Zeichen lang
    $AnfangID = strlen($Prefix1)+(strpos($_IPS['VALUE'], $Prefix1));
    $EndeID = strpos($_IPS['VALUE'], $Suffix1, $AnfangID+1);
    $ID = substr($_IPS['VALUE'], $AnfangID, $EndeID-$AnfangID);

    $AnfangValue = strlen($Prefix2)+(strpos($_IPS['VALUE'], $Prefix2));
    $EndeValue = strpos($_IPS['VALUE'], $Suffix2, $AnfangValue);
    $Value = substr($_IPS['VALUE'], $AnfangValue, $EndeValue-$AnfangValue-1);

    $AnfangSw = strlen($Prefix3)+(strpos($_IPS['VALUE'], $Prefix3));
    $EndeSw = strpos($_IPS['VALUE'], $Suffix3, $AnfangSw);
    $Switch = substr($_IPS['VALUE'], $AnfangSw, $EndeSw-$AnfangSw-1);
    //IPS_LogMessage("Switch roh: ", $Switch);

    if($Switch == "On"){
       $Switch = true;
   }
    else{
         $Switch = false;
   }

    //IPS_LogMessage("Data rin: ", $data);
    //IPS_LogMessage("AnfangID: ", $AnfangID);
    //IPS_LogMessage("EndeID: ", $EndeID);
    //IPS_LogMessage("EndeValue: ", $EndeValue);
    //IPS_LogMessage("IDx: ", $ID);
    //IPS_LogMessage("Value: ", $Value);
    //IPS_LogMessage("Switch: ", $Switch);


    switch ($ID) {
         case "11": //Windgeschwindigkeit
             SetValueFloat(26977 /*[Scripts & Co\ESPeasy\ESP - Windgeschwindigkeit]*/, $Value);
         break;
         case "12": //Windrichtung
             SetValueFloat(23879 /*[Scripts & Co\ESPeasy\ESP - Windrichtung]*/, $Value);
         break;
         case "13":
                    $aValue=explode(";", $Value);
                    SetValueFloat(54102 /*[Scripts & Co\ESPeasy\ESP - Luftfeuchtigkeit]*/, $aValue[1]);
         break;
         case "14":
                    $aValue=explode(";", $Value);
                    SetValueFloat(20893 /*[Scripts & Co\ESPeasy\ESP - Temperatur]*/, $aValue[0]);
                    SetValueFloat(49717 /*[Scripts & Co\ESPeasy\ESP - Luftdruck]*/, $aValue[3]);
           break;
    }
}

?>

LG Tommy

Sehr genial! Werd ich die Tage direkt mal testen. Habe rein zufällig auf einem meiner ESP8266 (ESP01 die kleinste Variante) ESP-Easy am laufen. Und habe mich schon gefragt wie ich die Werte mit dieser UDP/TCP Funktion an IPS senden kann.

Was genau stellst du in der FW Oberfläche ein damit es zu IPS kommuniziert? Ich hab noch IPS 3.4 :frowning:

Hi,
ich habe den eingerichteten Server Port:
2016-08-09 07_37_27-IP-Symcon Management Console [@home].png

und die Adresse meines IPS Servers und auf der Configseite des ESP eingetragen:

LG Tommy

@Tommy

Wo kommt dein ESP8266 später für die Wetterstation hin?
Werden die Kabel ins Haus reingelegt?
Wie betreibst du das ESP Modul später mit Strom?

Der Windsensor kommt oben aufs Dach, die Kabel führe ich auch unseren Dachboden. Da kann ich den ESP dann im trockenen installieren, hier habe ich auch eine Steckdose für ein kleines Schaltnetzteil. Was ich allerdings noch nicht weiß, wie ich meinen Regenmengensensor und meinen Feuchtesensor anbringen soll, ohne das beides durch Wind und Wetter beschädigt wird.

Alternativ hatte ich mir aus China eine angeblich wetterfeste Powerbank mit Akku für wenige Euronen gekauft. Diese wollte ich dann mal Testweise ins Gewächshaus stellen. Muss dafür wahrscheinlich den DeepSleep Modus der ESPs nutzen um da dauerhaft messen zu können.

Ich wollte an dieser Stelle kurz berichten, was ich mit dem ESPeasy gemacht habe.

Ich habe bei meinem Garagentor, 2 Magnetschalter montiert. Diese erkennen, ob das Tor offen oder geschlossen ist.
Ein weiterer GPIO hängt an einem Relais, der wie ein Taster arbeitet. Damit kann ich das Tor dann öffnen und schließen.

Danke für euere Skripte. Hat bei mir ebenfalls alles geklappt.

Als nächstes möchte ich mit einem ESPeasy noch die Türklingel abgreifen. Habt ihr eine Idee wie ich das an einen GPIO hinbekomme? Klingel mit Taster und 8 V Wechselspannung.
Besonderheit, ich muss das mit einer Batterie dann machen.
Klingel gedrückt. ESP fährt hoch, setzt den Befehl ab, und geht wieder in den Schlaf.
Bisher konnte ich den ESP noch nicht aus dem Schlaf wecken.

Um ihn aus dem Schlaf wecken zu können musst du den GP IO 16 mit Reset verbinden

Gesendet von iPhone mit Tapatalk

Für eine Klingel wäre das hier gut geeignet http://esp8266-server.de/Notruftaster.html

Hallo zusammen,
ich habe mich jetzt auch ein wenig mit dem ESP8266 (D1 mini) beschäftigt. Ich würde gerne mit ESPeasy eine UART-TCP Bridge realisieren, um einen RFID-Leser an IPS anzubinden. Für das ESP-Modul gibt es zwar schon einige Firmwares, die eine solche Bridge realisieren, aber diese erzeugen alle einen TCP-Server auf dem ESP-Modul, an den ich mich dann von IPS (Client-Socket) verbinden müsste. Da ich RFID-Events relativ selten sind, würde ich die Anbindung gerne andersrum machen:

  • RFID schickt seriell einen String auf den UART des ESP-Moduls
  • ESP-Modul (als TCP-Client oder zur Not auch HTTP-Client) baut eine Verbindung zum IPS (Server Socket) auf und schickt die Daten weiter.

Kann man dies mit ESPeasy irgendwie realisieren? Oder ist Euch eine andere ESP-Firmware bekannt, die dies macht?

Gruß
Peter

Schau mal, ob dir das hier weiterhilft:

http://www.esp8266.nu/index.php/Ser2Net

So ganz bin ich aus der Beschreibung nicht schlau geworden und konnte es noch nicht ausprobieren.

Servus

Ja, ich habe einige Arduino und ESP in dieser Konfiguration als UART-TCP Bridge laufen.
IPS ist ServerSocket der ESP ClientSocket.

Software ist selbstgemacht oder sag ma mal selbst ergoogelt und dann an meine Bedürfnisse umgebaut.
Soweit läuft alles brav ich habe damit meine PV Wechserichter nach IPS gebracht.
Zur Anbindung eines RFID hab ich auch schon mal was mit ESP gemacht. Die Daten gehen aber nicht an IPS sondern an die Modelleisenbahnsteuerung. ISP hat aber gut beim debuggen geholfen :loveips:

gruß
bb

Vielen Dank für die Tipps.
@thifi: An Ser2Net hatte ich auch schon gedacht, allerdings vermute ich, dass dann der TCP-Server auf dem ESP-Modul läuft (sonst müsste man in der Konfig des Devices auch die IP-Adresse des IPS mit angeben).
@bbernhard: hmm, ist vermutlich der bessere Weg, sowas direkt (ohne spezielle Firmwares) über die Arduino IDE zu machen. Ein Kollege sagte mir gerade, dass das nur ein paar wenige Zeilen Code sein werden. Ich mach mich mal schlau :wink:

Gruß
Peter