ESPeasy

Hallo,

irgendwie funktioniert das Script nicht unter IPS4.4 - bekomme fast für jede Zeile ähnliche Fehlermeldungenwie
Parse error: syntax error, unexpected ‚$Prefix1‘ (T_VARIABLE) in C:\IP-Symcon\scripts\38071.ips.php on line 23
Abort Processing during Fatal-Error: syntax error, unexpected ‚$Prefix1‘ (T_VARIABLE)
Error in Script C:\IP-Symcon\scripts\38071.ips.php on Line 23

viele Grüße
Georg

Hi,

falls von Dir das Script in DIESEM Beitrag gemeint ist, es steht nicht ohne Grund oben drüber:

„Ich füge mal ein Auswertescript bei, es dient Sonoff Pows,“

Solche Scripte werden nicht manuell angestossen, sie sind von Systemvariablen abhängig und deshalb werden sie i.d.R. auch von Registervariablen aufgerufen.

Hope it helps.

mfg

BerndJ

PS: bei mir laufen zur Zeit 11 Stück von 17 angelegten unter 4.4 ohne Probleme, einer sendet seine Daten von ausserhalb.

Hi,

ich habe das bei mir etwas anders gelöst. Ich habe ein WebHook erstellt und rufe den einfach vom ESPeasy über die Rules auf.
Beispiel Rules:

