Reku on/off
- carbon_compound
- Autor
- Platinum Boarder
- Beiträge: 2931
- Dank erhalten: 1301
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- AlexDL
- Pro Boarder
- Beiträge: 685
- Dank erhalten: 273
Grüße
Alex
May the energy be with you!
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- carbon_compound
- Autor
- Platinum Boarder
- Beiträge: 2931
- Dank erhalten: 1301
Eine unauffällige Kotflügelverbreiterung auf 145/165 als Kompensationsgeschäft oder diverse Kunststoffschweißnähte könnte ich auch noch auf den Markt werfen.
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- mitpro
- Junior Boarder
- Beiträge: 71
- Dank erhalten: 33
IT und Protokolle ok, aber das habe ich noch nie gesehen.
Wie viele würden sowas gerne haben bzw. bauen, wissen aber nicht wo sie anfangen sollen?
Wenn Interesse besteht baue ich ein WLAN-Button-Modul und dokumentiere die Schritte. Den Knopf kann ich dann an einen Bedürftigen weitergeben . Wie schwierig es ist, wenn man so etwas zum ersten mal macht, kann ich nicht einschätzen.
Bauteile sind ein ESP wie Wemos D1 Mini (z.B. www.exp-tech.de/plattformen/esp8266/entwicklungsboards/8898/wemos-d1-mini ), 1 Knopf, 2 LEDs, 2 Vorwiderstände (220 Ohm), ein beliebiges Gehäuse und ein USB-Kabel mit 12V-Adapter. Erfahrungen mit dem Umgang von Lötkolben und Arduino IDE schaden sicher nicht.
An Pin D3 ist die Status-LED worüber die Konfiguration ersichtlich ist.
An Pin D4 eine Operation-LED, die bei Verarbeitung leutet.
Pin D5 wird über einen internen Pullup hochgezogen, sodass daran der Button die Masse schaltet.
Mein reduzierter Spagetti-Code für motivierte:
Habe das LCD und den zweiten Knopf entfernt. Das reicht so zum Anzeigen und Umschalten einer Einstellung. Dies kann auch eine andere Einstellung sein. Wenn Notwendig auch erweiterbar zum wechseln zwischen mehreren Profilen z.B. (1-2-3-1-2-3), dafür muss aber die Status-Anzeige erweitert werden. Der Vorteil ist, dass auf komplizierte Libraries verzichtet werden kann.
#include <ESP8266WiFi.h>
#include <string.h>
#include <Wire.h> // Wire Bibliothek einbinden
//--- Konfiguration Anfang
const char* ssid = "WLANSSID";
const char* password = "WLANPW";
const char* host = "192.168.4.1";
const char* apikey = "MODULPW";
const char* recu1 = "xrt+cfg+recup+33+43";
const char* recu2 = "xrt+cfg+recup+1+5";
String RecuValues = "RECUP 1 5";
int ledbrightness = 30;
//--- Konfiguration Ende
//IOs
int led1pin = 0; //0 = D3
int led2pin = 2; //2 = D4
int button1pin = 14; //14 = D5
int button1state = 0;
//Variablen
int recusetting = 0;
int value = 0;
void setup() {
pinMode(led1pin, OUTPUT);
pinMode(led2pin, OUTPUT);
pinMode(button1pin, INPUT_PULLUP);
digitalWrite(led2pin, LOW);
Serial.begin(115200);
delay(10);
// We start by connecting to a WiFi network
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
delay(1000);
//initial
analogWrite(led2pin, ledbrightness);
ChangeSetting("xrt+cfg+info");
delay(200);
analogWrite(led2pin, ledbrightness * 0);
}
void loop() {
button1state = digitalRead(button1pin);
analogWrite(led1pin, recusetting * ledbrightness);
if (button1state == LOW) {
//LED blinken um Detektion kenntlich zu machen
analogWrite(led1pin, !recusetting * ledbrightness * 2);
delay(100); // wait
digitalWrite(led1pin, recusetting* ledbrightness * 2);
if (recusetting == 0) {
ChangeSetting(recu1);
recusetting = 1;
} else {
ChangeSetting(recu2);
recusetting = 0;
}
digitalWrite(led1pin, recusetting * ledbrightness);
ChangeSetting("xrt+cfg+info");
}
delay(200);
++value;
Serial.print("value: ");
Serial.println(value);
if (value % 500 == 0) {
//Auslesen aktueller Werte nach Intervall
//LED2 während des Vorgangs AN
analogWrite(led2pin, ledbrightness);
ChangeSetting("xrt+cfg+info");
analogWrite(led2pin, ledbrightness * 0);
}
}
void ChangeSetting(String sett) {
lcd.setCursor(0, 1);
lcd.print(" ");
Serial.print("Button Pressed! Change Setting!");
Serial.println(sett);
Serial.print("connecting to ");
Serial.println(host);
WiFiClient client;
const int httpPort = 80;
if (!client.connect(host, httpPort)) {
Serial.println("connection failed");
return;
}
String url = "/api/";
url += "execute?apikey=";
url += apikey;
url += "&command=";
url += sett;
Serial.print("Requesting URL: ");
Serial.println(url);
client.print(String("GET ") + url + " HTTP/1.1\r\n" +
"Host: " + host + "\r\n" +
"Connection: close\r\n\r\n");
unsigned long timeout = millis();
while (client.available() == 0) {
if (millis() - timeout > 5000) {
Serial.println(">>> Client Timeout !");
client.stop();
return;
}
}
while (client.available()) {
String line = client.readStringUntil('\r');
line.trim();
if (line.startsWith("RECUP")) {
if (line.startsWith(RecuValues) ) {
recusetting = 1;
} else {
recusetting = 0;
}
}
}
}
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- Normag
- Pro Boarder
- Beiträge: 594
- Dank erhalten: 340
ein paar Ionen zu kiffen, wirkt bei mir nicht
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- carbon_compound
- Autor
- Platinum Boarder
- Beiträge: 2931
- Dank erhalten: 1301
DAS wär doch mal ein Aufkleber.
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- Normag
- Pro Boarder
- Beiträge: 594
- Dank erhalten: 340
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- mitpro
- Junior Boarder
- Beiträge: 71
- Dank erhalten: 33
Der Websocket läuft jetzt auch, wenn auch voll auf Ionen. Habe mich ein wenig an den Twizplay-Infos orientiert und schon ein paar Sachen errechnet.
Batteriespannung, Temperaturen, SOC + Veränderung, Fahrstrecke, Verbrauch/km. Und das in Quasi-Echtzeit. Genial!
Leider bin ich auf 4 Informationen beschränkt, da das Display nicht mehr her gibt. Probiere mal alle aus um zu gucken wie hilfreich die sind.
Der Interrupt geht nur indirekt, aber doch recht schnell mit ca. 2 Sekunden.
Für die "Nur-Knopf-Lösung" habe ich mal ein paar ESP-01 bestellt. Die haben 3 IOs und würden völlig ausreichen bei kleinerer Baugröße.
Ein anderes Display ist auch versendet. Die Funktionen des Twizplay sind eigentlich alle möglich zu implementieren.
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- dexter
- Moderator
- Beiträge: 6037
- Dank erhalten: 4222
Michael
Twike 3 (2001) … Emco Novum (2011) … Twizy 80 (2012) … Mii electric+ (2020)
dexters-web.de
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- mitpro
- Junior Boarder
- Beiträge: 71
- Dank erhalten: 33
Das Gehäuse ist an manchen Stellen zu knapp bemessen und die Halterung ist noch nicht perfekt.
Es sollen 4 Knöpfe zur Verfügung stehen mit Beispielen, mit und ohne Display + Minimal-Lösung mit 1 Knopf und 2 LEDs und alles mit Schaltplänen.
Momentan habe ich das Problem, dass der ESP nach einiger Zeit nicht mehr aktualisiert bzw. sich bei der HTTP-Abfrage zur Reku-Änderung aufhängt, was total nervig ist.
Nach einem Neustart des ESP funktioniert dann alles wieder. Woran das liegt weiß ich noch nicht. Ein größerer Puffer hat Fehler beim parsen behoben, die Fehlenden aktualisierungen treten aber weiterhin auf. Bei der Fahrt zu debuggen ist etwas schwierig und im Stand mit PC funktioniert natürlich alles. Ist die Größe des JSON limitiert? Habe 2000 Byte gewählt, was zu funktionieren scheint. Puffergröße = Chunkgröße hat zu Problemen geführt. Bei start des Clients muss ich teilweise auch ein paar Meter fahren, bis er alle Werte bekommen hat. Das initiale JSON ist meistens ein normales 1-Sekunden-Event.
Das Display ist OK und reicht für viele Anwendungen aus, ist mir aber noch zu wenig. Der Code funktioniert, bis auf die genannten Probleme, ganz ok. Kommentierung und Variablennutzung lassen zu wünschen übrig. Artefakte von mehreren Versuchen machen ihn noch unübersichtlicher.
Da ich nicht alle Teile Zuhause habe und die Lieferung mit den Boot nicht besonders schnell ist, wird es noch etwas dauern.
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- dexter
- Moderator
- Beiträge: 6037
- Dank erhalten: 4222
Dass Du nach dem Start nicht direkt alle Metrics bekommst liegt wahrscheinlich an dem 0-Byte-Bug – Du bekommst die schon, aber sie sind kaputt.
Michael
Twike 3 (2001) … Emco Novum (2011) … Twizy 80 (2012) … Mii electric+ (2020)
dexters-web.de
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- mitpro
- Junior Boarder
- Beiträge: 71
- Dank erhalten: 33
Wie wird ermittelt, ob der Client "neu" ist?
Teilweise fehlen Anfang und Ende, wodruch das parsen fehlschlägt. Irgendwann funktioniert es (manchmal) dann doch. Konnte keine Erklärung dafür auf Client-Seite finden. Hast du eine Idee?
Received data: t":"ticker.1"}�5{"metrics":{"m.monotonic":51173,"v.e.parktime":2900}}�{"event":"ticker.1"}�5{"metrics":{"m.mo
Received data: tonic":51174,"v.e.parktime":2901}}�{"event":"ticker.1"}�5{"metrics":{"m.monotonic":51175,"v.e.parktime":2902}}
Received data: {"event":"ticker.1"}
Received data: {"metrics":{"m.monotonic":51176,"v.e.parktime":2903}}
Das Aufhängen scheint mit der verlieren der Verbindung zu tun zu haben. Setzte das ganze Modul jetzt mithilfe eines Fehlercouters zurück.
Habe einmal gesehen, dass das OVMS zu dem Zeitpunkt auch einen Neustart gemacht hat.
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- dexter
- Moderator
- Beiträge: 6037
- Dank erhalten: 4222
Tipp: mit dem Web-Debugger und einer Anzahl Browser-Extensions kannst Du WebSocket-Verbindungen testen und die Nachrichten verfolgen. Ente mal "websocket debugging".
Wenn Anfang/Ende fehlen würde ich vermuten dass die 0-Bytes den Client verwirren. Evtl. missversteht der die als Stringende.
Michael
Twike 3 (2001) … Emco Novum (2011) … Twizy 80 (2012) … Mii electric+ (2020)
dexters-web.de
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- mitpro
- Junior Boarder
- Beiträge: 71
- Dank erhalten: 33
Der Client scheint das Ende des JSON nicht korrekt erkennen zu können. Dadurch wird das ein Teil der nächsten Nachricht am Ender der vorhergehenden angehangen.
Aber es ist ja immer das gleiche. Kaum drohnt man, funktioniert es besser. Bin heute mal mit Notebook gefahren und siehe da: Keine Aussetzer. Also keine neuen Erkenntnisse.
Wenn er irgendwo 0-Byte bekommt, könnte das die ganzen Größen natürlich durcheinander bringen. Websocket jetzt auch nicht so das 0-8-15-Protokoll. Man muss mal gucken wo der Fehler auftritt. Da bereits die Daten der Clients kaputt sind würde ich fast auf TCP tippen. Viel anderes bleibt ja auch nicht . Da könnte der Payload verschoben sein.. Es sind ja alle Daten da.
Habe bei fehlgeschlagenem Parsen und dadurch zerstörte Daten mal einen Hinweis auf dem Display eingefügt.
Seltsamerweise funktioniert die Änderung der Fahr-Werte auch nicht, wenn die Daten nicht aktualisiert werden WLAN und Client sind aber noch verfügbar, soweit ich das ohne großen Debuggen beurteilen kann. Zumindest wird kein Reset durchgeführt.
Ich werde einfach mal weiter probieren und gucken was dabei raus kommt. Vielleicht kommen auch die Teile demnächst.
Heute beim Twizy-Treffen wurde von mehreren Personen das Interesse an einem Reku-Umschalter geäußert. Na dann wollen wir mal!
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- dexter
- Moderator
- Beiträge: 6037
- Dank erhalten: 4222
Michael
Twike 3 (2001) … Emco Novum (2011) … Twizy 80 (2012) … Mii electric+ (2020)
dexters-web.de
Bitte Anmelden oder Registrieren um der Konversation beizutreten.