FHEM Forum

Verschiedenes => Bastelecke => ESP Familie => Thema gestartet von: Keule_09 am 30 Juli 2019, 18:59:15

Titel: Playbox nachrüchsten mit Taster für Lautstärke
Beitrag von: Keule_09 am 30 Juli 2019, 18:59:15
Hallo Zusammen,

hab für meinen Sohn die Playbox von folgender Homepage nachgebaut:
https://haus-automatisierung.com/projekt/2018/12/16/projekt-playbox-mqtt-fhem-spotify.html

Nun würde ich gerne noch 2 Taster nachrüsten für die Lautstärke zu regeln.
Hab versucht die Taster im Script einzubauen leider ohne Erfolg.

Kann mir jemand weiterhelfen bzw. sagen wo mein Denkfehler steckt:


#include <Arduino.h>
#include <SPI.h>
#include <MFRC522.h>
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <PubSubClient.h>

#define SS_PIN D8
#define RST_PIN D1
#define VolU_Pin D2
#define VolD_Pin D4



MFRC522 mfrc522(SS_PIN, RST_PIN);
unsigned long cardId = 0;

WiFiClient net;
PubSubClient client(net);

const char* mqtt_server = "******";
const char* ssid = "*****";
const char* password = "****";

void setup() {
  Serial.begin(9600);
  SPI.begin();
  mfrc522.PCD_Init();

  WiFi.mode(WIFI_AP_STA);
  WiFi.begin(ssid, password);

  client.setServer(mqtt_server, 1883);

  //Pinmode Volume
  pinMode(VolU_Pin, INPUT);
  pinMode(VolD_Pin, INPUT);
}

void reconnect() {
  while (WiFi.waitForConnectResult() != WL_CONNECTED) {
    WiFi.begin(ssid, password);
  }

  while (!client.connected()) {
    String clientId = "NodeMCUClient-";
    clientId += String(random(0xffff), HEX);

    if (!client.connect(clientId.c_str(), "****", "*****")) {
      Serial.print("failed, rc=");
      Serial.print(client.state());
      Serial.println(" try again in 5 seconds");

      delay(5000);
    }
  }
}

void loop() {
  reconnect();

  if (!mfrc522.PICC_IsNewCardPresent()) {
    return;
  }

  if (!mfrc522.PICC_ReadCardSerial()) {
    return;
  }

  cardId = getCardId();

  Serial.print("New ");
  Serial.println(cardId);

  char buffer[10];
  sprintf(buffer, "%lu", cardId);
  client.publish("/opt/fhem/PlayBox/Play", buffer);

  uint8_t control = 0x00;

  do {
    control = 0;
    for (int i = 0; i < 3; i++) {
      if (!mfrc522.PICC_IsNewCardPresent()) {
        if (mfrc522.PICC_ReadCardSerial()) {
          control |= 0x16;
        }

        if (mfrc522.PICC_ReadCardSerial()) {
          control |= 0x16;
        }

        control += 0x1;
      }

      control += 0x4;
    }

    delay(0);
  } while (control == 13 || control == 14);

  reconnect();

  Serial.println("Removed");
  client.publish("/opt/fhem/PlayBox/Stop", "1");
  delay(500);

  mfrc522.PICC_HaltA();
  mfrc522.PCD_StopCrypto1();

  if (digitalRead(VolU_Pin) == HIGH) {
    Serial.println("VolUP");
    client.publish("/opt/fhem/PlayBox/VolUP", "1");
    delay(500);
  }
  else
  { Serial.println('aus');
    client.publish("/opt/fhem/PlayBox/VolUP", "0");
    delay(1000);
  };
  if (digitalRead(VolD_Pin) == HIGH) {
    Serial.println("VolDOWN");
    client.publish("/opt/fhem/PlayBox/VolDOWN", "1");
    delay(500);
  }
  else
  { Serial.println('0');
    client.publish("/opt/fhem/PlayBox/VolDOWN", "0");
    delay(500);
  };
}


