Funksteckdose mit Raspi über MQTT schalten

Moderatoren: seppy, udo1toni

Benutzeravatar
peter-pan
Beiträge: 2573
Registriert: 28. Nov 2018 12:03
Answers: 25
Wohnort: Schwäbisch Gmünd

Re: Funksteckdose mit Raspi über MQTT schalten

Beitrag von peter-pan »

Also das kann ich fast nicht glauben.
Ich habe zwischenzeitlich 8 Gosund SP111 in Betrieb (Tasmota V8.4 + V8.5) und alle laufen einwandfrei. Kannst du die Dosen im Netzwerk erkennen ?
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.1.2 openhabian

Jojo
Beiträge: 206
Registriert: 5. Mär 2019 21:13
Answers: 2
Wohnort: Ingolstadt

Re: Funksteckdose mit Raspi über MQTT schalten

Beitrag von Jojo »

Servus Peter,

defekt sind die FUNKsteckdosen.
Die beiden neunen Gosund SP1 gehen gut ( wenn auch noch nicht im Openhab )
--

Gruß

Jojo

Benutzeravatar
peter-pan
Beiträge: 2573
Registriert: 28. Nov 2018 12:03
Answers: 25
Wohnort: Schwäbisch Gmünd

Re: Funksteckdose mit Raspi über MQTT schalten

Beitrag von peter-pan »

Jojo hat geschrieben: 27. Sep 2020 20:45 wenn auch noch nicht im Openhab
Problem ?

Hier ein Beispiel für eine SP111, sollte aber bei der SP1 ähnlich sein:

.things:

Code: Alles auswählen

    Thing topic sp11101 "Gosund SP111 01"       @ "MQTT2" {
    Channels:
        Type switch : power     "Power "                 [ stateTopic="stat/gosundsp111_01/POWER", commandTopic="cmnd/gosundsp111_01/POWER" ]
        Type number : rssi      "WiFi Signal Strength"   [ stateTopic="tele/gosundsp111_01/STATE", transformationPattern="JSONPATH:$.Wifi.RSSI"]
        Type string : version   "Firmware Version    "   [ stateTopic="stat/gosundsp111_01/STATUS2", transformationPattern="JSONPATH:$.StatusFWR.Version"]
        Type switch : reachable "Reachable"              [ stateTopic="tele/gosundsp111_01/LWT",transformationPattern="MAP:reachable.map" ]
        Type string : hardware  "Chip Set            "   [ stateTopic="stat/gosundsp111_01/STATUS2", transformationPattern="JSONPATH:$.StatusFWR.Hardware"]
        Type string : ipaddress "IP Address          "   [ stateTopic="stat/gosundsp111_01/STATUS5", transformationPattern="JSONPATH:$.StatusNET.IPAddress"]
        Type number : powerload "Power load"             [ stateTopic="tele/gosundsp111_01/SENSOR", transformationPattern="JSONPATH:$.ENERGY.Power"]
        Type number : voltage   "Line voltage"           [ stateTopic="tele/gosundsp111_01/SENSOR", transformationPattern="JSONPATH:$.ENERGY.Voltage"]
        Type number : current   "Line current"           [ stateTopic="tele/gosundsp111_01/SENSOR", transformationPattern="JSONPATH:$.ENERGY.Current"]
        Type number : total     "Total energy "          [ stateTopic="tele/gosundsp111_01/SENSOR", transformationPattern="JSONPATH:$.ENERGY.Total"]
        Type number : totalday  "Total energy today"     [ stateTopic="tele/gosundsp111_01/SENSOR", transformationPattern="JSONPATH:$.ENERGY.Today"]
        Type number : totalyest "Total energy yesterday" [ stateTopic="tele/gosundsp111_01/SENSOR", transformationPattern="JSONPATH:$.ENERGY.Yesterday"]
        Type string : ssid      "WiFi"                   [ stateTopic="tele/gosundsp111_01/STATE", transformationPattern="JSONPATH:$.Wifi.SSId"]
        Type datetime : time    "Time"                   [ stateTopic="tele/gosundsp111_01/STATE", transformationPattern="JSONPATH:$.Time"]
    }
