MQTT2+Shelly: erste Konfiguration und template-Entwicklung

Begonnen von miggun, 03 Dezember 2018, 21:05:34

Vorheriges Thema - Nächstes Thema

fredje

Hallo Beta-User,
habe die Änderung getestet Fehler bleibt. Habe zusätzlichfhem neu gestartet

Hier der geänderte Bereich:
#contributed by 87insane, https://forum.fhem.de/index.php/topic,94060.msg934614.html#msg934614
# shelly1pm using original firmware.
name:shelly1_w_energy_measuring
filter:TYPE=MQTT2_DEVICE:FILTER=readingList=.*shellies.*
order:A_10b
desc:Applies to single relay Shelly devices offering energy measuring like Shelly 1PM or Shelly Plug S
par:DEVNAME;Shelly device name in the topic;{ AttrVal('DEVICE','readingList','') =~ m,shellies/([^/]*)/, ? $1 : undef }
par:RADIO_SETUSERREADING;Set userreading for total energy consumption;{ undef }
par:RADIO_DONOTSETUSERREADING;Do not set userreading for total energy consumption;{ undef }
par:NEWUSERREADINGS;NEWUSERREADINGS as set if relay_0_energy_total is included, otherwise it will be added;{ my $old = AttrVal('DEVICE','userReadings',undef); !defined $old ? 'relay_0_energy_total:relay_0_energy:.* monotonic {ReadingsNum($name,'relay_0_energy',0)}' : $old =~ m,relay_0_energy_total:relay_0_energy.*, ? $old : $old . q(, relay_0_energy_total:relay_0_energy:.* monotonic {ReadingsNum($name,'relay_0_energy',0)}) }
par:CALLSPEECHRECOGN;Set this to 0 to not set any speech recogn. related attributes;{ 1 }
attr DEVICE setList\
  relay0:on,off,toggle shellies/DEVNAME/relay/0/command $EVTPART1\
  toggle:noArg shellies/DEVNAME/relay/0/command toggle\
  off:noArg shellies/DEVNAME/relay/0/command off\
  on:noArg shellies/DEVNAME/relay/0/command on\
  x_update:noArg shellies/DEVNAME/command update_fw\
  x_mqttcom shellies/DEVNAME/command $EVTPART1
attr DEVICE readingList \
  shellies/DEVNAME/relay/0:.* {{ state => $EVENT, relay0 => $EVENT}}\
  shellies/DEVNAME/input/0:.* input0\
  shellies/DEVNAME/online:.* online\
  shellies/announce:.* { $EVENT =~ m,..id...DEVNAME...mac.*, ? json2nameValue($EVENT) : return }\
  shellies/DEVNAME/announce:.* { json2nameValue($EVENT) }\
  shellies/DEVNAME/relay/0/power:.* relay_0_power\
  shellies/DEVNAME/relay/0/power:.* { my $compare = $EVTPART0 < 100 ? 'off':'on'; ReadingsVal($NAME,'loadState','off') ne $compare ? { loadState => $compare } : return }\
  shellies/DEVNAME/temperature:.* temperature\
  shellies/DEVNAME/temperature_f:.* {}\
  shellies/DEVNAME/input_event/0:.* { json2nameValue($EVENT) }\
  shellies/DEVNAME/overtemperature:.* overtemperature\
  shellies/DEVNAME/relay/0/energy:.* { relay_0_energy => $EVENT, relay_0_kWh => sprintf("%.2f",$EVENT/60/1000)}\
  shellies/DEVNAME/longpush/0:.* longpush_0
attr DEVICE devStateIcon {my $onl = ReadingsVal($name,'online','false') eq 'false'?'10px-kreis-rot' : ReadingsVal($name,'new_fw','false') eq 'true' ? '10px-kreis-gelb' : '10px-kreis-gruen'; my $light = ReadingsVal($name,'state','off'); my $cons = ReadingsVal($name,'relay_0_power','unknown'); my $total = ReadingsVal($name,'relay_0_kWh','unknown'); my $temp = ReadingsVal($name,'temperature','-100'); "<a href=\"http://".ReadingsVal($name,'ip','none')." \"target=\"_blank\">".FW_makeImage($onl)."</a> <a href=\"/fhem?cmd.dummy=set $name toggle&XHR=1\">".FW_makeImage($light)."</a><div>Verbrauch: $cons / Total: $total/ Temp: $temp °C</div>"}
attr DEVICE comment To get appropriate loadState values: Change the default limit "100" in readingList to your needs.
attr DEVICE webCmd :
attr DEVICE setStateList on off toggle
deletereading -q DEVICE (?!associatedWith|IODev).*
set DEVICE x_mqttcom announce
attr DEVICE model shelly1_w_energy_measuring
setreading DEVICE attrTemplateVersion 20220404
option:{ CALLSPEECHRECOGN } 
set DEVICE attrTemplate speechcontrol_type_switch
option:{ RADIO_SETUSERREADING }
attr DEVICE userReadings NEWUSERREADINGS

