Ich hatte öfters das mein Zendure Hub die Wlan Verbindung in meinem Heim Netzwerk verliert (Zendure halt 😉 ). Meine vergangene Lösung war entwerder den Hub neu zu starten oder die FritzBox neu zu starten. Da ich das nicht mehr manuell machen wollte hab ich mir in Openhab zwei Items erstellt:
1. (Network Binding) Ich schaue per Ping nach ob der Zendure noch im Netzwerk online ist.
2. (Fritzbox Binding) Einen Schalter mit dem ich einen Reset (Neustart) durchführen kann.
Durch eine Rule die einmal am Tag läuft (Nachts) schauen ich nach ob Zendure Hub online ist. Wenn ja nichts machen. Wenn nein starte ich den Neustart der Fritzbox. Ein Neustart der Fritzbox dauert ungefähr 3-5 Minuten. Deshalb mach ich es nachts. Danach ist meistens der Hub wieder Online.
Ein reset des Zendure Hub, geht momentan nicht von außerhalb. Vielleicht kommt das noch irgendwann.
Autor: skippy
Openhab Widget Solar/Akku grafische Anzeige
uid: zendure_premium_v14
tags: []
props:
parameters:
– context: item
label: Batterie Ladestand (z.B. 50 %)
name: itemBattery
required: false
type: TEXT
– context: item
label: Batterie Ladeleistung (Watt)
name: itemBatteryCharge
required: false
type: TEXT
– context: item
label: Batterie Entladeleistung (Watt)
name: itemBatteryDischarge
required: false
type: TEXT
– context: item
label: Solar Hub O/W (Watt)
name: itemSolarHub
required: false
type: TEXT
– context: item
label: Solar Süd (Positiv = Produktion)
name: itemSolarSouth
required: false
type: TEXT
– context: item
label: Hausverbrauch Gesamt (Echtes Item)
name: itemHouseConsumption
required: false
type: TEXT
– context: item
label: Hub Ausgang (Watt zum Haus)
name: itemHubOutput
required: false
type: TEXT
– context: item
label: Netzbezug (Smart Meter)
name: itemGrid
required: false
type: TEXT
timestamp: May 2, 2026, 11:17:30 PM
component: f7-card
config:
stylesheet: >
.energy-pulse {
animation: pulse-effect 2s infinite !important;
border: 1px solid #4cd964 !important;
}
@keyframes pulse-effect {
0% { box-shadow: 0 0 10px rgba(76, 217, 100, 0.4); transform: scale(1); }
50% { box-shadow: 0 0 40px rgba(76, 217, 100, 0.8); transform: scale(1.05); }
100% { box-shadow: 0 0 10px rgba(76, 217, 100, 0.4); transform: scale(1); }
}
style:
background: „linear-gradient(160deg, #121212 0%, #1e1e1e 100%)“
border: 1px solid rgba(255,255,255,0.08)
border-radius: 28px
box-shadow: 0px 20px 40px rgba(0,0,0,0.6)
color: white
height: 380px
slots:
default:
– component: f7-card-content
slots:
default:
– component: f7-row
slots:
default:
– component: f7-col
slots:
default:
– component: Label
config:
style:
fontSize: 11px
fontWeight: „800“
letterSpacing: 1.5px
opacity: 0.4
text: ENERGY KONTROLLE
– component: f7-block
config:
style:
align-items: center
display: flex
height: 240px
justify-content: space-around
margin: 0
position: relative
slots:
default:
– component: svg
config:
preserveAspectRatio: none
style:
height: 100%
left: 0
pointer-events: none
position: absolute
top: 0
width: 100%
viewBox: 0 0 100 100
slots:
default:
– component: path
config:
d: M 20,30 Q 35,50 50,50
fill: none
id: pathHub
stroke: rgba(255, 204, 0, 0.1)
stroke-width: 0.5
– component: circle
config:
fill: „#FFCC00“
r: 1
visible: =(items[props.itemSolarHub].numericState > 0)
slots:
default:
– component: animateMotion
config:
calcMode: linear
dur: 3s
repeatCount: indefinite
slots:
default:
– component: mpath
config:
xlink:href: „#pathHub“
– component: path
config:
d: M 20,70 Q 35,50 50,50
fill: none
id: pathSouth
stroke: rgba(255, 221, 85, 0.1)
stroke-width: 0.5
– component: circle
config:
fill: „#FFDD55“
r: 1
visible: =(items[props.itemSolarSouth].numericState > 0)
slots:
default:
– component: animateMotion
config:
calcMode: linear
dur: 3s
repeatCount: indefinite
slots:
default:
– component: mpath
config:
xlink:href: „#pathSouth“
– component: path
config:
d: M 80,30 Q 65,50 50,50
fill: none
id: pathBattOut
stroke: rgba(76, 217, 100, 0.1)
stroke-width: 0.5
– component: circle
config:
fill: „#4cd964“
r: 1
visible: =(Math.abs(items[props.itemBatteryDischarge].numericState) > 1)
slots:
default:
– component: animateMotion
config:
calcMode: linear
dur: 3s
repeatCount: indefinite
slots:
default:
– component: mpath
config:
xlink:href: „#pathBattOut“
– component: circle
config:
fill: „#4cd964“
r: 1
visible: =(items[props.itemBatteryCharge].numericState > 0)
slots:
default:
– component: animateMotion
config:
calcMode: linear
dur: 3s
keyPoints: 1;0
keyTimes: 0;1
repeatCount: indefinite
slots:
default:
– component: mpath
config:
xlink:href: „#pathBattOut“
– component: path
config:
d: M 50,50 Q 65,50 80,70
fill: none
id: pathHouse
stroke: rgba(0, 122, 255, 0.1)
stroke-width: 0.5
– component: circle
config:
fill: „#007AFF“
r: 1
visible: =(items[props.itemHouseConsumption].numericState > 0)
slots:
default:
– component: animateMotion
config:
calcMode: linear
dur: 2s
repeatCount: indefinite
slots:
default:
– component: mpath
config:
xlink:href: „#pathHouse“
– component: f7-col
config:
style:
textAlign: center
zIndex: 2
slots:
default:
– component: div
config:
style:
marginBottom: 40px
slots:
default:
– component: oh-icon
config:
color: „#FFCC00“
height: 28
icon: f7:sun_max_fill
– component: Label
config:
style:
fontSize: 14px
fontWeight: „700“
text: =items[props.itemSolarHub].state + ‚ W‘
– component: Label
config:
style:
fontSize: 8px
opacity: 0.4
text: O/W PANELE
– component: div
slots:
default:
– component: oh-icon
config:
color: „#FFDD55“
height: 28
icon: f7:cloud_sun_fill
– component: Label
config:
style:
fontSize: 14px
fontWeight: „700“
text: „=(items[props.itemSolarSouth].numericState > 0) ?
Math.round(items[props.itemSolarSouth].numeri\
cState) + ‚ W‘ : ‚0 W'“
– component: Label
config:
style:
fontSize: 8px
opacity: 0.4
text: SÜD PANEL
– component: div
config:
class: „=(items[props.itemSolarHub].numericState > 1 ||
Math.abs(items[props.itemBatteryDischarge].numericState) >
1) ? ‚energy-pulse‘ : ““
style:
align-items: center
background: rgba(255,255,255,0.03)
border: 1px solid rgba(76, 217, 100, 0.3)
border-radius: 50%
display: flex
height: 80px
justify-content: center
width: 80px
zIndex: 2
slots:
default:
– component: oh-icon
config:
color: „#4cd964“
height: 35
icon: f7:bolt_fill
– component: f7-col
config:
style:
textAlign: center
zIndex: 2
slots:
default:
– component: div
config:
style:
marginBottom: 40px
slots:
default:
– component: oh-icon
config:
color: „#4cd964“
height: 28
icon: „=(items[props.itemBattery].numericState > 20) ? ‚f7:battery_100‘ :
‚f7:battery_25′“
– component: Label
config:
style:
fontSize: 14px
fontWeight: „700“
text: =items[props.itemBattery].state + ‚ %‘
– component: Label
config:
style:
color: „#4cd964“
fontSize: 12px
fontWeight: „600“
marginTop: 2px
text: =‘ + ‚ + items[props.itemBatteryCharge].state + ‚ W‘
visible: =(items[props.itemBatteryCharge].numericState > 0)
– component: Label
config:
style:
color: „#ff9500“
fontSize: 12px
fontWeight: „600“
marginTop: 2px
text: =‘ – ‚ + items[props.itemBatteryDischarge].state + ‚ W‘
visible: =(Math.abs(items[props.itemBatteryDischarge].numericState) > 0.1)
– component: Label
config:
style:
fontSize: 8px
opacity: 0.4
text: BATTERIE
– component: div
slots:
default:
– component: oh-icon
config:
color: „#007AFF“
height: 28
icon: f7:house_alt_fill
– component: Label
config:
style:
color: „#007AFF“
fontSize: 14px
fontWeight: „700“
text: =items[props.itemHouseConsumption].state + ‚ W‘
– component: Label
config:
style:
fontSize: 8px
opacity: 0.4
text: HAUS VERBRAUCH
– component: f7-row
config:
style:
background: rgba(255,255,255,0.04)
border: 1px solid rgba(255,255,255,0.05)
border-radius: 20px
margin-top: 10px
padding: 15px
slots:
default:
– component: f7-col
slots:
default:
– component: Label
config:
style:
fontSize: 10px
opacity: 0.5
text: SOLAR TOTAL
– component: Label
config:
style:
color: „#FF9500“
fontSize: 15px
fontWeight: „700“
text: „=((items[props.itemSolarHub].numericState || 0) +
(items[props.itemSolarSouth].numericState > 0 ?
items[props.itemSolarSouth].numericState :
0)).toFixed(0) + ‚ W'“
– component: f7-col
config:
style:
textAlign: right
slots:
default:
– component: Label
config:
style:
fontSize: 10px
opacity: 0.5
text: NETZBEZUG
– component: Label
config:
style:
color: „=(items[props.itemGrid].numericState > 0) ? ‚#ff3b30‘ : ‚#4cd964′“
fontSize: 15px
fontWeight: „700“
text: =items[props.itemGrid].state + ‚ W‘
Openhab HABPanel Widget Solar/Akku
Widgets für Habpanel
<style>
/* Puls-Animation Definition */
@keyframes pulse-effect {
0% { box-shadow: 0 0 10px rgba(76, 217, 100, 0.4); transform: scale(1); }
50% { box-shadow: 0 0 45px rgba(76, 217, 100, 0.9); transform: scale(1.05); }
100% { box-shadow: 0 0 10px rgba(76, 217, 100, 0.4); transform: scale(1); }
}
.pulse-active {
animation: pulse-effect 2s infinite !important;
border: 2px solid #4cd964 !important;
}
</style>
<div style=“position: absolute;
top: 0;
left: 0;
bottom: 0;
right: 0;
background: linear-gradient(160deg, #121212 0%, #1e1e1e 100%);
color: white;
padding: 15px;
font-family: sans-serif;
display: flex;
flex-direction: column;
overflow: hidden;
box-sizing: border-box;“>
<!– Header –>
<div style=“height: 20px; font-size: 11px; font-weight: 800; letter-spacing: 1.5px; opacity: 0.4; text-transform: uppercase;“>
Zendure System Kontrolle
</div>
<!– SVG Animationen –>
<svg viewBox=“0 0 100 100″ preserveAspectRatio=“none“
style=“position: absolute; top: 0; left: 0; width: 100%; height: 100%; pointer-events: none; z-index: 1;“>
<!– PFADE: Deine angepassten Koordinaten –>
<path id=“pathHub“ d=“M 25,35 Q 37,25 50,45″ fill=“none“ stroke=“rgba(255, 204, 0, 0.1)“ stroke-width=“0.5″ />
<path id=“pathSouth“ d=“M 25,60 Q 37,70 50,45″ fill=“none“ stroke=“rgba(255, 221, 85, 0.1)“ stroke-width=“0.5″ />
<path id=“pathBattOut“ d=“M 75,35 Q 62,25 50,45″ fill=“none“ stroke=“rgba(76, 217, 100, 0.1)“ stroke-width=“0.5″ />
<path id=“pathHouse“ d=“M 50,45 Q 62,70 75,60″ fill=“none“ stroke=“rgba(0, 122, 255, 0.1)“ stroke-width=“0.5″ />
<!– Animationen (Punkte) –>
<!– Solar O/W –>
<circle ng-if=“itemValue(config.itemSolarHub).split(‚ ‚)[0]*1 > 1″ r=“1.2″ fill=“#FFCC00″>
<animateMotion dur=“3s“ repeatCount=“indefinite“><mpath xlink:href=“#pathHub“ /></animateMotion>
</circle>
<!– Solar Süd –>
<circle ng-if=“itemValue(config.itemSolarSouth).split(‚ ‚)[0]*1 > 1″ r=“1.2″ fill=“#FFDD55″>
<animateMotion dur=“3s“ repeatCount=“indefinite“><mpath xlink:href=“#pathSouth“ /></animateMotion>
</circle>
<!– Entladung (Batterie -> Mitte) –>
<circle ng-if=“itemValue(config.itemBatteryDischarge).split(‚ ‚)[0]*1 > 1″ r=“1.2″ fill=“#4cd964″>
<animateMotion dur=“3s“ repeatCount=“indefinite“><mpath xlink:href=“#pathBattOut“ /></animateMotion>
</circle>
<!– Ladung (Mitte -> Batterie) –>
<circle ng-if=“itemValue(config.itemBatteryCharge).split(‚ ‚)[0]*1 > 1″ r=“1.2″ fill=“#4cd964″>
<animateMotion dur=“3s“ repeatCount=“indefinite“ keyPoints=“1;0″ keyTimes=“0;1″ calcMode=“linear“><mpath xlink:href=“#pathBattOut“ /></animateMotion>
</circle>
<!– Hausverbrauch –>
<circle ng-if=“itemValue(config.itemHouseConsumption).split(‚ ‚)[0]*1 > 1″ r=“1.2″ fill=“#007AFF“>
<animateMotion dur=“2s“ repeatCount=“indefinite“><mpath xlink:href=“#pathHouse“ /></animateMotion>
</circle>
</svg>
<!– Content Grid –>
<div style=“flex-grow: 1; display: flex; justify-content: space-around; align-items: center; position: relative; z-index: 2;“>
<!– Links: Solar –>
<div style=“text-align: center; width: 30%;“>
<div style=“margin-bottom: 20%;“>
<img ng-src=“/icon/solarplant?format=svg“ style=“width: 40px; height: 40px;“ />
<div style=“font-size: 1.2vw; font-weight: 700;“>{{ (itemValue(config.itemSolarHub).split(“ „)[0] | number:0) }} W</div>
<div style=“font-size: 0.7vw; opacity: 0.4;“>O/W PANELE</div>
</div>
<div>
<img ng-src=“/icon/solarplant?format=svg“ style=“width: 40px; height: 40px;“ />
<div style=“font-size: 1.2vw; font-weight: 700;“>{{ (itemValue(config.itemSolarSouth).split(“ „)[0] | number:0) }} W</div>
<div style=“font-size: 0.7vw; opacity: 0.4;“>SÜD PANEL</div>
</div>
</div>
<!– Mitte: GEFÜLLTER KREIS (Mit Puls-Logik) –>
<div ng-class=“{‚pulse-active‘: itemValue(config.itemSolarHub).split(‚ ‚)[0]*1 > 1 || itemValue(config.itemBatteryDischarge).split(‚ ‚)[0]*1 > 1}“
style=“width: 8vw; height: 8vw; max-width: 80px; max-height: 80px; border-radius: 50%; background: #1a3320; border: 2px solid #4cd964; display: flex; justify-content: center; align-items: center;“>
<img ng-src=“/icon/movecontrol?format=svg“ style=“width: 50%; height: 50%;“ />
</div>
<!– Rechts: Batterie & Haus –>
<div style=“text-align: center; width: 30%;“>
<div style=“margin-bottom: 20%;“>
<img ng-src=“/icon/battery?state={{itemValue(config.itemBattery)}}&format=svg“ style=“width: 40px; height: 40px;“ />
<div style=“font-size: 1.2vw; font-weight: 700;“>{{ (itemValue(config.itemBattery).split(“ „)[0] | number:0) }} %</div>
<!– Lade-Leistung (Grün) –>
<div ng-if=“itemValue(config.itemBatteryCharge).split(‚ ‚)[0]*1 > 0.5″ style=“font-size: 0.9vw; font-weight: 600; color: #4cd964;“>
+ {{ (itemValue(config.itemBatteryCharge).split(“ „)[0] | number:0) }} W
</div>
<!– Entlade-Leistung (Orange) –>
<div ng-if=“itemValue(config.itemBatteryDischarge).split(‚ ‚)[0]*1 > 0.5″ style=“font-size: 0.9vw; font-weight: 600; color: #ff9500;“>
– {{ (itemValue(config.itemBatteryDischarge).split(“ „)[0] | number:0) }} W
</div>
<div style=“font-size: 0.7vw; opacity: 0.4;“>BATTERIE</div>
</div>
<div>
<img ng-src=“/icon/group?format=svg“ style=“width: 40px; height: 40px;“ />
<div style=“font-size: 1.2vw; font-weight: 700; color: #007AFF;“>{{ (itemValue(config.itemHouseConsumption).split(“ „)[0] | number:0) }} W</div>
<div style=“font-size: 0.7vw; opacity: 0.4;“>HAUS VERBRAUCH</div>
</div>
</div>
</div>
<!– Footer –>
<div style=“height: 60px; background: rgba(255,255,255,0.04); border: 1px solid rgba(255,255,255,0.05); border-radius: 20px; padding: 10px; display: flex; justify-content: space-between; align-items: center; z-index: 2;“>
<div style=“display: flex; align-items: center;“>
<img ng-src=“/icon/sun_clouds?format=svg“ style=“width: 30px; height: 30px; margin-right: 10px;“ />
<div>
<div style=“font-size: 0.7vw; opacity: 0.5;“>SOLAR TOTAL</div>
<div style=“color: #FF9500; font-size: 1.3vw; font-weight: 700;“>{{ (1*itemValue(config.itemSolarHub).split(“ „)[0] + 1*itemValue(config.itemSolarSouth).split(“ „)[0]) | number:0 }} W</div>
</div>
</div>
<div style=“text-align: right; display: flex; align-items: center;“>
<div style=“margin-right: 10px;“>
<div style=“font-size: 0.7vw; opacity: 0.5;“>NETZBEZUG</div>
<div ng-style=“{‚color‘: (itemValue(config.itemGrid).split(‚ ‚)[0]*1 > 0) ? ‚#ff3b30‘ : ‚#4cd964‘}“ style=“font-size: 1.3vw; font-weight: 700;“>
{{ (itemValue(config.itemGrid).split(“ „)[0] | number:0) }} W
</div>
</div>
<img ng-src=“/icon/energy?format=svg“ style=“width: 30px; height: 30px;“ />
</div>
</div>
</div>
Skippys Video Mapping Software
Anfang Dezember 2025 bin ich damit angefangen eine eigene Video Mapping Software zu schreiben, da ich es nicht einsehen wollte die teuren angebotenen Software Angebote (auch mit Abo) zu benutzen.
Es entstand die S.M.S. ( Skippys Mapping Software ). Nun bin ich soweit, das ich diese anderen zur Verfügung stellen kann. Diese kann getestet werden. Wenn man Beta Tester werden möchte, schickt mir eine Email.
Detaillierte Funktionsübersicht:
1. Präzises Mapping & Geometrie-Korrektur
Passen Sie Ihre Inhalte exakt an jede physikalische Oberfläche an.
- Corner-Pinning: Verzerren Sie Bilder und Videos über 4 Anfasser, um sie perspektivisch korrekt auf Objekte zu projizieren.
- Flexible Maskierung: Nutzen Sie vorgefertigte Formen (Rechteck, Kreis, Dreieck) oder zeichnen Sie benutzerdefinierte Masken (Custom Polygons), um komplexe Formen pixelgenau auszuschneiden.
- Rotation & Skalierung: Drehen und positionieren Sie Inhalte frei im Raum.
- Magnet-Funktion: „Snap-to-Grid“ und magnetische Punkte für nahtloses Ausrichten mehrerer Ebenen.
2. Audio-Reaktivität (Sound-to-Light)
Bringen Sie Ihre Projektion zum Tanzen. Die Software analysiert Audio-Signale in Echtzeit.
- Live-Audio-Analyse: Nutzt das Mikrofon oder den System-Sound (Stereomix) als Eingangsquelle.
- Frequenz-Trennung: Weisen Sie Objekte bestimmten Frequenzbereichen zu. Lassen Sie den Hintergrund zum Bass pulsieren, während Schriften auf Stimmen (Mitten) oder Hi-Hats (Höhen) reagieren.
- Anpassbare Empfindlichkeit: Integrierter Gain-Regler zur Anpassung an leise Umgebungen oder laute Club-Musik.
3. Umfassende Medien-Unterstützung
Ein Player für alle Formate. Jedes Objekt besitzt seine eigene Playlist.
- Bilder & Videos: Unterstützung aller gängigen Formate (MP4, MOV, AVI, JPG, PNG etc.).
- Live-Kameras: Binden Sie Webcams oder Capture-Cards (HDMI) als Live-Feed ein.
- Text-Generator: Erstellen Sie dynamische Texte und Laufschriften direkt in der Software (Farbe, Font und Stil anpassbar).
- Farb-Generator: Erzeugen Sie solide Farbflächen für Licht-Effekte.
4. Professionelle Effekte & Compositing
Verleihen Sie Ihren Visuals den letzten Schliff.
- Mischmodi (Blend Modes): Nutzen Sie Modi wie Additiv, Multiplizieren oder Overlay für komplexe Licht-Überlagerungen.
- Greenscreen (Chroma Key): Entfernen Sie Hintergründe aus Videos oder Kamera-Feeds in Echtzeit (inkl. Pipette zur Farbwahl).
- Bild-Optimierung: Regler für Helligkeit, Kontrast, Sättigung und Deckkraft pro Ebene.
- Stil-Filter: Echtzeit-Effekte wie Schwarz-Weiß, Sepia, Invertieren, Unschärfe (Blur) und Kanten-Erkennung.
- Weiche Kanten (Feathering): Erzeugen Sie übergangslose Projektionen durch weiche Alpha-Verläufe an den Rändern.
5. Show-Steuerung & Workflow
Entwickelt für den Live-Einsatz.
- Szenen-Verwaltung: Speichern Sie komplette Setups als Szenen und rufen Sie diese per Klick ab.
- Auto-Show-Modus: Automatischer Ablauf aller Szenen mit einstellbaren Standzeiten und weichen Überblendungen (Morphing).
- Multi-Monitor Support: Steuerung auf dem Laptop, Ausgabe im Vollbild auf dem Beamer.
- Ebenen-Management: Gruppieren, Sperren, Verstecken und Sortieren von beliebig vielen Mapping-Objekten.
- Linien-Animation: Spezial-Modus für animierte „Running Lines“ entlang der Objektkanten.
ShellyPM1 in einer mobilen Steckdose einbauen
ShellyPM1 in Funksteckdose
Ich wohne in einem Altbau, leider passen die Shellys nicht in die verbauten Steckdosen in der Wand, nun hab ich sie aber hier rumliegen und will sie auch nutzen. Auch hatte ich schon ganz schön lange hier noch Funksteckdosen rumliegen. Hmm, warum die nicht kombinieren oder umbauen 🙂




Fertig ist der mobile ShellyPM1, natürlich könnte man auch andere Shellys einbauen.
ShellyPM1 OTA auf Tasmota flashen
ShellyPM1 Over the Air auf Tasmota flashen ohne es zu öffnen oder löten
- Shelly mit Strom versorgen
- Mit dem WLAN des Shellys verbinden
- Im Browser zur 192.168.33.1 gehen
- Dein Wlan Einrichten und abspeichern.
- Neu vergebene IP Adresse in deinem WLAN suchen und merken
- Wir müssen jetzt eine abgespeckte Firmenware draufspielen
- geht nach https://github.com/yaourdt/mgos-to-tasmota
- Scrollt nach unten und sucht euer Shelly, kopiert euch die OTA Adresse.
- z.B. bei dem Shelly1PM ist es : http://shellyip/ota?url=http://dl.dasker.eu/firmware/mg2tasmota-Shelly1PM.zip
- In der ersetzt ihr „shellyip“ durch die gemerkte IP z.B. 192.168.178.61
- nun sieht der Link so aus: http://192.168.178.61/ota?url=http://dl.dasker.eu/firmware/mg2tasmota-Shelly1PM.zip
- diesen Link im Browser aufrufen
- Nun erscheint ein neues Tasmota Wlan. Verbindet euch damit
- Falls es nicht automatisch aufgeht hier die IP für den Browser http://192.168.4.1/
- In Tasmota wieder deine Wlan Einstellungen einfügen
- Sucht euch nochmal eure vergebene IP des Gerätes. Wenn Ihr vorher den Haken an „Immer die gleiche IP vergeben“ gesetzt habt ist es die gleiche wie vorher
- Nun könnt Ihr Tasmota einrichten.
Solaranlage mit Shelly POW in Openhab3
Ich benutze den POW als Ausgabe wie viel meine Balkon Solaranlage produziert.
Hatte dazu in Tasmota eine Regel erstellt die mir per MQTT den Wert ausgeben soll wenn der Wert über 19 WATT ist.
Warum? Na der MQTT Befehl wurde permanent gesendet, also 24 Stunden lang. Muss ja nicht sein. Mich interessiert
Abends oder Nachts nicht das es nichts produziert.
vorher:
on Energy#Power>19 do publish tele/shellyplug1/powersolar %value% endon
Diese Rule funktioniert, aber hat einen Nachteil. Wenn der Wert unter 19 fällt hat die letzte gesendete MQTT einen Wert >19
obwohl sie 0 ist.
Also eine neue Rule dazu geschrieben.
Rule2 ON ENERGY#Power=0 DO publish tele/shellyplug1/powersolar %value% endon
Soweit so gut. ABER diese Rule wird nun wieder permanant ausgeführt wenn der Wert 0 ist (Nachts), um das zu verhindern
noch dies eingeben:
Rule2 5
dies bewirkt das die Rule2 nur einmal ausgeführt wird wenn die Bedingung übereinstimmt
und diese wird nun auch nicht permanent per MQTT gesendet.
Shelly Plug Werte auf 0 setzen per Console
Dein Shelly Plug im Browser per IP Adresse aufrufen.
Console öffnen
energytoday 0
eingeben dann
energytotal 0
ShellyPM1 Reset der Energy per MQTT
Binding MQTT-Action installieren
Rule erstellen
then:
Script auswählen und folgendes reinschreiben:
val mqttActions = getActions(„mqtt“,“mqtt:broker:<brokerID>“)
mqttActions.publishMQTT(„cmnd/PM1_1/energytoday“, „0“)
mqttActions.publishMQTT(„cmnd/PM1_1/energytotal“, „0“)
<brokerID> durch die ID bei dir ersetzen
PM1_1 durch deinen vergebenen Namen ersetzen
Sonoff Mini R2 Version 3.6 mit Tasmota flashen Methode 2
Sonoff Mini 3.6 Tasmota-Flash-Methode 2
schneller und ohne Linux
Lade die ARC APP in Chrome herunter.
Oder per Google nach ARC APP suchen.
Die heißt Advanced REST client
APP installieren und starten.
…..
Mini Taste 5 Sekunden drücken.
Mini nochmal 5 Sekunden drücken.
Neues Wlan erscheint ITEAD_xxxxxxxx
Damit verbinden. Passwort : 12345678
Im Browser zu 10.10.7.1 gehen
WLAN Daten des Heimnetzes eingeben
IP Adresse im Router suchen (ESP_xxxxxx), und merken!
In ARC auf METHOD = POST
Request URL = http://IP-ADRESSE/zeroconf/ota_unlock
In Parameters-Body-Body content type = application/json
Im Feld unten folgendes eingeben =
{„deviceid“:““,“data“:{}}

SEND drücken
In ARC auf METHOD = POST
Request URL = http://IP-ADRESSE:8081/zeroconf/ota_flash
In Parameters-Body-Body content type = application/json
Im Feld unten folgendes eingeben =
{
„Geräte ID“: „“,
„Daten“: {
Wenn es mit „Daten“ nicht funktioniert versucht „Data“ ! Diesen roten Text bitte nicht mit eingeben 😉
„downloadUrl“: „http://ganzprivat.de/down/tasmota-lite.bin“,
„sha256sum“:
“ a6ae8f0e9dd6529989efa8a01e1a88d6bef90af2966b263d79527229128e2258″
}
}

SEND drücken
Es dauert nun ungefähr 2 Minuten bis der Vorgang abgeschlossen ist.
Ein neues Wlan entsteht. tasmota_xxxxxxxxxx
Normalerweise öffnet sich dann im Browser Tasmota, hier falls es nicht so ist die IP Adresse
192.168.4.1.
Dann Tasmota einrichten.