.items:

Code: Alles auswählen

Switch    Gosund_socket_01              "Gosund Switch 01 [MAP(de.map):%s]"              <light>                  (gGosunds,gPlugSwitch)          { channel="mqtt:topic:hans:sp11101:power"}        
Number    Gosund_socket_01_RSSI         "Gosund Switch 01 RSSI [%s]"                     <qualityofservice>       (gGosunds,gRSSI)                { channel="mqtt:topic:hans:sp11101:rssi" }         
String    Gosund_socket_01_Version      "Gosund Switch 01 Version 69[%s]"                <gosundsp111>            (gGosunds,gVer)                 { channel="mqtt:topic:hans:sp11101:version" }       
Switch    Gosund_socket_01_Unreach      "Gosund Switch 01 Erreichbarkeit [%s]"           <siren1>                 (gGosunds,gLWT)                 { channel="mqtt:topic:hans:sp11101:reachable" }     
String    Gosund_socket_01_Hardware     "Gosund Switch 01 Hardware 69[%s]"               <gosundsp111>            (gGosunds,gHard)                { channel="mqtt:topic:hans:sp11101:hardware" }       
String    Gosund_socket_01_IPAddress    "Gosund Switch 01 IP-Address [%s]"               <gosundsp111>            (gGosunds,gHard)                { channel="mqtt:topic:hans:sp11101:ipaddress" }       
//*       For Fun and Test            
Number    Gosund_socket_01_Verb         "Gosund 01 Verbrauch Total[%.2f kWh]"            <gosundsp111>            (gGosunds)                      { channel="mqtt:topic:hans:sp11101:total" }   
Number    Gosund_socket_01_VerbHeute    "Gosund 01 Verbrauch Heute[%.2f kWh]"            <gosundsp111>            (gGosunds)                      { channel="mqtt:topic:hans:sp11101:totalday" }   
Number    Gosund_socket_01_VerbGestern  "Gosund 01 Verbrauch Gestern[%.2f kWh]"          <gosundsp111>            (gGosunds)                      { channel="mqtt:topic:hans:sp11101:totalyest" }   
Number    Gosund_socket_01_Strom        "Gosund 01 Stromaufnahme [%.2f A]"               <gosundsp111>            (gGosunds)                      { channel="mqtt:topic:hans:sp11101:current" }  
Number    Gosund_socket_01_Spannung     "Gosund 01 Spannung[%.2f Volt]"                  <gosundsp111>            (gGosunds)                      { channel="mqtt:topic:hans:sp11101:voltage" }    
Number    Gosund_socket_01_Leisung      "Gosund 01 Leistung[%.2f W]"                     <gosundsp111>            (gGosunds)                      { channel="mqtt:topic:hans:sp11101:powerload" }  
String    Gosund_socket_01_SSID         "Gosund 01 Wlan [%s]"                            <gosundsp111>            (gGosunds)                      { channel="mqtt:topic:hans:sp11101:ssid" }         
DateTime  Gosund_socket_01_Date         "Gosund 01 Refresh [%1$tH:%1$tM]"                <gosundsp111>            (gGosunds)                      { channel="mqtt:topic:hans:sp11101:time" }         
Das Thing-Topic (gosundsp111_01) und den Broker (hans) in den Item-Channels musst du halt noch anpassen.
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.1.2 openhabian

Jojo
Beiträge: 206
Registriert: 5. Mär 2019 21:13
Answers: 2
Wohnort: Ingolstadt

Re: Funksteckdose mit Raspi über MQTT schalten

Beitrag von Jojo »

Geil Peter.
Danke. Das kommt mir etwas zuvor.

Ich hatte den Plan dieses Openhab-Thing-Bridge-item-Zeug mal selber zu schaffen und dadurch zu lernen.
Hat nicht funktioniert :?

