NEWS
Wie SDS011 / SPS30 Staubsensor mit I2C über LAN zu IOBroker?
-
der Sensor geht auch
-
Da stehts doch ....
https://github.com/thryvos/Tasmota-WT32-ETH01Dann müsste man doch auch MQTT in ioBroker nutzen können.
-
Jetzt müsste ich nur noch wissen ob WT32-ETH01 oder Olimex ESP32-POE?
-
Ich habs geschafft
Hier mein Bericht:
Hardware:
1x Sensirion SPS30 (Wichtig: Kabel mit Stecker nicht dabei, man braucht einen JST 1.5 ZH 5 Pin Steckverbinder )
1x WT32_Eth01
1x USB zu UART Adapter
Kabel (Jumper wire Kabel female to female)Zuerst habe ich mir folgende Seite angesehen: https://github.com/thryvos/Tasmota-WT32-ETH01/tree/main?tab=readme-ov-file
Dort sieht man den Aufbau der Kabelverbindungen zwischen dem USB zu UART und dem W32-Eth01.Hier mein Aufbau:
Strom DC 5V kommt über ein USB-Netzteil
Dann USB-Kabel am roten USB zu UART Adapter anschließen und los gehts....Aber wie?
Man braucht eine Software um die seriellen-Daten über USB schicken zu können.
Die hier hatte ich zuerst: https://github.com/arendst/Tasmota/issues/9496#issuecomment-750148023
Damit konnte ich zwar den W32-Eth01 zum Leben erwecken mit LAN und Wifi aber keine Verbindung zum SPS30 herstellen.
Dann kam ich auf Otto Vielen Dank OTTO!!!
https://heinz-otto.blogspot.com/2021/06/tasmota-firmware-selbst-gebaut.html#:~:text=Hintergrund%3A Im Hintergrund wird die,komplette Datei für später herunterladen.&text=Im letzten Punkt wird die,ausgewählt und die Kompilierung gestartet.Ich ging nach Ottos Anleitung vor und erweiterte meinen Github-Account um Gitpod.
Damit konnte ich dann zum TasmoCompiler v11.2.1 gelangen, um dort die nötigen Einstellungen für "meine" Tasmota-Firmware zu treffen.
#define USE_ETHERNET // Add support for ethernet (Currently fixed for Olimex ESP32-PoE) // WT32_ETH01 #define ETH_TYPE 0 // [EthType] 0 = ETH_PHY_LAN8720, 1 = ETH_PHY_TLK110/ETH_PHY_IP101, 2 = ETH_PHY_RTL8201, 3 = ETH_PHY_DP83848, 4 = ETH_PHY_DM9051, 5 = ETH_PHY_KSZ8081 #define ETH_ADDRESS 1 // [EthAddress] 0 = PHY0 .. 31 = PHY31 #define ETH_CLKMODE 0 // [EthClockMode] 0 = ETH_CLOCK_GPIO0_IN, 1 = ETH_CLOCK_GPIO0_OUT, 2 = ETH_CLOCK_GPIO16_OUT, 3 = ETH_CLOCK_GPIO17_OUT #define USE_SPS30 // [I2cDriver30] Enable Sensiron SPS30 particle sensor (I2C address 0x69) (+1.7 code)
Mit dem ESP-Flasher-Windows-x64.exe habe ich dann die erzeugte Tasmota32.bin auf den WT32-Eth01 flashen können.
Hier die Firmwaredatei: tasmota32.bin
Dann habe ich den SPS30 angeschlossen:
Der WT32 war nun im Netzwerk vorhanden, unter 192.168.1.69
Folgendes habe ich eingestellt:
Das muss da rein:{"NAME":"WT32_ETH01","GPIO":[1,1,1,1,1,1,0,0,1,0,1,1,3840,576,5600,0,0,0,0,5568,0,0,0,0,0,0,0,0,1,1,0,1,1,0,0,1],"FLAG":0,"BASE":1}
Hier bitte aufpassen!!! "Also, if using Ethernet, I2C works only with:
IO32 (marked on the board as CFG, “pin 2” according to page 9 ) configured as SCL;
IO33 (marked on the board as 485_EN, “pin 3” ibid.) configured as SDA."Hier habe ich das wifi deaktiviert
Meine Einstellungsdatei: Config_tasmota_AB0F20_3872_13.3.0.dmp
Das Ergebnis:
Dann die Einrichtung in ioBroker:
Unter Adapter einen weiteren MQTT-Adapter installiert.
Vielen Dank an alle, die hier eine super Vorarbeit geleistet haben!!!!
Als nächstes werde ich den Sensor außen an der Hauswand montieren und in NodeRed die Bedingungen für das Abschalten der Lüftungsanlage festlegen.....
#Keine Ahnung, wie ich diesen Info-Kasten unten los werde - muss sich irgendwie über einen obigen link generieren#
-
@Homoran Guten Morgen, kann man den Titel irgendwie ändern?
Mit dem SDS011 und USB zu LAN, hat das nicht mehr viel zu tun.VG
-
@herrfrodo sagte in Wie SDS011 Staubsensor mit USB zu LAN im IOBroker einbinden?:
kann man den Titel irgendwie ändern?
Startpost editieren und Titel ändern
-
@homoran Danke!
-
Nachtrag:
Ich habe nun in IOBroker den MQTT-Adapter deaktiviert und den Sonoff-Adapter mit folgenden Einstellungen installiert:
Damit habe ich die Werte direkt richtig in den Objekten!
@Codierknecht Besten Dank für den Tipp!!! -
@herrfrodo Wenn man die beiden Adapter auf verschiedenen Ports laufen lässt, kooperieren die sehr gut ...
Es soll durchaus MQTT Devices geben, bei denen der Sonoff Adapter nicht funktioniert, oder zumindest nicht alle vorhandenen Werte aus dem Gerät extrahiert ...
-
@martinp sagte in Wie SDS011 / SPS30 Staubsensor mit I2C über LAN zu IOBroker?:
Es soll durchaus MQTT Devices geben, bei denen der Sonoff Adapter nicht funktioniert, oder zumindest nicht alle vorhandenen Werte aus dem Gerät extrahiert
Durchaus. z.B. mein ESP für den Wasserzähler.
Daher laufen auch bei mir beide Adapter.Für alles was mit Tasmota läuft ist aber der Sonoff die erste Wahl.
-
Kennt ihr ESPhome?
-
@herrfrodo sagte in Wie SDS011 / SPS30 Staubsensor mit I2C über LAN zu IOBroker?:
Kennt ihr ESPhome?
Dem Namen nach. Ansonsten: Nope!
-
Nachtrag:
Ich habe einen kleinen DC/DC Spannungswandler (DC IN 7-36V, OUT 5V 1,5A) direkt an die Pins gelötet und teilweise mit Heißkleber isoliert.
https://www.murata.com/en-eu/products/productdetail?partno=OKI-78SR-5%2F1.5-W36-C
2x "Pullup-Widerstände" - also normale Widerstände mit 10KOhm - einen mit Plus an SCL und den anderen mit Plus an SDA gelötet.
unten habe ich zuerst ein dickes doppelseitiges Klebeband geklebt und dann darauf Velcro.
In der Dose (die mir zu klein ist - größere kommt heute) habe ich den SPS30 auch mit Velcro am Dosengrund befestigt. Zudem habe ich noch 2 LAN POE-Injektoren gefunden und verbaut.
Ich speise nun 12V ein (der DC/DC Wadler kann 7-36V ab, eventuell nehme ich noch ein Netzteil mit 24V, da die Leitungslänge ca. 12m sein wird. Der gemessene Strom bei 5V war zwischen 0,15A und 0,3A. Das sind ca. 1,5W
WT32-ETH01:
SPS30:
Wenn ich das richtig sehe, dann müsste man von 0,58A (ca. 3W bei 5V) fürs Maximum ausgehen.LAN-Leitungslänge ca. 12m
Hiermit berechnet: https://www.wirsindheller.de/spannungsabfall-kabellaenge.3829.html#wshberechnungBei 5V:
Bei 12V:
Bei 24V:
Immer vom Maximum ausgehend und der Verlustleistung des Spannungswandlers, sind 12V meiner Meinung nach grenzwertig, allerdings liegt der gemessene Strom deutlich unter den Verbrauchsangaben (die Reinigungsprozedur des SPS30 habe ich nicht gemessen)
Wenn ich noch ein 24V (oder höher) Netzteil habe, dann nehme ich das.
Da fällt mir ein, dass ich an der PV-Batterie noch einen bisher ungenutzten 24V DC/DC Spannungswandler angeschlossen habe.....
Das lässt sich noch bis 28V hochdrehen
Kabellänge in Meter: 12,00
Leistung in Watt: 3,00
Querschnitt in mm²: 0,25
Eingangsspannung in Volt: 28,00
Elektrische Leitfähigkeit: 56,00
Widerstand Ω: 0,0178
Temperatur ℃: 20°CBerechnung
Spannungsabfall: 0,66%
Ausgangsspannung in Volt: 27,82
Leitungswiderstand Ω: 0.8544 -
Nachtrag 04.03.2024
Übrigens werden bei POE-Einspeisung immer die Adernpaare 1 und 4 genommen.
Quelle: https://www.kabelscheune.de/Netzwerkstecker-RJ45-Belegung-nach-EIA-TIA-Farbcode/
Bei T568A
PIN 1: weiß / grün (Paar 3)
PIN 2: grün (Paar 3)
PIN 3: weiß / orange (Paar 2)
PIN 4: blau (Paar 1)
PIN 5: weiß / blau (Paar 1)
PIN 6: orange (Paar 2)
PIN 7: weiß / braun (Paar 4)
PIN 8: braun (Paar 4)Bei T568B
PIN 1: weiß / orange (Paar 2)
PIN 2: orange (Paar 2)
PIN 3: weiß / grün (Paar 3)
PIN 4: blau (Paar 1)
PIN 5: weiß / blau (Paar 1)
PIN 6: grün (Paar 3)
PIN 7: weiß / braun (Paar 4)
PIN 8: braun (Paar 4)Diese Stecker: https://www.amazon.de/dp/B098XW9XQL?ref=ppx_yo2ov_dt_b_product_details&th=1
an dieses Kabel: https://www.amazon.de/dp/B0716R9N5H?ref=ppx_yo2ov_dt_b_product_details&th=1 -
Ich habe dieses kleine Blockly angefertigt:
Hier der Code:<xml xmlns="https://developers.google.com/blockly/xml"> <block type="on_ext" id="y/Kj+@nuqDDajWv8d[LM" x="-763" y="-1812"> <mutation xmlns="http://www.w3.org/1999/xhtml" items="1"></mutation> <field name="CONDITION">ne</field> <field name="ACK_CONDITION"></field> <value name="OID0"> <shadow type="field_oid" id="3FsVh}:{;,]-jhS1VF(6"> <field name="oid">sonoff.0.SPS30 Feinstaubsensor.SENSOR.SPS30.PM10</field> </shadow> </value> <statement name="STATEMENT"> <block type="controls_if" id="!i+EGcL4yWV~N87ricAT"> <mutation elseif="1"></mutation> <value name="IF0"> <block type="logic_operation" id="`A-TtiYACPIxQI}A8L]9"> <field name="OP">AND</field> <value name="A"> <block type="logic_compare" id="hld^OxU5I#C7bn3V;#HT"> <field name="OP">EQ</field> <value name="A"> <block type="get_value_var" id="yJP@T-Dx_/XkOfN?ig89"> <field name="ATTR">val</field> <value name="OID"> <shadow type="field_oid" id="B)X;2-R]2(;=_u]@h`;v"> <field name="oid">0_userdata.0.Feinstaub.VAR_Lüftung-wegen-Staub-0-1</field> </shadow> </value> </block> </value> <value name="B"> <block type="math_number" id="M2,l@Xy$7(J|TIg).3Ii"> <field name="NUM">1</field> </block> </value> </block> </value> <value name="B"> <block type="logic_compare" id="/DSH4FzH^zx||Mtu{Dgd"> <field name="OP">GT</field> <value name="A"> <block type="get_value" id="w*rbOn3YC9}jC9(g|s49"> <field name="ATTR">val</field> <field name="OID">sonoff.0.SPS30 Feinstaubsensor.SENSOR.SPS30.PM10</field> </block> </value> <value name="B"> <block type="get_value" id="bz:miwR;T3d{JJEVSd0]"> <field name="ATTR">val</field> <field name="OID">0_userdata.0.Feinstaub.Lüftung_Staub-Schwelle_AUS</field> </block> </value> </block> </value> </block> </value> <statement name="DO0"> <block type="control_ex" id="*1g.ViJ/HnbqFTj}2`Zl"> <field name="TYPE">false</field> <field name="CLEAR_RUNNING">TRUE</field> <value name="OID"> <shadow type="field_oid" id="RwR0cLO.O|PSzOJlp#4b"> <field name="oid">hm-rpc.0.LEQ0539002.1.STATE</field> </shadow> </value> <value name="VALUE"> <shadow type="logic_boolean" id="8Hf2z4`G8]5}zo_^O.)G"> <field name="BOOL">FALSE</field> </shadow> </value> <value name="DELAY_MS"> <shadow type="math_number" id="k$^ckeL9ed*ry{3E.A#t"> <field name="NUM">0</field> </shadow> </value> <next> <block type="control_ex" id="V7PLAR,U%mgiuv/s1=4Y"> <field name="TYPE">true</field> <field name="CLEAR_RUNNING">TRUE</field> <value name="OID"> <shadow type="field_oid" id="_-^[KPCml};k4f4EdB:]"> <field name="oid">0_userdata.0.Feinstaub.VAR_Lüftung-wegen-Staub-0-1</field> </shadow> </value> <value name="VALUE"> <shadow type="logic_boolean" id="d5,8dy,1|xkUz*nAP:bi"> <field name="BOOL">FALSE</field> </shadow> <block type="math_number" id="i@#(,B$DR1LK!gn:$8_@"> <field name="NUM">0</field> </block> </value> <value name="DELAY_MS"> <shadow type="math_number" id="Gsi4-@,LdScZ=uUL_`,,"> <field name="NUM">0</field> </shadow> </value> <next> <block type="debug" id=";JXq,_ii:$Ir.T$ROruj"> <field name="Severity">log</field> <value name="TEXT"> <shadow type="text" id="O{pzwwGMk17Pd?S_%%U+"> <field name="TEXT">LÜFTUNG AUS wegen hohem Feinstaubwert</field> </shadow> </value> <next> <block type="signal-cmb" id="le{;(r?GDOPss4E{i0/="> <field name="INSTANCE">.0</field> <field name="LOG">log</field> <value name="MESSAGE"> <shadow type="text" id="srV/+K]pg]a8;Iswvw)O"> <field name="TEXT">LÜFTUNG AUS wegen hohem Feinstaubwert</field> </shadow> </value> </block> </next> </block> </next> </block> </next> </block> </statement> <value name="IF1"> <block type="logic_operation" id="R|+cCsn9_Zr$a55.;},X"> <field name="OP">AND</field> <value name="A"> <block type="logic_compare" id="M=C)eQ`K/94w5qgV[xk%"> <field name="OP">EQ</field> <value name="A"> <block type="get_value_var" id=":AZO!+EKLhC)-rg!g.W^"> <field name="ATTR">val</field> <value name="OID"> <shadow type="field_oid" id="f?O)}RzYO``m05/0N=1l"> <field name="oid">0_userdata.0.Feinstaub.VAR_Lüftung-wegen-Staub-0-1</field> </shadow> </value> </block> </value> <value name="B"> <block type="math_number" id="?BJ1;1Ik^EZX/QSzxIv2"> <field name="NUM">0</field> </block> </value> </block> </value> <value name="B"> <block type="logic_compare" id="Ss~gJ+2JrLs#LxyASuWr"> <field name="OP">LT</field> <value name="A"> <block type="get_value" id="Io9m#vdM/~$ZZ|wy1nS="> <field name="ATTR">val</field> <field name="OID">sonoff.0.SPS30 Feinstaubsensor.SENSOR.SPS30.PM10</field> </block> </value> <value name="B"> <block type="get_value" id="Je/6HhqT=_ST9fbE._[$"> <field name="ATTR">val</field> <field name="OID">0_userdata.0.Feinstaub.Lüftung_Staub-Schwelle_AUS</field> </block> </value> </block> </value> </block> </value> <statement name="DO1"> <block type="control_ex" id="QG8k/m.pnX1HLE5:-l.0"> <field name="TYPE">false</field> <field name="CLEAR_RUNNING">TRUE</field> <value name="OID"> <shadow type="field_oid" id="@Bmh-R[_+~xXu6E0J79O"> <field name="oid">hm-rpc.0.LEQ0539002.1.STATE</field> </shadow> </value> <value name="VALUE"> <shadow type="logic_boolean" id="B5K#:PAeja0H7rzx`$al"> <field name="BOOL">TRUE</field> </shadow> </value> <value name="DELAY_MS"> <shadow type="math_number" id="BB8%ft}o)qn-=n!4}HW^"> <field name="NUM">0</field> </shadow> </value> <next> <block type="control_ex" id="t/|RC;8=}EWk90V^mDBW"> <field name="TYPE">true</field> <field name="CLEAR_RUNNING">TRUE</field> <value name="OID"> <shadow type="field_oid" id="sOQ5A,bEVDF[wJgNSywu"> <field name="oid">0_userdata.0.Feinstaub.VAR_Lüftung-wegen-Staub-0-1</field> </shadow> </value> <value name="VALUE"> <shadow type="logic_boolean" id="e1AvIBrVfz;|eFZSUTmr"> <field name="BOOL">TRUE</field> </shadow> <block type="math_number" id="a5mp/5|1+eV_/vc7fz/A"> <field name="NUM">1</field> </block> </value> <value name="DELAY_MS"> <shadow type="math_number" id="hpV|sa-Tbg.-|BGjt.9r"> <field name="NUM">0</field> </shadow> </value> <next> <block type="debug" id="4YT1IG_#U-nP*FSiQG=W"> <field name="Severity">log</field> <value name="TEXT"> <shadow type="text" id="lWxqU_=@?,;8Mh`kpmQH"> <field name="TEXT">LÜFTUNG EIN nach besserem Feinstaubwert</field> </shadow> </value> <next> <block type="signal-cmb" id="%rqUa~y;{CoHNRoQppU9"> <field name="INSTANCE">.0</field> <field name="LOG">log</field> <value name="MESSAGE"> <shadow type="text" id="d@sFBEOTVqLA[aS7hI[`"> <field name="TEXT">LÜFTUNG EIN nach besserem Feinstaubwert</field> </shadow> </value> </block> </next> </block> </next> </block> </next> </block> </statement> </block> </statement> </block> </xml>
Kennt sich da jemand aus? Ist das so OK?
Funktionieren tut es, aber vielleicht geht es anders besser.... -
Kurz zur Info,
läuft auch per USR-TCP-232-302 und Tasmota Scripting,
Sensordata -> ESP Speicher -> ESP Ausgang TX -> Serial to Lan -> NodeRed -> Datenpunkt
Damit können dann alle Sensorenwerte die in Tasmota laufen per Lan gesendet werden.
Läuft auch -
Kurz zur Info,
der kleine Bruder USR-TCP232-T2 läuft, dieser ist direkt mit TTL zu verbinden.
Der USR-TCP-232-302 braucht einen Adapter von TTL auf RS232
Der E-Byte E801 ( TCP ) braucht auch einen Adapter von TTL auf RS232
WT32-ETH0 geht auchZiel erreicht, bin Weg ------------------------------------->
Testscript für Tasmota Scripting DHT11, Data Send an TX alle 5 sec
>D temp=0 hum=0 tau=0 >B so(3 1 9600 8N1 1024) >T temp=DHT11#Temperature hum=DHT11#Humidity tau=DHT11#Dewpoint >S if upsecs%5==0 then =>SerialSend2 {"Temperature":%temp%,"Humidity":%hum%,"Dewpoint":%tau%,},\n print ---- SEND STR NUM ---- %temp% endif >W Temperature {m} %temp% Feuchtidkeit {m} %hum% Taupunkt {m} %tau% #
-
@ralla66 said in Wie SDS011 / SPS30 Staubsensor mit I2C über LAN zu IOBroker?:
USR-TCP232-T2
Irgendwie check ich das mit der eMail-Benachrichtigung bei neuen Posts hier nicht.....
Vielen Dank für Deine Hilfe und Tests!
Was kann man nun zusammenfassen schreiben?
Man braucht in jedem Fall einen ESP dafür, egal ob USR-TCP-232-302 oder USR-TCP232-T2, wobei der USR-TCP232-T2 deutlich günstiger ist.
In jedem Fall braucht man mindestens einen ESP8266 (ca. 10€)
USR-TCP-232-302 kostet ca. 34€ plus Adapter!
USR-TCP232-T2 kostet ca. 19€
WT32-Eth01 kostet ca. 20€ plus USB zu UART Adapter ca. 6-8€
Die deutlich bessere Performance des WT32 wird nie ausgenutzt und der Stromverbrauch ist viel höher als beim ESP8266.Was mich allerdings im täglichen Gebrauch stört ist die Tatsache, dass unter Tasmota der Sensorwert nur alle 10 Sekunden aktualisiert wird....dadurch habe ich bis zu 10 Sekunden lang den Kaminmief von den Nachbarn im Haus.....daher überlege ich an einen Testaufbau mit ESPHome.....
Testscript für Tasmota Scripting DHT11, Data Send an TX alle 5 sec
Wie schaffst Du die 5 sec?
-
@herrfrodo sagte in Wie SDS011 / SPS30 Staubsensor mit I2C über LAN zu IOBroker?:
Irgendwie check ich das mit der eMail-Benachrichtigung bei neuen Posts hier nicht.....
Was genau ist da unklar?
Lässt sich alles einstellen. -
@herrfrodo sagte in Wie SDS011 / SPS30 Staubsensor mit I2C über LAN zu IOBroker?:
Was mich allerdings im täglichen Gebrauch stört ist die Tatsache, dass unter Tasmota der Sensorwert nur alle 10 Sekunden aktualisiert wird....dadurch habe ich bis zu 10 Sekunden lang den Kaminmief von den Nachbarn im Haus.....daher überlege ich an einen Testaufbau mit ESPHome.....
Testscript für Tasmota Scripting DHT11, Data Send an TX alle 5 sec
Wie schaffst Du die 5 sec?
Wenn das verwendete Tasmota eine Scripting-Enginge hat kann von dort einen Wert auch bei jeder Änderung senden lassen. Dort gibt es einen
publish
Befehl
https://tasmota.github.io/docs/Scripting-Language/#features=>Publish Soyosource/SOYO_1ce2fb/L1L2L3 %sml[8]%
sendet zum beispiel den 8ten Wert aus dem vorherigen Abschnitt
sml
, ganz am Ende angehängt.Du könntest aber auch einen normale Rule erstellen die es dann bei Änderung ebenfalls published:
https://tasmota.github.io/docs/Commands/#mqtt
Wieder der BefehlPublish
Oder du triggerst - per MQTT oder Web Request - einen passenden
Status x
an:
Der wird dann sowohl in der Konsole angezeigt als auch unmittelbar gesendet.