on Board#Temperature do
SendToHTTP 192.168.xxx.xxx,3777,/hook/ESP-Systemtemperatur?Unit=13&Wert=[Board#Temperature]
endon

on Taster1#Switch=1 do
SendToHTTP 192.168.xxx.xxx,3777,/hook/Hoflicht?Wert=1
endon

Beispiel für Auswerten mit Symcon: (Auschnitt)

	IPS_LogMessage("WebHook GET", print_r($_GET, true));

	$Wert = $_GET['Wert'];
	$Unit = $_GET['Unit'];
   
   
   switch ($Unit) {
			   case "10":
			   SetValueFloat($var_System_Temperatur_Unit_10, $Wert);

Die Teile habe ich mir mit einem ESP-12E selbst gebaut.

Grüße Jörg

@Tommy

kennst du zufällig die URL wenn man ein Loginpasswort gesetzt hat?
Hab gerade eben mit ESPEASY mein sonoff 4ch geflasht. Hat alles funktioniert.
das teil wählt sich ein mein wlan ein und ist erreichbar.
Hab daraufhin ein loginpasswort gesetzt… blöd nur das die Startseite nun unter diversen Browsern/Auflösungen/Endgeräten, das Passwortfeld nicht anzeigt… Ich sehe nur wenige Millimeter des Login Buttons…
Habs auch schon vom Handy probiert :wink:

Arghhh…

Hi mastermind1,

häng einfach ?password=<DeinKennwort> hinten an die URL…

z.B.
http://<IPvomESP>/login?password=test

Hoffe das hilft Dir weiter.

LG Tommy

PS: Ich baue gerade die ganzen ESP Easys auf Tasmota um -->
GitHub - arendst/Sonoff-Tasmota: Provide ESP8266 based itead Sonoff with Web, MQTT and OTA firmware using Arduino IDE or PlatformIO
[Modul] Tasmota

Danke für den Hinweis.

Ich wollte zuerst tasmota, aber für das sonoff 4ch zur Gartenwegebeleuchtung ist espeasy IPS tauglicher. Kein mqtt… Einfach domoticz http mit IP von IPS + ne Server Socket Port eintragen und in IPS anlegen… Fertig…
Für einfaches an / aus ausreichend…
Gibt es besondere Grunde für tasmota? Schneller? zuverlässiger?

Gesendet von meinem Redmi 4X mit Tapatalk

Eingentlich nur den einen, das Andere besser als ich Programmieren können und bei dem Tasmota gibt es halt ein funtionierendes Modul :wink: Sonst habe ich in meinem Sezarios eigentlich auch keinen wirklichen Vorteil.

LG Tommy

@BerndJ

sehe ich es richtig das du generell von ESPEasy auf ESPEasyMega umgestiegen bist?
Ich bin mit der aktuellen ESPEasy Version irgendwie auf Kriegsfuss… Tasmota möchte ich aber nicht, da ich kein MQTT dazwischen möchte…

Ich möchte lediglich 4x Gartenleuchten mit nem Sonoff 4CH aus/einschalten können.
Recht überschaubar. Aber die Schaltzuverlässigkeit ist irgendwie supsekt.
So lässt sich die Status LED aus/einschalten, aber nur manchmal?..

Hi,

Ja.

Mal ganz abgesehen davon dass OTA
(Firmwareflashen via WLAN) mit 512 kB nicht funktioniert,
war ausschlaggebend dass durch die vielen neuen Plugins (welche ja das wichtigste an ESPEasy sind)
der verfügbare Speicher mit seinen 512 kB nicht mehr ausreichte.

Zu Deinen Problemen:

fällt mir ad-hoc nur die Frage ein:
Wie gut ist denn die WLAN Verbindung?
schön zu sehen unter (Rev.148):
Tools --> System -> Info --> Wifi RSSI.
Werte um die - 50 dB sollten keine Probleme bereiten,
ab - 80 dB wird es langsam und kritisch;
vor allem wenn sich viele weitere in diesem Frequenzbereich tummeln
und somit der Prozessor damit beschäftigt ist diesen Zusatzmüll zu verstehen;
ihn aber immer wieder entsorgen muss.

Einfach mal im AccesPoint schauen wer da noch auf welchen Kanälen aktiv ist.

Und viel interessanter:
Welche Netze tummeln sich im Garten?
Als ich noch eine FB 7390,
dummerweise mit Default SSID, nutzte,
stellte ich im Garten fest:
da gibt es NOCH eine, mit demselben Namen im Abstand ca. 40m.
Wir haben hinter dem Garten ein Feld, dann eine neue Strasse und erst dahinter die Neubauten.

Bei mir im Haus war nichts von dieser zu ermitteln.

Anderer Knackpunkt:

die richtige Zielhardware gewählt?
Wenn ich das Schaltbild und die Unterlagen richtig interpretiere
handelt es sich NICHT um einen ESP8266
sondern um einen ESP8285 welcher den Flashspeicher (1MB) mit auf seinem Chip hat.

Fertige Flashfiles findest Du HIER, werden fast täglich aktualisiert.

Wobei der Informatiker in mir mich warnt:
die Hälfte werden benötigt für das Speichern der neuen Firmware = 1024 / 2 ergibt 512 kB,
der Rest für das Laufende.
Die Grösse der 3 möglichen Files liegen aber beispielsweise zwischen 563 kB bis 627 kB in der auf meinem Rechner liegenden Datei vom 24.1.!

Es hat schon seinen Grund dass ich die Module mit 4 MB nutze und dann auf eigene Relaiskarten setze.

Hope it helps.

Mfg
BerndJ

@BerndJ
danke für deine tipps.
das Sonoff 4ch teil ist natürlich ein ESP8285. Ich habe zuerst Tasmota OTA ausprobiert - ohne Erfolg. Evtl. liegt dort noch ein Rest.
Dazu werde ich mal folgende Erase Flash Anleitung durchackern, und den Flash „leeren“.
http://www.pratikpanda.com/completely-format-erase-esp8266-flash-memory/

Ich habe das Sonoff 4ch Teil bisher auf dem Sofa direkt neben der Fritzbox aufgebaut.
(Hab für das zukünftige Plätzchen -in der Garage- schon ne I-PEX SMA Buchse + I-PEX WLAN Antenne bestellt ):smiley:
Laut meinem WifiAnalyzer auf meinem Smartphone müsste ich an dem Garagenplätzen knapp - 72dBm bis -75dBm haben.

Ich mein ich hab beim durchklicken auf der Webseite irgendwas von -54dBm gesehen. Für das Plätzchen in der Garage wird ne WLAN Antenne montiert.

Default SSID habe ich keine… bei mir ist alles custom :banghead:

Ich muss dann mal schauen, ob ich durch neukompilieren das Zeug klein bekomme. Ich benötige sicherlich 95% der Funktionen nicht.
Ich möchte „nur“ 4x Gartenleuchten ein/ausschalten. Kein Sensor, keine Leistungsmessung…
In dem Arduino Projekt hab ich mich schon gewundert, was alles mit importiert wird… (für mich absolut unnötig)…

Danke für den Link zu dem ESPMega Repository. Ich schau mir diese mal an.

Zum Glück habe ich noch 1 - 2 Monate Zeit bis die Gartensaison langsam beginnt…:wink:

nach dem speicher löschen mit dem erase Firmware file, und dem neuaufspielen der ESPEasy Mega Firmware vom 24.02. läuft es rund!
Die 4x Relais angelegt (GPIO 15,12,5,4) in der Webseite und schon geht das schalten aus IPS heraus mit:

schalten von Relais 2 - 4

<?
if($IPS_SENDER == "WebFront")
 {
 switch($IPS_VALUE)
 {
 case 1:
 // Lampe 2-4 an
 file_get_contents("http://192.168.2.29/control?cmd=GPIO,12,1");
 file_get_contents("http://192.168.2.29/control?cmd=GPIO,5,1");
 file_get_contents("http://192.168.2.29/control?cmd=GPIO,4,1"); 
 SetValue(37833 /*[Haus\Garten\Sonoff 4ch\Lampen 1-3]*/,1);
 break;
 case 0:
 // Lampe 2-4 aus
 file_get_contents("http://192.168.2.29/control?cmd=GPIO,12,0");
 file_get_contents("http://192.168.2.29/control?cmd=GPIO,5,0");
 file_get_contents("http://192.168.2.29/control?cmd=GPIO,4,0");
 SetValue(37833 /*[Haus\Garten\Sonoff 4ch\Lampen 1-3]*/,0);
 break;
 }
 } 
?>

schalten von Relais 1:

<?
if($IPS_SENDER == "WebFront")
 {
 switch($IPS_VALUE)
 {
 case 1:
 // Lampe 1 an
 file_get_contents("http://192.168.2.29/control?cmd=GPIO,15,1");
 SetValue(48791 /*[Haus\Garten\Sonoff 4ch\LED Schlauch]*/,1);
 break;
 case 0:
 // Lampe 1 aus
 file_get_contents("http://192.168.2.29/control?cmd=GPIO,15,0");
 SetValue(48791 /*[Haus\Garten\Sonoff 4ch\LED Schlauch]*/,0);
 break;
 }
 } 
?>

@BerndJ

ich hoffe meine letzte doofe Frage…

In deinem Abfrageskript hast du in den Case Bedingungen „case 11… case 12… case13…“.
Wo ziehst du diese Nummerierung aus dem ESPEasy bzw. wo definierst du diese?
Unter Devices - Edit - „Data Acquisition - Sent to Controller IDX Nummer xy“…?

Unter Controllers habe ich wie in deinen Screenshots gezeigt, Domoticz HTTP, IP von IPS, Port von einem neuen Server Socket… Register Variable angelegt… …

Hi,

gibt es nicht; … zumindest wenn man nicht blöd bleiben möchte!; :slight_smile:
… und ESPEasy ist relativ umfangreich; … und für IPS könnte man noch viele weitere Wege der Kommunikation finden.

Schau mal unter Devices --> wähle per EDIT einen aus --> als Beispiel mal DS18B20 -->

und schon kannst Du unter IDX / Var. for Controler 1; natürlich nur wenn der gesetzt ist,

dieses Nümmerli eingeben.

Das Domotics HTTP Protokoll braucht es,

wir haben allerdings per PHP die Möglichkeit dieses ebenfalls als Identitätsmerkmal zu nutzen.

Immer schön drauf achten dass es für jeden Sensor eine einmalige (unique) Nummer gibt.

In der Anfangsphase habe ich mit Hilfe einer Excel- bzw. LibreOfficetabelle geplant,
mittlerweile reicht mir die fortlaufende Numerierung innerhalb eines gemeinsamen Auswertescriptes.

Kurz was zu den Grundlagen:

Wir unterscheiden zwischen Aktoren und Sensoren:

Aktoren:
alles was schaltet, steuert oder regelt; sprich ausführt:

Initiator: IPS, eine APP oder eine Browsereingabe;
möglich aber auch eine RULE innerhalb von ESPEasy.
ESPEasy: sendet nur einen JSON String zurück, der den Zustand mitteilt
Visualisierung: entweder IPS mit seinen Mitteln oder eine Abfrage des Webinterfaces von ESPEasy

Nachteile: wertest Du die Antwort aus, so klappt das nur wenn IPS der Initiator ist oder Du für diesen Fall etwas als Nachricht in einer Rule hinterlegt hast.

Sensoren:
die „Fühler“ Deines Systems

A) Timergesteuert
ein Großteil der unter Devices einzurichtender Sensoren ist durch einen Timer gesteuert, siehe im Device den Punkt Intervall. Bei einem 1-Wire Bus mit 10 Sensoren dran und 500 Liter Pufferspeicher muss man nun nicht wirklich alle 10 Sekunden einen Messwert erhalten.
Bei anderen erscheint auch dieser Punkt, allerdings werden diese Teile intern wesentlich schneller abgefragt.
Schau Dir mal den Quelltext an, dann wirst Du Routinen finden mit dem Header „* Tasks that run 10 times per second“, diese ab Zeile 1132 in der ESPEasy.ino,
einige Zeilen davor 50 per second, sprich Abfrage alle 20 mS.

Es geht aber auch noch fixer, Dank der Grundlagen der Digitaltechnik aus den 70igern:

B) Interruptgesteuert
Hier meldet die Hardware eine Veränderung am Eingang auf eine gesonderte Interruptleitung und der Prozessor wird aufgefordert dieses Ereignis sofort abzuarbeiten.
JoachimP hat es gerade erfolgreich bei seinem Modul PIGPIO und dem MCP23017 umgesetzt.