Wenn du ein Auge riskieren möchtest?:

Ich habe Bridge und Things in einer Datei definiert:

Code: Alles auswählen

Bridge mqtt:broker:JojoBroker [
host="192.168.189.27", username="XXX", password ="YYYYY", secure="false" ]{

Thing topic Temperaturen "Temperaturen" @ "JojoBroker" {
  Channels:
  Type string : Terasse "Terasse"           [stateTopic="/home/data/ESP/Terasse/" ]
  Type string : Kellerabgang "Kellerabgang" [stateTopic="/home/data/ESP/Kellerabgang/"]
  Type string : Wohnzimmer "Wohnzimmer"     [stateTopic="/home/data/ESP/Wohnzimmer/"]
 
}
Dazu dann itmes:

Code: Alles auswählen

String Kellerabgang "Kellerabgang  [%s°C]"    {channel="mqtt:topic:JojoBroker:Temperaturen:Kellerabgang"}
String Terasse "Terasse            [%s°C]"    {channel="mqtt:topic:JojoBroker:Temperaturen:Terasse"}
String Wohnzimmer "Wohnzimmer      [%s°C]"    {channel="mqtt:topic:JojoBroker:Temperaturen:Wohnzimmer"}
und die Sitemap:

Code: Alles auswählen

 Frame label="Temperaturen" {
          Text item=Wohnzimmer icon="temperature"
          Text item=Kellerabgang icon="temperature"
          Text item=Terasse icon="temperature"
    }
Die ESPs an denen die Thermometer hängen senden, MQTTfx empfängt.
Was ich nicht habe ist eine Anzeige der Werte in meiner BasicUI / PaperUI
Ich habe schon meine Frage von vor einiger Zeit dazu gelesen bei der UdoToni mir geholfen hat, erfolglos.
EDIT: in der Paper UI sind sowohl die Biege als auch die Things online
Siehst du was ich falsch mache ?
Denn wenn das läuft greife ich die Gosund an ...
--

Gruß

Jojo

Benutzeravatar
peter-pan
Beiträge: 2573
Registriert: 28. Nov 2018 12:03
Answers: 25
Wohnort: Schwäbisch Gmünd

Re: Funksteckdose mit Raspi über MQTT schalten

Beitrag von peter-pan »

Ich bin mir jetzt gerade nicht sicher, was du mir hier zeigst? Sind das ESP8266 NodeMCUs mit ESP Easy Flash ?

Grundsätzlich solltest du aber wissen, dass jedes Device, also jeder ESP8266 oder auch deine Steckdosen ein eigenes Thing braucht und die entsprechenden Channels dazu. Das Beispiel, dass ich gepostet habe, bezieht sich nur auf eine Steckdose mit dem Topic-Namen "gosundsp111_01".
gosundmqtt.jpg
.
Ob deine Vorgehensweise, die Things nach Verwendungszweck anzulegen auch funktioniert habe ich noch nicht ausprobiert, aber vielleicht kann der eine oder andere noch ein Statement dazu abgeben.

Deine Bridge sieht soweit ganz gut aus, wenn die IP-Adresse, von dem Rechner stammt, auf dem dein Broker läuft, also wahrscheinlich deinem RasPi. Du könntest auch noch "localhost" nehmen, wenn das der Rechner ist, auf dem auch "openHAB" läuft also etwa so:

Code: Alles auswählen

//https://openhabforum.de/viewtopic.php?f=15&t=970&start=20   // from Udo
//Bridge mqtt:broker:MosquittoMqttBroker "Mosquitto MQTT Broker" @ "MQTT2" 
//       ^    ^      ^                    ^                      ^ Zeige diese Bridge auf der Unterseite "MQTT" in Paper UI Control
//       ^    ^      ^                    ^ Label der Bridge
//       ^    ^      ^ Name der Bridge
//       ^    ^ Art der Bridge
//       ^ Binding

Bridge mqtt:broker:hans "Mosquitto" [ host="localhost", port=1883, secure=false, clientID="OH2_hans" ]  
{
Du solltest evtl. auch noch eine "clientID" vergeben, sonst vergibt OH bei einem Neustart jedes mal einen anderen Namen und das müllt nur dein System zu.

Ein mit ESP Easy geflashter ESP8266 könnte evtl. so aussehen:

Code: Alles auswählen

    Thing topic esp_mini02 "ESP8266 Mini Nr 02" @ "MQTT2" {
    Channels:
        Type switch : reachable   "Mini Reachable"   [ stateTopic="esp_mini_2/status/LWT" ]
        Type switch : motion      "Mini Bewegung T1" [ stateTopic="esp_mini_2/hc-sr501/State" ]
        Type number : temp        "Temp. BME280 T2"  [ stateTopic="esp_mini_2/bme280/Temperature"]
        Type number : hum         "Hum.  BME280 T2"  [ stateTopic="esp_mini_2/bme280/Humidity"]
        Type number : pres        "Pres. BME280 T2"  [ stateTopic="esp_mini_2/bme280/Pressure"]
        Type string : ipaddress   "IP Address"       [ stateTopic="esp_mini_2/IPAdress"]
        Type string : ssid        "WiFi"             [ stateTopic="esp_mini_2/wifi_name"]
    }
Die Items dazu sehen dann so aus:

Code: Alles auswählen

Switch    esp_mini_02_Unreach         "ESP8266_Mini-2 LWT-Erreichbarkeit [%s]"           <siren1>                (gAmica,gLWTesp,gLWT)          { channel="mqtt:topic:hans:esp_mini02:reachable"}          // persisted in mapDB
Switch    esp_mini_02_motion          "ESP8266_Mini-2 Bewegung[%s]"                      <siren>                 (gAmica,EG_Buro,gMotion)       { channel="mqtt:topic:hans:esp_mini02:motion"}               
Number    esp_mini_02_temp            "ESP8266_Mini-2 BME280 Temperatur[%.1f °C]"        <temperature>           (gAmica,EG_Buro,gRtIstI)       { channel="mqtt:topic:hans:esp_mini02:temp"}               
Number    esp_mini_02_hum             "ESP8266_Mini-2 BME280 Luftfeuchtigkeit[%.1f %%]"  <humidity>              (gAmica,EG_Buro)               { channel="mqtt:topic:hans:esp_mini02:hum"}               
Number    esp_mini_02_pres            "ESP8266_Mini-2 BME280 LuftDruck[%.1f hPa]"        <pressure>              (gAmica,EG_Buro)               { channel="mqtt:topic:hans:esp_mini02:pres"}               
String    esp_mini_02_Version         "ESP8266_Mini-2 Version [%s]"                      <sonoff_pow>            (gAmica,gVer)                  { http="<[http://192.168.178.84/json:3600000:JSONPATH($.System.['Git Build'])]" }  
String    esp_mini_02_IPAddress       "ESP8266_Mini-2 IP-Address [%s]"                   <sonoff_pow>            (gAmica,gHard)                 { channel="mqtt:topic:hans:esp_mini02:ipaddress" }            
String    esp_mini_02_SSID            "ESP8266_Mini-2 Wlan [%s]"                         <sonoff_pow>            (gAmica)                       { channel="mqtt:topic:hans:esp_mini02:ssid" }         
Du solltest also berücksichtigen, mit welchem "Flash" du arbeitest und wie du deine Devices konfigurieret hast. Ich helfe dir gerne weiter, soweit ich kann und sicherlich auch andere hier in der Community. Du müsstest ur etwas konkreter werden, was deine Devices betrifft und wie sie geflasht sind. Das ist mir noch nicht ganz klar.
Ein mit ESP-Easy geflashter ESP8266, sieht bei mir z.B. so aus:
esp.jpg
Also auf geht's ;)
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.1.2 openhabian

Jojo
Beiträge: 206
Registriert: 5. Mär 2019 21:13
Answers: 2
Wohnort: Ingolstadt

Re: Funksteckdose mit Raspi über MQTT schalten

Beitrag von Jojo »

Servus Peter,

wie auch UdoToni bist du ein Traum von Hilfe. Vielen Dank dafür !!!!!!

Grundsätzlich habe ich mehrere ESP8266 Lolin im Einsatz die ich mit der Arduino IDE programmiere. Aktuell sind es 3 an denen jeweils ein Thermometer hängt. Die Werte laufen dann auf den Broker der auf dem Raspi läuft ( 192.168.189.27 WLAN) Auf diesem Raspi läuft auch openHAB ( 192.168.188.36 LAN).
Und ein Batch, das die Werte des ESP "übersetzt" und die Zeit hinzufügt damit ich weiß wann der Wert gemessen wurde. Dieser String wird dann wieder per mqtt versendet und sollte in meiner BasicUI erscheinen.

Das klappt alles bis auf den Punkt: sollte in meiner BasicUI erscheinen.
Das möchte ich zuerst können, dann istdas nächste Projekt die Gosund Steckdosen mit einen AZ-Touch Wandgehäuse ( s.o. ) zu schalten :-)
--

Gruß

Jojo

Benutzeravatar
peter-pan
Beiträge: 2573
Registriert: 28. Nov 2018 12:03
Answers: 25
Wohnort: Schwäbisch Gmünd

Re: Funksteckdose mit Raspi über MQTT schalten

Beitrag von peter-pan »

Du hast also eigene Sketche für deine Lolins geschrieben ?!
Wie sieht denn so ein Sketch aus und was für eine Batch-Datei brauchst du noch dazu ? Das klingt alles etwas kompliziert. Und warum hast du 2 IP-Adressen für deinen RasPi ? Das brauchst doch gar nicht, oder ? LAN ist doch eh besser, also "192.168.188.36". Das sollte dann auch für den Broker gelten.

Deine Lolins sind doch mit Micro-USB-Anschluss ? Die kannst du doch ganz leicht flashen(Tasmota,ESP-Easy,etc), Konfigurieren, fertig. Kein übersetzen und nichts dazufügen.

Aber noch mal zu deinem SetUp. Kannst du mal ein Protokoll von MQTT.fx für einen deiner Lolins posten. Das mit der Zeit geht sicherlich auch per Rule (einfacher) in openHAB.

Hier siehst du mal, was mein Lolin so von sich gibt:
lolin_1.jpg
So was ähnliches sollten deine ESP'S auch ausgeben und an den MQTT-Broker weiterleiten. Und das ist genau das was in deine Things gehört.
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.1.2 openhabian

Jojo
Beiträge: 206
Registriert: 5. Mär 2019 21:13
Answers: 2
Wohnort: Ingolstadt

Re: Funksteckdose mit Raspi über MQTT schalten

Beitrag von Jojo »

Servus Peter,

nett das du mich nicht mehr vom Haken lässt ;-)

