Playbox nachrüchsten mit Taster für Lautstärke

Begonnen von Keule_09, 30 Juli 2019, 18:59:15

Vorheriges Thema - Nächstes Thema

Keule_09

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

Christoph Morrison

Und hast du schon dort gefragt? Oder möchtest du, dass wir Support für Matthias' kommerzielles Projekt machen?

Keule_09

Nöö weil ich dort nicht registriert bin bzw keine Kommentare hinterlassen kann .

MadMax-FHEM

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
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

Keule_09

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.

MadMax-FHEM

#5
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
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

Keule_09

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


RappaSan

 Oh, :(
da hab ich wohl falsch gelesen.
Ist gar kein "Playboy nachrüsten"
;D

Gisbert

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
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY

Cybers

Schau mal hier: es gibt schon Projekte in dieser Hinsicht: https://forum.fhem.de/index.php/topic,95552.0.html
Vielleicht findest du hier was passendes.
Gruß, Sascha
FHEM 6.2 auf Raspberry PI 4 / Smartvisu
Eltako Serie 14: FAM14, FGW14-USB, FSB14, FSR14-4x, FSR14-2x, FDG14, FTS14-EM in Kombination mit Jung F50 24V Tastern
1-Wire Temperatursensoren
aus alter Zeit:
Gott sei Dank nur noch 3 Homematic Jalousie- & Schaltaktoren! Wer sich mit Funk auskennt, legt Kabel

Keule_09

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