Beta-User

OK, hab' grad eh' eine RAW-def zur Hand gehabt zum Testen. So sollte es gehen:
par:NEWUSERREADINGS;NEWUSERREADINGS as set if relay_0_energy_total is included, otherwise it will be added;{ my $old = AttrVal('DEVICE','userReadings',undef); !defined $old ? q(relay_0_energy_total:relay_0_energy:.* monotonic {ReadingsNum($name,'relay_0_energy',0)}) : $old =~ m,relay_0_energy_total:relay_0_energy.*, ? $old : $old . q(, relay_0_energy_total:relay_0_energy:.* monotonic {ReadingsNum($name,'relay_0_energy',0)}) }
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

fredje

Danke für die Hilfe, es funktioniert jetzt.  :)
Gibt es ein wiki wo die template Erstellung beschrieben ist. Mir erschließt sich z.B. der par: Befehl nicht ...

Beta-User

Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Helmi55

Hallo Mahlzeit
ich dachte unter opt/fhem/FHEM/lib/AttrTemplate
Finde ich alle verfügbaren Template? Dem ist nicht so.....

Ich wollte ein Shelly Templ öffnen und bearbeiten und unter anderem Namen wieder abspeichern.
shellyPlus_1pm würde mich interessieren da ich es für Energiemessung (PV) verwende
und wollte Verbrauch gegen Ertrag ändern - ja Jammern auf hohem Niveau :P

Danke und Gruß
Helmut
System1 fhem 6.1 auf RPi 4B mit 4GB, HMUSBConfig, DS9490R-1Wire, Busware USB 868, Pool-Solarsteuerung mit FHEM. System2 fhem 6.1 auf RPi 4B mit 4GB (Bullseye) mit Busware USB 868 und 433 und HMUARTLGW für Haussteuerung

https://www.flickr.com/photos/canonhelmi/

Beta-User

Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Helmi55

Uups ok Danke
Laienhafte Frage von mir:
Kann ich den Teil "unten" wieder unter anderem Namen anhängen?
Wahrscheinlich nicht da dann immer ü beschrieben bzw. gelöscht wird.
Rauskopieren und unter eigenem templ abspeichern - oder?

Gruß
Helmut
System1 fhem 6.1 auf RPi 4B mit 4GB, HMUSBConfig, DS9490R-1Wire, Busware USB 868, Pool-Solarsteuerung mit FHEM. System2 fhem 6.1 auf RPi 4B mit 4GB (Bullseye) mit Busware USB 868 und 433 und HMUARTLGW für Haussteuerung

https://www.flickr.com/photos/canonhelmi/

Beta-User

#907
Zitat von: Helmi55 am 27 April 2022, 14:40:45
Uups ok Danke
Laienhafte Frage von mir:
:) Du bist ganz sicher nicht der einzige, dem die Mechanismen nicht klar sind, und die Frage ist daher völlig legitim!

Zitat
Kann ich den Teil "unten" wieder unter anderem Namen anhängen?
Wahrscheinlich nicht da dann immer ü beschrieben bzw. gelöscht wird.
Rauskopieren und unter eigenem templ abspeichern - oder?
Ja, "anhängen" ginge prinzipiell auch, das wäre aber nicht update-fest.

Komplett neues template in eigener Datei wäre besser, aber nachdem du den Mechanismus ja bereits durchschaut hast, würde ich noch eine weitere Variante ins Spiel bringen wollen:

Nimm aus deinem "Klon" die "doppelten Teile" raus, und rufe einfach _zuerst_ das (ggf. upgedatete) allgemeine attrTemplate auf, und ergänze dann danach nur noch das, was du abweichend haben willst. Also (da vermutlich u.A. die jsonMap etwas anders aussieht?, diesen Teil als "Muster"):
set DEVICE attrTemplate shellyPlus_1pm
attr DEVICE jsonMap <deine Angaben>


Das hat den Vorteil, dass bei einem update (weil die Shelly-Jungs sich wieder irgendeine Verschwurbelung überlegt haben...), dann dieser Teil einfach aus dem allgemeinen (zentral aktualisierten) attrTemplate-Satz kommt - das sollte die künftige Pflege einfacher machen (bzw. überflüssig).
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Helmi55

Danke für deine rasche Antwort
Werde mir das in Ruhe überlegen.
Besonders gut finde ich den Ausdruck "Verschwurbelung". Kommt gut an die "schwurbler" hin
Sorry für OT

Helmut
System1 fhem 6.1 auf RPi 4B mit 4GB, HMUSBConfig, DS9490R-1Wire, Busware USB 868, Pool-Solarsteuerung mit FHEM. System2 fhem 6.1 auf RPi 4B mit 4GB (Bullseye) mit Busware USB 868 und 433 und HMUARTLGW für Haussteuerung

https://www.flickr.com/photos/canonhelmi/

casoe

Hallo zusammen,