unsigned long getCardId() {
  byte readCard[4];
  for (int i = 0; i < 4; i++) {
    readCard[i] = mfrc522.uid.uidByte[i];
  }

  return (unsigned long)readCard[0] << 24
         | (unsigned long)readCard[1] << 16
         | (unsigned long)readCard[2] << 8
         | (unsigned long)readCard[3];
}


Gruß Marco
Titel: Antw:Playbox nachrüchsten mit Taster für Lautstärke
Beitrag von: Christoph Morrison am 30 Juli 2019, 19:03:09
Und hast du schon dort gefragt? Oder möchtest du, dass wir Support für Matthias' kommerzielles Projekt machen?
Titel: Antw:Playbox nachrüchsten mit Taster für Lautstärke
Beitrag von: Keule_09 am 30 Juli 2019, 19:08:55
Nöö weil ich dort nicht registriert bin bzw keine Kommentare hinterlassen kann .
Titel: Antw:Playbox nachrüchsten mit Taster für Lautstärke
Beitrag von: MadMax-FHEM am 30 Juli 2019, 19:15:43
Ich hab ja nicht alles im Detail durchgepflügt...
...aber es sieht so aus, als wäre es wie folgt:

Es wird immer wieder geprüft, ob Karte steckt...

Steckt die Karte wird irgendwie in der Do while Schleife rumgehampelt...
...bis die Karte gezogen wurde...

Erst dann (bzw. eben nur wenn keine Karte steckt!?) wird dein Code bzgl. Lautstärke durchlaufen...
...einfach mal Karte raus und drücken, dann sollte/könnte ja entsprechend lauter/leiser "kommen"...

Also der Laut-/Leise-Code muss irgendwie in die Schleife ohne sie zu "stören"...

Zumindest denke ich das...

Gruß, Joachim
Titel: Antw:Playbox nachrüchsten mit Taster für Lautstärke
Beitrag von: Keule_09 am 30 Juli 2019, 22:59:07
Hallo Joachim,

ja genau der Titel wird so lang abgespielt bis die Karte wieder abgenommen wird.

puh wird dann doch nicht so einfach wie ich mir das gedacht habe.
Titel: Antw:Playbox nachrüchsten mit Taster für Lautstärke
Beitrag von: MadMax-FHEM am 30 Juli 2019, 23:26:56
Tja, nicht ganz so einfach, weil du vermutlich keine delays innerhalb der do-while haben darfst?
Bzw. ist wohl/evtl. dann nur die Erkennung dass Karte raus ist "verzögert"!?

Hast du deinen Code für Lautstärke schon mal "einfach" innerhalb der do-while probiert?
Z.B. nach dem delay(0) am Ende vor dem while...

Ansonsten musst du halt statt delay einen Zähler nehmen und mitzählen, wie oft (Durchläufe von do-while)  schon High etc. war...

Gruß, Joachim
Titel: Antw:Playbox nachrüchsten mit Taster für Lautstärke
Beitrag von: Keule_09 am 31 Juli 2019, 20:24:26
ja hab mal nach deinem Beitrag ausprobiert.

leider ohne Erfolg.

hab mir mal den Sketch umgebaut ohne RFID Reader da mir der gedrückte Taster nicht erkannt wird.


#include <Arduino.h>
#include <SPI.h>
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <PubSubClient.h>

int VolU_Pin=D5;
int VolD_Pin=D6;
int tasterstatus1=0;
int tasterstatus2=0;

WiFiClient net;
PubSubClient client(net);

const char* mqtt_server = "192.168.178.***";
const char* ssid = "****";
const char* password = "*******";

void setup() {
  Serial.begin(9600);
  SPI.begin();

  WiFi.mode(WIFI_AP_STA);
  WiFi.begin(ssid, password);

  client.setServer(mqtt_server, 1883);

  //Pinmode Volume
  pinMode(VolU_Pin, INPUT);
  pinMode(VolD_Pin, INPUT);
}

