Hat hier schon jemand mit ESp8266, der Arduinoumgebung und dem MySQL-Connector (https://github.com/ChuckBell/MySQL_Connector_Arduino) gearbeitet? Für ein paar Quick&Dirty Funksteuerungen (die Frau hat festgestellt, daß plötzlich Weihnachten ist) hab ich einige Sonoff SS20-Steckdosen genommen die sich ihren Schaltzustand aus einer MySQL-DB holen, die Abfrage soll einmal die Sekunde laufen. Im Betrieb hat sich herausgestellt, daß der eingebaute Schalter extrem träge reagiert. Bei der Fehlersuche hat sich gezeigt, daß selbst der einfache MySQL-Select aus dem Beispiel (https://github.com/ChuckBell/MySQL_Connector_Arduino/blob/master/examples/basic_select/basic_select.ino) über eine Sekunde dauert. Das Errorlog des Servers ist leer, es wird nicht einmal ein slow_query protkolliert. Gibt es ähnliche Erfahrungen/Lösungen/Alternativen?
Wieso nimmst du nicht Tasmota? Da brauchst du keine Datenbank. Das holt sich die Zeit aus dem Netz, kann anhand von eingestelltem Längen/Breitengrad den Sonnenstand errechnen und bei errechneter Dämmerung einschalten. https://github.com/arendst/Tasmota
> Gibt es ähnliche Erfahrungen/Lösungen/Alternativen?
Nein, das habe ich so extrem noch nie erlebt.
Ist die Datenbank auch so langsam, wenn du die gleiche Abfrage mit einem
anderen MySQL Client (auf dem PC) ausführst?
Wie lautet das SQL Statement, wie sieht die Tabellenstrukur aus (show
create table ....) und wie viele Datensaätze hat sie insgesamt?
Oliver S. schrieb: > Wieso nimmst du nicht Tasmota? Weil ich schon eine laufende MySQL-Datenbank habe, mit auch die Zeit von einem NTP-Server hole und für die sechs Wochen die Dämmerung nicht neu berechnen muß. Die Frage nach Alternativen bezog sich auf eine MySQL-Lib für Arduino. Die Abfragen von anderen Geräten und vom Webserver, der mit der DB auf einem PI3 läuft, liegen im normalen Bereich. Die Tabelle 'Schalter' hat aktuell sieben Spalten: Nummer,In1,In2,Out1,Out2,Temp,Bezeichnung und für jeden der 5 SS20 eine Zeile. Der Query ist ein simpler SELECT Out1 FROM Schalter WHERE Nummer = $IP[3] Wobei IP[0-3] die aktuell zugewiesene IP-Adresse ist. Den Datenbankauszug kann ich nachher noch ausführlich posten.
Horst schrieb: > Die Abfragen von anderen Geräten und vom Webserver, der mit der DB auf > einem PI3 läuft, liegen im normalen Bereich. Dann ist die DB ja Ok, so dass dies nicht nötig ist: > Den Datenbankauszug kann ich nachher noch ausführlich posten. Du könntest den Zugriff auf die DB durch ein simples PHP Script leiten, dann brauchst du auf dem ESP8266 nur den normalen HTTP Client, der schnell ist.
1) Die Frage, warum du nicht Tasmota nimmst, kam ja schon. 2) Vielleicht schaust du dir mal MQTT zu Steuerung an. Nicht nur, weil das Tasmota das auch kann, sondern weil es für solche Zwecke halt absolut geeignet ist.
Torsten schrieb: > Vielleicht schaust du dir mal MQTT zu Steuerung an. Danke, die Vorschläge sind nett, aber ich stelle nicht mein komplettes System um, nur weil eine Komponente nicht ganz so gut damit läuft. Notfalls lasse ich auf dem Pi ein Script laufen, das die DB ausliest und die Steckdosen direkt über TCP anspricht bis ich die ohne Arduino neu geschrieben habe. Mich interessiert nur, wo es bei der MySQL-Lib hakt.
Versuche das mal dort zu klären, wo der Author der Bibliothek support leistet: https://github.com/ChuckBell/MySQL_Connector_Arduino/issues
Stefan F. schrieb: > Versuche das mal dort zu klären, wo der Author der Bibliothek > support > leistet: https://github.com/ChuckBell/MySQL_Connector_Arduino/issues Nachdem, was da zu lesen ist, ist eine Laufzeit von einer bis mehreren Sekunden für einen Query normal. Dann bleibt das erstmal so.
Du hast also eine mysql-Datenbank wo EInschalt- und Ausschaltzeiten drin stehen und lässt da dann diverse Arduinos und esp8266 drauf zugreifen. Das scheint ein interessantes Konzept zu sein, kannst du uns mehr dazu erzählen? Wie kommen die Daten in die Datenbank rein?
Naja, weniger Arduinos, die verwende ich selten und das sind jetzt die ersten ESP. Es sind ein paar Pi (Wetterastation, Heizungssteuerung ...), einige Mega8 und STM32 die über RS485 wieder an einem Pi-Zero hängen und als Sensoren und Schalter dienen (Lichtsteuerung, Zustand Türen+Fenster ...). Alle schreiben ihre Daten in die Datenbank auf einem PI3 und holen sich die Sollzustände dort ab. Diverse Scripte geben dann neue Zustände für die Aktoren in der Datenbank vor. Auf dem läuft auch ein Webserver über den alle Zustände abgefragt und geändert werden können. Natürlich auf einer Oberfläche mit LCARS-Design. Irgendwann hab ich da mal ne Doku zu fertig und pack die auf meine Webseite.
Horst schrieb: > .. die > Abfrage soll einmal die Sekunde laufen. Hm, hat mysql inzwischen nicht auch einen listen/notify System?
Von Autor von Tasmota gibt es scheinbar eine MQTT/MySQL Schnittstelle: https://github.com/arendst/mqtt-mysql Sorry, wenn wir hier alle auf MQTT rumreiten, aber das ist ein wirklich elegantes Kommunikationssystem.
JJ schrieb: > Sorry, wenn wir hier alle auf MQTT rumreiten, aber das ist ein wirklich > elegantes Kommunikationssystem. Das will ich ja gerne glauben, aber ich sehe trotzden keinen Sinn darin meine Anlage auf ein neues Protokoll umzustellen, nur weil ein Schalter nicht auf Anhieb mit meinem läuft. Zumal ich für den sowieso was selbst schreiben will sobald er keine Lichterketten mehr schalten muß.
Horst schrieb: > ich sehe trotzden keinen Sinn darin > meine Anlage auf ein neues Protokoll umzustellen, nur weil ein Schalter > nicht auf Anhieb mit meinem läuft Dann schreibe halt deinen eigenen MySQL Connector, wenn du meinst, das sei einfacher oder besser.
MYSQL ist kein Ersatz für MQTT und MQTT ist kein Ersatz für MYSQL. Gemeinsam ist das allerdings eine sehr gute Kombination.
Stefan F. schrieb: > Dann schreibe halt deinen eigenen MySQL Connector, wenn du meinst, das > sei einfacher oder besser. Besser geh ich von aus, auf einem stm32F103 mit Cat5 läuft der schnell genug, das sollte der ESP also auch besser können, einfacher als Arduino nicht, sonst hätte ich das nicht versucht, einfacher als die Umstellung auf MQTT mit Sicherheit. Ich war nur erstaunt, daß die Abfragen so langsam liefen und dachte ich hätte was falsch gemacht.
Horst schrieb: > einfacher als die Umstellung > auf MQTT mit Sicherheit. Du hast die Funktion von MQTT nicht einmal ansatzweise verstanden. SQL im IoT bis in das Frontend zu bringen ist so ziemlich die dümmste Idee überhaupt. ...aber wenn man nix Anderes kennt.
Horst schrieb: > genommen die sich ihren Schaltzustand aus einer MySQL-DB holen, die > Abfrage soll einmal die Sekunde laufen. AUTSCH! Aber gut.. Gegenangebot.. statt einer Abfrage jede Sekunde nach jedem einzelnen Schaltzustand.. mach Dir eine zweite Tabelle mit nur einer Zeile und einer Spalte mittels Routine lässt Du den Schaltzustand in einen fortlaufenden binärstring schreiben und Du fragts nur diese eine Zeile in dieser Tabelle ab Im Fehlerfall kannst Du dann auf die eigentliche Tabelle zugreifen. jede sekunde reicht der binärstring um zu sehen ob alle schalter da waren wo sie vor einer Sekunde waren jede neue NULL bedeutet schlicht aus, jede neue 1 bedeutet entweder an, oder "sieh in anderer tabelle nach" Denk aber daran das während Du sql ausliesst kein neues auslesen der tabelle gestartet wird ansonsten hast Du gaaanz schnell die process list voll und mysql geht in die Knie
ok, dann möchte ich mich bei allen Beteiligten entschuldigen, daß ich dumm bin und kein mqtt sondern eigene Scripte und mysql verwende. Ich bin halt alt und schreibe alles selber, damit ich weis was es macht. EOD4me
Ohweh.. wenn Du meinen Beitrag so verstanden hast entschuldige bitte! ich find nur sekündliche Abfrage einer Datenbanktabelle unbekannter Grösse mindestens schwierig; ich muss gestehen dass mir persönlich eine http abfrage an php auch sinnvoller erscheint, aber das ist Geschmacksache mehr nicht. Ich denke bloss, eine seinzelne Zeile "select * from bintable limit 1;" sicherlich eine kürzere Antwort als "select * from switchtable limit 100;" ;) erfordert. deswegen die idee die schaltstellungen durchnummeriert als binary zu schicken und im esp dann die bits zu interpretieren als "an/aus" Die einzelne Zeile kann man als Routine erstellen sobald sich in der switchtable was ändert. was das ganze relativ bequem macht meines Erachtens nach
sid schrieb: > Ohweh.. wenn Du meinen Beitrag so verstanden hast entschuldige bitte! Das war nicht auf Deinen Post bezogen sid schrieb: > ich find nur sekündliche Abfrage einer Datenbanktabelle unbekannter > Grösse mindestens schwierig; Ganz unbekannt ist die nicht, wie oben schon geschrieben hat die Tabelle eine Zeile für jede Steckdose mit sieben Spalten, eindeutig definiert durch die unique Nummer, die sich aus dem letzten Oktett der IP-Adresse ergibt. Somit liefert die Abfrage SELECT Out1 FROM Schalter WHERE Nummer = $IP[3] genau einen Wert oder die Tabelle ist kaputt. Ich brauche ja nicht die (Soll)zustände aller Schalter und Steckdosen, da komme ich ohne Wildcards und Limiter aus. Die Zuordnungsmatrix Sensoren/Schalter/Aktoren/Steckdosen ... liegt in einem anderen Script, daß dann die Sollwerte in der DB setzt. sid schrieb: > ich muss gestehen dass mir persönlich eine http abfrage an php auch > sinnvoller erscheint Damit verschiebe ich die Arbeit nur auf den Server und der ESP langweilt sich noch mehr.
Horst schrieb: > Natürlich auf einer Oberfläche mit LCARS-Design. Hallo Horst, kannst du davon mal einen Screenshot hochladen? Würde mich interessieren ;-) Hast du eine Webseite, wo man bisschen was über dein Projekt lesen kann? Finde die Thematik auch interessant. Bisher habe ich nur einige ESPs als MQTT-Sensoren/Aktoren laufen, gesteuert über OpenHAB. Um die Sensordaten besser loggen und verarbeiten zu können, muss ich mich aber noch mehr mit Datenbanken, PHP-Skripten und RESTful Interfaces usw. befassen...
Martin M. schrieb: > RESTful Interfaces könnte das nicht auch was für den horst sein? mit python schnell ne kleine web-api machen, die dann auf dem db-server mitläuft. dann kann man mit einem einfachen http get den soll-zustand abfragen und gut is. und dann noch ein http post für das setzen. fertig. dann kann alles mit sql auf dem deutlich flotteren servern laufen und die schaltsteckdose muss nur noch die antwort vom server auswerten und selber kein sql machen. so als überlegung, wenn man nicht alles umstellen möchte und kein mqtt will.
Horst schrieb: > Ganz unbekannt ist die nicht, wie oben schon geschrieben hat die Tabelle > eine Zeile für jede Steckdose mit sieben Spalten es geht nicht um die Anzahl der Spalten, es geht um die Anzahl der Zeilen. while row vs if row versteh das so, der Controller fragt erstmal nach dem gemeinsamen hash aller spalten, und arbeitet die nur ab FALLS sich was ändert sonst wartet er die sekunde und fragt erneut. WENN sich was ändert fragt er nur nach denen WELCHE sich geändert haben nicht nach allen
Martin M. schrieb: > kannst du davon mal einen Screenshot hochladen? Würde mich interessieren > > Hast du eine Webseite, wo man bisschen was über dein Projekt lesen kann? Aktuell ist das noch nicht so aufbereitet, daß es vorzeigbar währe. Ist aber demnächst in Planung. Das LCARS-Design hab ich von da: https://github.com/joernweissenborn/lcars
Horst schrieb: > Bei der Fehlersuche hat sich gezeigt, daß selbst der einfache > MySQL-Select aus dem Beispiel > (https://github.com/ChuckBell/MySQL_Connector_Arduino/blob/master/examples/basic_select/basic_select.ino) Wie lange dauert es denn ? Naja, in Zeile 55 wird nachdem Connect schonmal 1 sek. gewartet. Im loop zeile 66 wieder 1 sek., und nochmal 0,5 sek (Zeile 90) für die 2te Abfrage. evtl. können die Zeiten verkürzt werden. Gruß Andreasgf
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.