Der Raspi hat 2 IP weil meines WIssens mqtt / Raspberry / Linux ein Problem mit Sonderzeichen in Passwörtern hat. Deswegen funkt mein JojoBroker im Gäste Wlan. Mein "normales" WLAN hat eine Sonderzeichen Passwort.

Das ich die ESP´s flashen kann wusste ich nicht,
Sketch:

Code: Alles auswählen

/*
 * Send temperature from ESP8266 with multiple DS18B20 to MQTT server.
 * A simple Sketch to read the Temperature from multiple DS18B20 and publish them to a MQTT-Server using a ESP8266. 
 * Compiles in the Arduino IDE for the ESP8266
 * 
 * For deep sleep support uncomment 'deep sleep' part
 * For DHT22 support uncomment 'dht22' part
 * OTA currently does not work.
 * 
 * 
 */
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <Streaming.h>
#include <ESP8266HTTPUpdateServer.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>
//#include "SSD1306.h" // alias for `#include "SSD1306Wire.h"`

//SSD1306 display(0x3C,D1, D2);

/* dht22
#include <DHT.h>
*/

/* deep sleep
#define SLEEP_DELAY_IN_SECONDS  30
*/

// data cable connected to D4 pin
#define ONE_WIRE_BUS D4

//wifi
const char* ssid = "HAL9000Gast";
const char* password = "WGSHAL9000";