Bei beiden gilt:
Initiator: ESPEasy, bzw. Zustandswechsel am Sensor oder eine Rule
ESPEasy: sendet nur einen JSON String mit der IDX beim DOMOTICS HTTP Protokoll
Visualisierung: entweder IPS mit seinen Mitteln oder eine Abfrage des Webinterfaces von ESPEasy

Vorteile: brauchst nicht mehr Pollen um eine Antwort zu erhalten, die Werten kommen von alleine.

Was wäre aber schön wenn auch eine Bedienung per App bei Aktoren in IPS erscheinen soll.

Hierzu setzt man einfach den entsprechenden Port des Aktors parallel als Device bei den Sensoren;

und schon erscheint ein Schaltbefehl der App in IPS als Änderung des Sensors an demselben Port.

mfg

BerndJ

PS: Beispiel stammt aus der Rev. 148 MEGA

@BerndJ
you made my day;)

Vielen dank für die ausführliche Erklärung. Nun habe ich des kapiert.
Mir reicht die IDX Variante pro GPIO Switch super aus. Im Debug sehe ich die Schaltbefehle in IPS ankommen, die das Sonoffteil meldet…

Unsere Hofeinfahrt ist noch gar nicht umgebaut, und ich überlege schon ob ich ein zweites Sonoff 4ch brauchen könnte, und vor allem für was?