hat zufällig jemand einen Shelly TRV Thermostat im Einsatz? Ich hab meinen ersten in Betrieb genommen und es gibt kein Template für das Device. Einbindung in FHEM als MQTT2-Device hat direkt geklappt und viele Readings werden auch schon angezeigt. Ich kann das Thermostat über FHEM aber ohne AttrTemplate nicht steuern.

Auf dieser Seite gibt es eine Doku zu den Kommandos: https://shelly-api-docs.shelly.cloud/gen1/#shelly-trv-overview

Diese lauten: Command topics
Shelly TRV supports a set of commands published on shellies/thermostat/0/command/ to address all TRVs or shellies/shellytrv-<id>/thermostat/0/command/ to address an individual device:
settings will trigger piblishing the content of http /settings endpoint
schedule accepts 1 or 0 to enable/disable schedule
schedule_profile accepts number from 1 to 5 to choose active schedule profile with the provided id
target_t accepts number from 4 to 31 set target temperature.
ext_t accepts number to send external sensor temperature, in deg C
valve_pos accepts number from 0 to 100 to set manually the valve position, in %
boost_minutes accepts number to start boost mode for the given minutes, in minutes
set_boost_minutes accepts number to set the default boost time, in minutes
valve_min_percent accepts number from 0 to 10 to set the valve clse postion percent, in %
accelerated_heating accepts 1 or 0 to enable/disable accelerated heating

Kann jemand helfen, ggf. eines der vorhanden Templates so anzupassen, dass man alles steuern kann?

Beste Grüße
Carsten

Beta-User

Sollte nicht allzu schwierig sein.

Kannst du dazu bitte einen separaten Thread aufmachen und zumindest mal eine RAW-Definition von deinem Gerät zeigen? Ich bräuchte die automatisch erzeugten Reading-Namen, damit wir einen "runden" (jsonMap-?) Kreis hinbekommen (und optimalerweise den jeweiligen Topic, über den ggf. die Infos reinkommen, falls es JSON-verpackt ist).

Wenn du dich eindenken willst, nimmst du am besten einen Shelly-Dimmer als Basis und schaust dir dazu dann noch eines der anderen 3 (?) thermostat-attrTemplates an (wegen der Reading-und setter-Namen).
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

casoe


Crawler

#912
Ich habe hier ein Shellyplug-S eingebunden und wollte fragen worin die Absicht besteht das manche Readings doppelt sind.

zeigen alle false
Zitathas_update
new_fw
update_has_update

zeigen die aktuelle fw
Zitatfw_ver
update_old_version
update_new_version

zeigen die temp
Zitattemperature
tmp_tC
tmp_tF
FHEM auf Raspi + HMLan + 14 Aktoren + OBIS(Strom) über GPIO

rudolfkoenig

ZitatIch habe hier ein Shellyplug-S eingebunden und wollte fragen worin die Absicht besteht das manche Readings doppelt sind.
Diese Readings werden aus (vom Shelly gesendeten) JSON-Strukturen automatisch generiert, d.h. die Shelly-Firmware ist der Ansicht, dass man den gleichen Wert an verschiedenen Stellen hinterlegen muss. Warum das so ist, muss man die Autoren bei Shelly fragen.

Das MQTT2_DEVICE Modul bietet diverse Mechanismen Readings zu filtern oder umzubennen, z.Bsp. mit dem jsonMap Attribut, oder den prefix und filter Parameter im json2nameValue Aufruf im readingsList Attribut.

Falls jemand sowas fuer ein Geraet erstellt hat, dann sollte man es veroeffentlichen oder gleich ein AttrTemplate erstellen.

Beta-User

Zitat von: Crawler am 23 November 2022, 08:14:58
Ich habe hier ein Shellyplug-S eingebunden und wollte fragen worin die Absicht besteht das manche Readings doppelt sind.

zeigen alle false
zeigen die aktuelle fw
zeigen die temp
Rudi war schneller, aber (teilweise) doppelt genäht hält vielleicht besser...

Na ja, "Absicht" würde ich mal nicht unterstellen, ist eher "so na wora" und eine Kombination von "altem" attrTemplate (also zu einem frühen Zeitpunkt entwickelt, auf Basis der damaligen firmware) und diversen Änderungen, die der Hersteller zwischenzeitlich vorgenommen hat. Könnte man sicher mal aufräumen und ich bin auf konkrete Vorschläge gespannt ;) . (Wie üblich habe ich die Hardware nicht, zum einen, weil ich WLAN im allgemeinen nicht in der Automatisierung für sowas einsetzen will, und zum anderen, weil ich diese firmwares grausam finde...).

Ob überhaupt aktuell noch alles befüllt wird, ergibt sich aus dem screenshot nicht (bitte künftig einfach den Text (per raw-list) kopieren und hier in Code-Tags einfügen). Es gibt ein paar aktualisierte attrTemplate, die z.B. die Fahrenheit-temp direkt beerdigen. Sowas wie eine generalisierte Anleitung wäre im Wiki unter "Schritt für Schritt" zu finden.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files