//mqtt
const char* mqtt_server = "192.168.189.27";
//
const char* mqtt_username = "";
const char* mqtt_password = "";
const char* host = "/home/data/out";

WiFiClient espClient;
PubSubClient client(espClient);

OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature DS18B20(&oneWire);


void setup_wifi() {
  delay(10);
  // We start by connecting to a WiFi network
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);

  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 (500);
 
}

void callback(char* topic, byte* payload, unsigned int length) {
  Serial.print("Message arrived [");
  Serial.print(topic);
  Serial.print("] ");
  for (int i = 0; i < length; i++) {
    Serial.print((char)payload[i]);
  }
  Serial.println();
}

void setup() {
  // setup serial port
  Serial.begin(115200);

  // setup WiFi
  setup_wifi();
  client.setServer(mqtt_server, 1883);
  client.setCallback(callback);

  // setup OneWire bus
  DS18B20.begin();
}

void reconnect() {
  // Loop until we're reconnected
  while (!client.connected()) {
    Serial.print("Attempting MQTT connection...");
    // Attempt to connect
    //if (client.connect("ESP8266Client", mqtt_username, mqtt_password)) {
    if (client.connect("ESP8266Client")) {
      Serial.println("connected");
    } else {
      Serial.print("failed, rc=");
      Serial.print(client.state());
      Serial.println(" try again in 5 seconds");
      // Wait 5 seconds before retrying
      delay(5000);
    }
  }
}