void reconnect() {
  while (WiFi.waitForConnectResult() != WL_CONNECTED) {
    WiFi.begin(ssid, password);
  }

  while (!client.connected()) {
    String clientId = "NodeMCUClient-";
    clientId += String(random(0xffff), HEX);

    if (!client.connect(clientId.c_str(), "****", "******")) {
      Serial.print("failed, rc=");
      Serial.print(client.state());
      Serial.println(" try again in 5 seconds");

      delay(5000);
    }
  }
}

void loop() {
tasterstatus1=digitalRead(VolU_Pin);
  if (VolU_Pin == HIGH) {
    Serial.println("VolUP");
    client.publish("/opt/fhem/PlayBox/VolUP", "VolUP");
    delay(500);
  }
  else
  { Serial.println('aus');
    client.publish("/opt/fhem/PlayBox/VolUP", "0");
    delay(1000);
  };
tasterstatus2=digitalRead(VolD_Pin);
  if (VolD_Pin == HIGH) {
    Serial.println("VolDOWN");
    client.publish("/opt/fhem/PlayBox/VolDOWN", "VolDOWN");
    delay(500);
  }
  else
  { Serial.println('aus');
    client.publish("/opt/fhem/PlayBox/VolDOWN", "0");
    delay(500);
  };
}


hier wird mir leider auch kein drücken des Tasters erkannt.
Hab auch mal MQTT.fx installiert um zu schauen ob die Befehle ankommen im Broker leider auch dort keine Rückmeldung über das drücken des Tasters.
Könnte mal bitte jemand darüber schauen ob ich alles so richtig habe.
hab den Taster folgndermaßen angeschlossen:
D4 = Ausgang des Tasters
Vin = Eingang des Tasters
zwischen Vin und GND noch ein Pullup-Widerstand von 10KOhm.
Den Taster hab ich auch schon mit einem Multimeter durchgemessen ob er funktioniert.
Hab keine Ahnung wo ich noch suchen bzw schaune soll.

Vielen Dank im vorraus für Eure Hilfe

Gruß Marco

Titel: Antw:Playbox nachrüchsten mit Taster für Lautstärke
Beitrag von: RappaSan am 01 August 2019, 09:18:03
 Oh, :(
da hab ich wohl falsch gelesen.
Ist gar kein "Playboy nachrüsten"
;D
Titel: Antw:Playbox nachrüchsten mit Taster für Lautstärke
Beitrag von: Gisbert am 01 August 2019, 09:40:25
Zitat von: RappaSan am 01 August 2019, 09:18:03
Oh, :(
da hab ich wohl falsch gelesen.
Ist gar kein "Playboy nachrüsten"
;D
Hattest wohl einen guten Start in den Tag und einen Clown gefrühstückt ... ;D
Titel: Antw:Playbox nachrüchsten mit Taster für Lautstärke
Beitrag von: Cybers am 01 August 2019, 10:53:07
Schau mal hier: es gibt schon Projekte in dieser Hinsicht: https://forum.fhem.de/index.php/topic,95552.0.html (https://forum.fhem.de/index.php/topic,95552.0.html)
Vielleicht findest du hier was passendes.
Gruß, Sascha
Titel: Antw:Playbox nachrüchsten mit Taster für Lautstärke
Beitrag von: Keule_09 am 01 August 2019, 22:14:23
Zitat von: RappaSan am 01 August 2019, 09:18:03
Oh, :(
da hab ich wohl falsch gelesen.
Ist gar kein "Playboy nachrüsten"
;D

musste ich öfters korrigieren wegen der automatischen Texterkennung sonst würde da tatsächlich Playboy stehen  :D

@ Sascha
Danke werd ich mir die Tage mal anschauen