Und ESPEASY Mega ohne Cloud, nativ per RegisterVariable in IPS ist einfach klasse. Schaltgeschwindigkeit ist top.
Einzigstes Manko vielleicht, dass die Befehle nacheinander abgearbeitet werden.
Evtl. könnte man das über die Taskfunktion lösen… aber bei uns sieht es in der Hofeinfahrt sicher schick aus, wenn sich die Bodenspots nacheinander ein und ausschalten…

Hi,

wozu einen zweiten ESP?
trenn GPIO 4 und 5 zum 2N7001 auf (sprich beide R raus)
GPIO 4 und 5 unter Hardware --> SDA und SCL als I2C Bus festlegen,
klatsch daran einenMCP23017 (zur Not auch 8 Stück davon)
und schon gibt es weitere 16 Ports pro MCP.
Falls 16 Ports zuviel sein sollten, nimm PCF8574.
Dahinter dann Relaiskarten mit ´nem ULN als Treiber und gut is.
Wobei ich bei mir LED´s einsetze und es bevorzuge per Transistor zu schalten.
Schon mal über ein 100W Solarpanel mit Laderegler als autarke Lösung nachgedacht?
Momentan wird die Batterie meines Gastankers so am Leben erhalten.

Falls so ein Lochrasterverhau nicht Dein Ding ist, Helmut hatte letztens DIESE TEILE dabei, dort sind jeweils 2 Stück drauf, ebenso ein Pegelwandler auf 5V TTL Pegel und die Interruptleitungen sind mit auf die Stecker für die Ports geführt. Kosten bei ihm 17€.

Stimmt, hat nicht jeder.
Wobei RGBW Stripes und die Ansteuerung über PCA9685 setzt dem dann noch mal die Krone auf.

Pack das in eine Rule, auch mit Wartezeiten, und ruf nur die auf.