/*void displayData() {
    display.clear();
    display.setTextAlignment(TEXT_ALIGN_CENTER);
    display.setFont(ArialMT_Plain_10);
    display.drawString(64, 0, "Office Temp/Humidty");   
    display.setFont(ArialMT_Plain_24);
    
    display.display();
}*/

void loop() {
  if (!client.connected()) {
    reconnect();
  }
  client.loop();

  
      
// ds18b20

  byte i;
  byte present = 0;
  byte type_s;
  byte data[12];
  byte addr[8];
  

//Loop through all DS1820

while(oneWire.search(addr))
{ 
  //Serial.print("ROM =");

//Topic is built from a static String plus the ID of the DS18B20
  String romcode = "/home/data/ESP8266_3";
  String Nummer = "Nummer";
  //Serial.print( addr[i]);
  for( i = 0; i < 8; i++) {
    //Serial.write(' ');
    //Serial.print(addr[i], HEX);
    //romcode = romcode + String(addr[i], HEX);
    Nummer = Nummer + String(addr[i]);
  }

  if (OneWire::crc8(addr, 7) != addr[7]) {
      Serial.println("CRC is not valid!");
      return;
  }
  Serial.println();
 
// the first ROM byte indicates which chip
  switch (addr[0]) {
    case 0x10:
      //Serial.println("  Chip = DS18S20");  // or old DS1820
      type_s = 1;
      break;
    case 0x28:
      //Serial.println("  Chip = DS18B20");
      type_s = 0;
      break;
    case 0x22:
      //Serial.println("  Chip = DS1822");
      type_s = 0;
      break;
    default:
      //Serial.println("Device is not a DS18x20 family device.");
      return;
  } 
  //oneWire.depower();
  oneWire.reset();
  oneWire.select(addr);
  oneWire.write(0x44, 1);        // start conversion, with parasite power on at the end
  
  delay(1000);     // maybe 750ms is enough, maybe not
  // we might do a oneWire.depower() here, but the reset will take care of it.
  
  present = oneWire.reset();
  oneWire.select(addr);    
  oneWire.write(0xBE);         // Read Scratchpad

 

  //Serial.print("  Data = ");
  //Serial.print(present, HEX);
  //Serial.print(" ");
  for ( i = 0; i < 9; i++) {           // we need 9 bytes
    data[i] = oneWire.read();
    //Serial.print(data[i], HEX);
    //Serial.print(" ");
  }
  //Serial.print(" CRC=");
  //Serial.print(OneWire::crc8(data, 8), HEX);
  Serial.println();


   int16_t raw = (data[1] << 8) | data[0];
  if (type_s) {
    raw = raw << 3; // 9 bit resolution default
    if (data[7] == 0x10) {
      // "count remain" gives full 12 bit resolution
      raw = (raw & 0xFFF0) + 12 - data[6];
    }
  } else {
    byte cfg = (data[4] & 0x60);
    // at lower res, the low bits are undefined, so let's zero them
    if (cfg == 0x00) raw = raw & ~7;  // 9 bit resolution, 93.75 ms
    else if (cfg == 0x20) raw = raw & ~3; // 10 bit res, 187.5 ms
    else if (cfg == 0x40) raw = raw & ~1; // 11 bit res, 375 ms
    //// default is 12 bit resolution, 750 ms conversion time
  }

//convert RAW Temperature to String
String raw_temp = String(raw, DEC);
//convert RAW Temperature to celsius
double temp = raw * 0.0625;
Serial.print(temp);
//convert to string
char tempString[6];
dtostrf(temp, 2, 2, tempString);

  
    if (client.publish((char*) romcode.c_str(), tempString)) {
        client.publish (host,tempString);
//      client.publish((char*) romcode.c_str(), romcode);
//      display.drawString(66, 13, tempString );
//      display.drawString(66, 40, display_humid + "%");
      Serial.println();
      Serial.println("Publish ok  : ");

     }
    else {
      Serial.println("Publish failed");
    }
  
}


//End of the OneWire-Devices, reset Loop
Serial.println("End of Onewire Bus");
//oneWire.depower();
oneWire.reset_search();
delay(10000);  

return;

  // deep sleep
  //Serial << "Closing MQTT connection..." << endl;
  //client.disconnect();
  //Serial << "Closing WiFi connection..." << endl;
  //WiFi.disconnect();
  
 
  delay(100);
  // deep sleep
  //Serial << "Entering deep sleep mode for " << SLEEP_DELAY_IN_SECONDS << " seconds..." << endl;
  //ESP.deepSleep(SLEEP_DELAY_IN_SECONDS * 1000000, WAKE_RF_DEFAULT);
  //ESP.deepSleep(10 * 1000, WAKE_NO_RFCAL);
  //delay(500); 
}
Selber geschrieben trifft es nicht so ganz ;)
Läuft ohne Batch, ESP einstecken und los gehts ( wenns einmal drauf ist ). Das fand ich bisher nicht dramatisch. Werde mal einen mit Tasmota flashen.

Der Vorteil am "Übersetzen" ist, dass ich den Sensor umhängen kann ohne den Sketch neu zu schreiben. Ich finde es einfacher die Batch Datei auf dem Raspi zu ändern ( komme nicht per WLAN auf die ESP´s )
Batch:

Code: Alles auswählen

#!/usr/bin/python
# -*- coding: utf-8 -*-
 
import paho.mqtt.client as mqtt
import paho.mqtt.publish as publish 
import time

def on_message(client, userdata, message):
    msg = str(message.payload.decode("utf-8"))
    print("message received: ", msg)
    print("message topic: ", message.topic)
    if message.topic == ("/home/data/ESP8266_2"):
       msg2 = ":  "+ msg
       msg3 = time.strftime("%H:%M ") + msg2
       print (msg3)
       publish.single("/home/data/ESP/Buero", msg3)
    elif message.topic == ("/home/data/ESP8266_1"):
       msg2 = ":  " + msg
       msg3 = time.strftime("%H:%M ") +msg2
       print (msg3)
       publish.single("/home/data/ESP/Terasse", msg3)
    elif message.topic == ("/home/data/ESP8266_3"):
       msg2 = ":  " + msg
       msg3 = time.strftime("%H:%M ") +msg2
       print (msg3)
       publish.single("/home/data/ESP/Kellerabgang", msg3)
    elif message.topic == ("/home/data/ESP8266_6a"):
       msg2 = ":  " + msg
       msg3 = time.strftime("%H:%M ") + msg2
       print (msg3)
       publish.single("/home/data/ESP/Esszimmer", msg3)
    elif message.topic == ("/home/data/ESP8266_6b"):
       msg2 = ":  " + msg
       msg3 = time.strftime("%H:%M ") + msg2
       print (msg3)
       publish.single("/home/data/ESP/Esszimmer", msg3)
    elif message.topic == ("/home/data/feuchte"):
        msg2 =":  " +msg
        msg3 = time.strftime("%H:%M ") + msg2 
        publish.single("/home/data/ESP/feuchte" , msg3)
    else:
       #print("Sacklzement")
       print (msg)
       #publish.single("home/data/temp/",msg2)
       #print(message.topic)