Dann haben wir jetzt gerade den richtigen Zeitpunkt für sowas.

mfg

BerndJ

PS:
Immer bei Basteleien an SONOFF´s bedenken:
die sind NICHT galvanisch getrennt!
Wer das ausser Acht lässt spielt mit dem eigenen Leben!

Hallo BerndJ,

ich ziehe gerade die meisten Funktionen von meinem Win10/64-IPS-Rechner (IPS v4.4) auf eine Raspberry auch mit v4.4 um. Bei meiner Einbindung (modifiziertes Script hier aus dem Forum über Registervariable, siehe unten im Codeblock) der ESPEasy-Subsysteme, bin ich auf folgendes Problem gestossen. Multiple übergebene Values, z.B. vom BME280 sind durch Semikolon getrennt und werden auch korrekt übernommen. Single Values werden aus der Registervariable nicht umgewandelt. Irgendwie mache ich da einen trivialen Fehler und habe aktuell ein Brett vor dem Kopf. Hast du einen Tipp für mich. Debug Log ist auch mit dabei.

Gruss
Bernd

<?
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("ES Switch roh: ", $Switch);

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

    switch ($ID) {
	
         case "244": // BH1750 Lichtstärke
		 	 $aValue=explode(";", $Value);
             SetValueFloat(22250 /*[ESPEasy\LichtBH1750]*/, $Value[0]);
         break;
		 
	     case "220": // TLS2561 Lichtstärke
             SetValueFloat(13807 /*[ESPEasy\LichtTLS]*/, $Value);
         break;
		 
		 
         case "230": // WLAN Feldstärke
             SetValueInteger(20866 /*[ESPEasy\RSSI]*/, $Value);
         break;
		 
         case "280":  // BME280
                    $aValue=explode(";", $Value);
                    SetValueFloat(41156 /*[ESPEasy\Luftdruck]*/, $aValue[0]);
                    SetValueFloat(18920 /*[ESPEasy\Luftfeuchtigkeit]*/, $aValue[1]);
					SetValueFloat(56627 /*[ESPEasy\Temperatur]*/, $aValue[3]);
         break;
		 
    }
}
?>

Ach ja, noch vergessen, die ESPEasy Version:

  • Build 20000 - Mega (core 2_3_0)
  • GIT version v2.0-20180228
  • Plugins 46 [Normal]

Hi,

probier mal als Suffix2
statt

$Suffix2 = „HTTP/1.1“;

$Suffix2 = „&rssi“;

mfg

BerndJ

Hallo Bernd,

danke für den Tipp. Hätte ich auch selber drauf kommen müssen. Na ja, der Wald und die vielen Bäume.

Ich habe jetzt bei mir „&rssi=“ eingebaut. Mal schauen, wann die nächste Änderung kommt. Natives MQTT wäre mir lieber, habe ich ja auch so in Lübeck gesagt. Das mit Strings über die Leitung jagen und zurecht schnippeln ist nicht so mein Ding.

Nochmal danke für die Hilfe

Gruss aus Franken
Bernd

Hi Namensvetter,

ich war zwar auch da, aber leider haben wir uns nicht persönlich kennengelernt, … schade; holen wir nächstes mal nach!

Jo,

dann sei der Erste der hiermit rumspielt und seine Ergebnisse preis gibt.

Zur Auswahl stehen:

immerhin 3 Varianten davon.

Viel Erfolg; und wir freuen uns drauf.

mfg

BerndJ

Hallo Bernd,

ja leider, in Lübeck waren zu viele Gesichter, zu viele interessante Themen und viel zu wenig Zeit.

Zu MQTT, ich meinte mit nativ natürlich in IP-Symcon ;-). Bei ESPEasy kann man wie in deiner Darstellung als MQTT-Controller Domoticz, ObenHAB und PiDome eintragen. Wobei ersteres aktuell nur für´s Empfangen und die anderen beiden nur Preliminary sind.

Ich bin mir nur noch nicht sicher, wie ich die MQTT-Messages in IPS hereinbringe. Entweder über das Modul hier im Forum, oder ueber ioBroker. Beim ioBroker bin ich mir aber nicht sicher, ob der zusammen mit IP-Symcon und piVCCU einen Raspberry 3 von den Resourcen her überfordert.

Gruesse aus Franken
Bernd