#publish.single("home/data/","msg2")
#print (msg2)x

def on_publish(mosq, obj, mid):
       print("mid: " + str(msg2))
 
def on_connect(client, userdata, flags, rc):
    client.subscribe('/home/data/#')
 
BROKER_ADDRESS = "192.168.189.27"
 
client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message
 
client.connect(BROKER_ADDRESS)
 
print("Connected to MQTT Broker: " + BROKER_ADDRESS)
 
client.loop_forever()
Hat natürlich den Nachteil das die Batch laufen muss ...

Beim MQTTfx tut sich nicht viel:
Bildschirmfoto 2020-09-28 um 17.53.36.png
Die Jungs senden nur alle 30min
Und das senden sie an den Broker, respektive die Batch und die schickt dann mit dem Entsprechenden Zimmer Topic nochmal die umd die Zeit ergänzte Nachricht raus. Und dieses Topic ist der Channel im openHAB. Klappt aber nicht

Hoffnungsfrohe Grüße
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
--

Gruß

Jojo

Benutzeravatar
udo1toni
Beiträge: 13986
Registriert: 11. Apr 2018 18:05
Answers: 222
Wohnort: Darmstadt

Re: Funksteckdose mit Raspi über MQTT schalten

Beitrag von udo1toni »

Jojo hat geschrieben:Der Raspi hat 2 IP weil meines WIssens mqtt / Raspberry / Linux ein Problem mit Sonderzeichen in Passwörtern hat. Deswegen funkt mein JojoBroker im Gäste Wlan. Mein "normales" WLAN hat eine Sonderzeichen Passwort.
Das kann ich nicht bestätigen. Ich habe einen Raspberry Pi3 per WLAN angebunden, das Passwort enthält alles, was die Zeichentablle hergibt (63 Zeichen lang). An der einen oder anderen Stelle gab es aber hartnäckig Probleme mit dem Passwort, so dass ich ein paar Sonderzeichen durch andere ersetzen musste (das ursprüngliche Passwort hat mit anderen Geräten und auch dem Pi funktioniert).

Ich habe auf dem Pi auch einen selbst geschriebenen mqtt Client laufen (Python, Paho library) und kann keinerlei Probleme feststellen.


Gesendet von iPad mit Tapatalk
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Jojo
Beiträge: 206
Registriert: 5. Mär 2019 21:13
Answers: 2
Wohnort: Ingolstadt

Re: Funksteckdose mit Raspi über MQTT schalten

Beitrag von Jojo »

Danke Udo,

ich probier das aus !!!
--

Gruß

Jojo

Antworten