Sonoff NSPanel, geflasht mit Tasmota, Einbindung in FHEM

Begonnen von mike1969bln, 14 Januar 2022, 13:02:57

Vorheriges Thema - Nächstes Thema

Beta-User

Zitat von: Gisbert am 14 Februar 2022, 12:22:17
Vielleicht ist das falsch rüber gekommen, der Rollladen hängt nicht direkt am Sonoff NSPanel.
Zumindest mir war das klar. Es geht darum, dass man auf dem Display im Prinzip beliebig viele andere Geräte fernsteuern können soll. Dazu muss man das passende Widget auswählen und die dann gesendeten Daten auswerten. Die sind nur "ziemlich kompliziert" verpackt. Spätestens dann will man kein MQTT_DEVICE mehr dafür hernehmen...

OT
Zitatden Umzug nach MQTT2_DEVICE ist wohl machbar, muss aber wie du an verschiedenen Stellen geschrieben hast, gut geplant werden.
"Jeder Weg beginnt mit dem ersten Schritt!"

Wie bereits an anderer Stelle vorgeschlagen: nimm einen "nackigen" ESP8266 (oder ein beliebiges Fertiggerät mit 2 Relays) und mache damit einen Testrollladen-Aktor auf MQTT2_DEVICE-Basis. Ich behaupte: deine paar Rollläden sind in weniger als 2-3h umgezogen, die erste Stunde brauchst du für's Prinzip, der Rest ist "Mechanik"...
(Aber bitte beachten: falls auch Rhasspy an deinen Mosquitto sendet, ist der "kaputt" für FHEM/MQTT2_CLIENT - wir brauchen einen "normalen" MQTT-Server ;) ).
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

darkness

#31
Guten Morgen,


@Gisbert

eine Möglichkeit der Rolladensteuerung wäre vielleicht das Widget "8 = toggle switch triple vertical". Damit könntest du ja dann die Werte Hoch,Runter, Stop abbilden. Aber wie bereits geschrieben ist eine direkte Steuerung mit Prozent nicht möglich.

Vielleicht wäre auch das "4 = toggle switch quad horizontal" Widget eine Option. Damit könntest du 0,25,50,75 abbilden (und mir fällt gerade auf das du 5 Werte bräuchtest um auf 100% zu kommen :) )
Für Widgets gibt es auch noch die Möglichkeit diese vom Typ "device = basic widget tracks online and offline status" anzulegen. Damit könntest du evtl. Rückmeldungen verarbeiten.

Das ist jetzt einfach erstmal losgedacht. Da ich selber das Panel noch nicht verbauen konnte, steht es hier noch als "Foruschungsobjekt" auf dem Tisch ;)
Ich kann auch gerne mal ein Testwidget erstellen und die Werte hier reinschreiben.

@Beta-User

ICh habe mich bisher noch nie ernsthaft mir MQTT-Templates beschäftigt.  :'(
Jetzt habe ich auf mein Panel mal tasmota_NSPanel_Split ausgeführt und es wurden die zwei devices angelegt. Gibt es dann noch ein weiteres Template, welches On/Off usw hinzufügt? ODer nutze ich da ein bestehendes Template?

Ach vergiss es. Die werden ja im Dropdown-Feld angelegt. Ich hatte die WebCmds vermisst.

Danke und Gruß

Beta-User

Zitat von: darkness am 15 Februar 2022, 07:06:58
ICh habe mich bisher noch nie ernsthaft mir MQTT-Templates beschäftigt.  :'(
Kein Problem; da du im wesentlichen ja alleine klarzukommen scheinst, brauchst du das Hilfsmittelchen vielleicht ja gar nicht. Ansonsten geht es eben darum, eine (oder mehrere) funktionierende Konfigurationsmöglichkeit(en) bereitzustellen und ggf. gemeinsam weiter zu optimieren.

Was webCmd angeht: Prinzipiell versuche ich immer, die Zahl der Bedienelemente eher klein zu halten. Für ein/aus genügt devStateIcon, daher ist es hier darauf reduziert.
Aber das ist eben nur ein Vorschlag, das kann man auch anders machen (selbst, wenn ich es dann ggf. anders (=reduziert) verteile) :) .

Interessieren würde mich jetzt aber schon, ob es sinnvoll erscheint, wie das JSON von den widgets ausgepackt wird. Dazu hat sich bisher noch keiner geäußert...
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

darkness

ZitatInteressieren würde mich jetzt aber schon, ob es sinnvoll erscheint, wie das JSON von den widgets ausgepackt wird. Dazu hat sich bisher noch keiner geäußert...

Aktuell erscheint die Rückmeldung des Widgets überhaupt nicht im Device. Dies kann jetzt aber auch durch die Mischung mit dem Template kommen.

Internals:
   CID        DVES_0C8DAC
   DEF        DVES_0C8DAC
   DEVICETOPIC SmartHome/02_Kueche/tasmota_0C8DAC/
   FUUID      61eb01ca-f33f-ed18-0794-c083ebcd73a5b0e5
   IODev      m2_Server
   LASTInputDev m2_Server
   MSGCNT     2703
   NAME       02_NSPanel_01
   NR         789
   STATE      <a href="http://172.16.20.10" target="_blank">
Online
</a>
off
   TYPE       MQTT2_DEVICE
   m2_Server_CONN m2_Server_172.16.20.10_49212
   m2_Server_MSGCNT 2703
   m2_Server_TIME 2022-02-15 07:59:15
   JSONMAP:
     Channel_0  0
     Channel_1  0
     Channel_2  0
     Channel_3  0
     Channel_4  0
     Color      0
     Dimmer     0
     HSBColor   0
     POWER1     0
     POWER2     0
     POWER3     0
     POWER4     0
   OLDREADINGS:
   READINGS:
     2022-02-15 07:56:10   ANALOG_Temperature1 27.8
     2022-02-15 07:56:10   Berry_HeapUsed  18
     2022-02-15 07:56:10   Berry_Objects   394
     2022-02-15 07:56:10   ESP32_Temperature 53.3
     2022-02-15 07:26:09   FallbackTopic   cmnd/DVES_0C8DAC_fb/
     2022-02-15 07:26:09   GroupTopic      SmartHome/02_Kueche/tasmotas/cmnd/
     2022-02-15 07:56:10   Heap            126
     2022-02-15 07:26:09   Hostname        tasmota-0C8DAC-3500
     2022-02-14 10:27:16   IODev           m2_Server
     2022-02-15 07:26:09   IPAddress       172.16.20.10
     2022-02-15 07:26:09   LWT             Online
     2022-02-15 07:56:10   LoadAvg         1003
     2022-02-15 07:26:09   Module          NSPanel
     2022-02-15 07:56:10   MqttCount       1
     2022-02-15 07:59:15   NSPSend         Done
     2022-02-15 07:26:09   RestartReason   Software reset CPU
     2022-02-15 06:53:29   SaveData        on
     2022-02-15 06:53:28   SetOption26     on
     2022-02-15 07:56:10   Sleep           0
     2022-02-15 07:56:10   SleepMode       Dynamic
     2022-02-15 06:53:27   StateText1      off
     2022-02-15 06:53:27   StateText2      on
     2022-02-15 06:53:28   StateText3      toggle
     2022-02-15 06:53:28   StateText4      hold
     2022-02-15 07:26:10   TelePeriod      300
     2022-02-15 07:56:10   TempUnit        C
     2022-02-15 07:56:10   Time            2022-02-15T07:56:10
     2022-02-15 07:56:10   Uptime          0T00:30:10
     2022-02-15 07:56:10   UptimeSec       1810
     2022-02-15 07:26:09   Version         10.1.0(tasmota)
     2022-02-15 07:26:09   WebServerMode   Admin
     2022-02-15 07:56:10   Wifi_AP         1
     2022-02-15 07:56:10   Wifi_BSSId      18:E8:29:57:46:15
     2022-02-15 07:56:10   Wifi_Channel    6
     2022-02-15 07:56:10   Wifi_Downtime   0T00:00:06
     2022-02-15 07:56:10   Wifi_LinkCount  1
     2022-02-15 07:56:10   Wifi_Mode       11n
     2022-02-15 07:56:10   Wifi_RSSI       100
     2022-02-15 07:56:10   Wifi_SSId       allnetIoT
     2022-02-15 07:56:10   Wifi_Signal     -46
     2022-02-15 06:53:26   associatedWith  02_NSPanel_01_CH2
     2022-02-15 06:53:27   attrTemplateVersion 20220128
     2022-02-15 07:26:09   state           off
     2022-02-15 06:53:26   subscriptions   SmartHome/02_Kueche/tasmota_0C8DAC/cmnd/# SmartHome/02_Kueche/tasmotas/cmnd/# cmnd/DVES_0C8DAC_fb/#
     2022-02-15 07:26:09   x_NSPSend_delete set 8
     2022-02-15 07:26:09   x_NSPSend_json  set {"HMI_resources":[{"index":1,"ctype":"group","id":"1","uiid":1}]}
Attributes:
   autocreate 0
   comment    Initial configuration is just an example. You may delete these parts if not needed. For more info see Forum Thread (https://forum.fhem.de/index.php/topic,125423.0.html) and Tasmota Template Repository (https://templates.blakadder.com/sonoff_NSPanel.html).
   devStateIcon Online:10px-kreis-gruen Offline:10px-kreis-rot
   devicetopic SmartHome/02_Kueche/tasmota_0C8DAC/
   event-on-change-reading NSPanel_params_switches_1_switch,POWER1,POWER2
   event-on-update-reading LWT,ANALOG_Temperature1
   genericDeviceType switch
   group      DEV
   icon       tradfri_filled_floalt
   initConfig set 02_NSPanel_01 x_NSPSend_delete 1; set 02_NSPanel_01 x_NSPSend_delete 2; set 02_NSPanel_01 x_NSPSend_delete 3; set 02_NSPanel_01 x_NSPSend_delete 4; set 02_NSPanel_01 x_NSPSend_delete 5; set 02_NSPanel_01 x_NSPSend_delete 6; set 02_NSPanel_01 x_NSPSend_delete 7; set 02_NSPanel_01 x_NSPSend_delete 8; set 02_NSPanel_01 x_NSPSend_json {"HMI_resources":[{"index":1,"ctype":"group","id":"1","uiid":1}]};
   jsonMap    POWER1:0 POWER2:0 POWER3:0 POWER4:0 Dimmer:0 Channel_0:0 Channel_1:0 Channel_2:0 Channel_3:0 Channel_4:0 HSBColor:0 Color:0
   model      tasmota_NSPanel_split
   readingList SmartHome/02_Kueche/tasmota_0C8DAC/tele/LWT:.* LWT
  SmartHome/02_Kueche/tasmota_0C8DAC/tele/LWT:Online {my $cmds=AttrVal('02_NSPanel_01','initConfig','');fhem("$cmds"); undef}
  SmartHome/02_Kueche/tasmota_0C8DAC/tele/STATE:.* { json2nameValue($EVENT,'',$JSONMAP) }
  SmartHome/02_Kueche/tasmota_0C8DAC/tele/SENSOR:.* { json2nameValue($EVENT,'',$JSONMAP) }
  SmartHome/02_Kueche/tasmota_0C8DAC/tele/INFO.:.* { $EVENT =~ m,^..Info[1-3]..(.+).$, ?  json2nameValue($1,'',$JSONMAP) : json2nameValue($EVENT,'',$JSONMAP) }
  SmartHome/02_Kueche/tasmota_0C8DAC/tele/UPTIME:.* { json2nameValue($EVENT,'',$JSONMAP) }
  SmartHome/02_Kueche/tasmota_0C8DAC/stat/POWER1:.* state
  SmartHome/02_Kueche/tasmota_0C8DAC/stat/RESULT:.* { $EVENT =~ m,\A..NSPanel.+id...(\d+).+params..(.+)..\z, ? json2nameValue($2,"Pan_${1}_",$JSONMAP) : json2nameValue($EVENT,'',$JSONMAP) }
   room       01_Buero
   setList    off:noArg    SmartHome/02_Kueche/tasmota_0C8DAC/cmnd/POWER1 0
  on:noArg     SmartHome/02_Kueche/tasmota_0C8DAC/cmnd/POWER1 1
  toggle:noArg SmartHome/02_Kueche/tasmota_0C8DAC/cmnd/POWER1 2
  setOtaUrl:textField SmartHome/02_Kueche/tasmota_0C8DAC/cmnd/OtaUrl $EVTPART1
  upgrade:noArg   SmartHome/02_Kueche/tasmota_0C8DAC/cmnd/upgrade 1
  x_NSPSend_json:textField { my $payload = $EVENT;$payload =~ s/$EVTPART0 //g; qq(SmartHome/02_Kueche/tasmota_0C8DAC/cmnd/NSPSend $payload)}
  x_NSPSend_delete:selectnumbers,1,1,8,0,lin SmartHome/02_Kueche/tasmota_0C8DAC/cmnd/NSPSend {"index":$EVTPART1, "type":"delete"}
   setStateList on off toggle
   stateFormat <a href="http://IPAddress" target="_blank">
LWT
</a>
state
   userattr   initConfig
   webCmd     :


Über MQTT kommt:

SmartHome/02_Kueche/tasmota_0C8DAC/tele/RESULT
{"NSPanel":{"ctype":"group","id":"5","params":{"switch":"on","switches":[{"switch":"on","outlet":0}]}}}


Im Detail kann ich es mit aber erst heute Abend anschauen

Beta-User

OK, mind. den falschen Topic habe ich da erwischt... "tele" statt "stat"
Änderung ist im svn (ab morgen per update).
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

darkness

Guten Morgen.

Ein Update zu deinem Template. Ich habe dir, wie ich gerade sehe, nur die Hälfte verraten  :'(

Die Widgets werden jetzt richtig dargestellt:

SmartHome/02_Kueche/tasmota_0C8DAC/tele/RESULT
{"NSPanel":{"ctype":"group","id":"8","params":{"switch":"off","switches":[{"switch":"off","outlet":0}]}}}


Aber die beiden internen Schalter/Relais werden nicht mehr angezeigt. Diese laufen unter:

SmartHome/02_Kueche/tasmota_0C8DAC/stat/POWER1 off bzw.
SmartHome/02_Kueche/tasmota_0C8DAC/stat/POWER2 off

Jeweils mit on/off und nicht als json




Internals:
   CID        DVES_0C8DAC
   DEF        DVES_0C8DAC
   DEVICETOPIC SmartHome/02_Kueche/tasmota_0C8DAC/
   FUUID      61eb01ca-f33f-ed18-0794-c083ebcd73a5b0e5
   IODev      m2_Server
   LASTInputDev m2_Server
   MSGCNT     28
   NAME       02_NSPanel_01
   NR         789
   STATE      <a href="http://IPAddress" target="_blank">
LWT
</a>
off
   TYPE       MQTT2_DEVICE
   m2_Server_CONN m2_Server_172.16.20.10_49239
   m2_Server_MSGCNT 28
   m2_Server_TIME 2022-02-16 06:34:27
   JSONMAP:
     Channel_0  0
     Channel_1  0
     Channel_2  0
     Channel_3  0
     Channel_4  0
     Color      0
     Dimmer     0
     HSBColor   0
     POWER1     0
     POWER2     0
     POWER3     0
     POWER4     0
   OLDREADINGS:
   READINGS:
     2022-02-16 06:31:18   ANALOG_Temperature1 28.4
     2022-02-16 06:31:18   Berry_HeapUsed  18
     2022-02-16 06:31:18   Berry_Objects   394
     2022-02-16 06:31:18   ESP32_Temperature 53.9
     2022-02-16 06:31:18   Heap            133
     2022-02-16 06:24:34   IODev           m2_Server
     2022-02-16 06:31:18   LoadAvg         999
     2022-02-16 06:31:18   MqttCount       2
     2022-02-16 06:27:11   Pan_5_switch    off
     2022-02-16 06:27:11   Pan_5_switches_1_outlet 0
     2022-02-16 06:27:11   Pan_5_switches_1_switch off
     2022-02-16 06:29:28   Pan_8_switch    off
     2022-02-16 06:29:28   Pan_8_switches_1_outlet 0
     2022-02-16 06:29:28   Pan_8_switches_1_switch off
     2022-02-16 06:31:18   Sleep           0
     2022-02-16 06:31:18   SleepMode       Dynamic
     2022-02-16 06:31:18   TempUnit        C
     2022-02-16 06:31:18   Time            2022-02-16T06:31:18
     2022-02-16 06:31:18   Uptime          0T23:05:17
     2022-02-16 06:31:18   UptimeSec       83117
     2022-02-16 06:31:18   Wifi_AP         1
     2022-02-16 06:31:18   Wifi_BSSId      18:E8:29:57:46:15
     2022-02-16 06:31:18   Wifi_Channel    6
     2022-02-16 06:31:18   Wifi_Downtime   0T00:00:06
     2022-02-16 06:31:18   Wifi_LinkCount  1
     2022-02-16 06:31:18   Wifi_Mode       11n
     2022-02-16 06:31:18   Wifi_RSSI       92
     2022-02-16 06:31:18   Wifi_SSId       allnetIoT
     2022-02-16 06:31:18   Wifi_Signal     -54
     2022-02-16 06:26:06   associatedWith  02_NSPanel_01_CH2
     2022-02-16 06:26:06   attrTemplateVersion 20220215
     2022-02-16 06:34:27   state           off
     2022-02-16 06:26:05   subscriptions   SmartHome/02_Kueche/tasmota_0C8DAC/cmnd/# SmartHome/02_Kueche/tasmotas/cmnd/# cmnd/DVES_0C8DAC_fb/#
Attributes:
   autocreate 0
   comment    Initial configuration is just an example. You may delete these parts if not needed. For more info see Forum Thread (https://forum.fhem.de/index.php/topic,125423.0.html) and Tasmota Template Repository (https://templates.blakadder.com/sonoff_NSPanel.html).
   devStateIcon Online:10px-kreis-gruen Offline:10px-kreis-rot
   devicetopic SmartHome/02_Kueche/tasmota_0C8DAC/
   event-on-change-reading NSPanel_params_switches_1_switch,POWER1,POWER2
   event-on-update-reading LWT,ANALOG_Temperature1
   genericDeviceType switch
   group      DEV
   icon       tradfri_filled_floalt
   initConfig set 02_NSPanel_01 x_NSPSend_delete 1; set 02_NSPanel_01 x_NSPSend_delete 2; set 02_NSPanel_01 x_NSPSend_delete 3; set 02_NSPanel_01 x_NSPSend_delete 4; set 02_NSPanel_01 x_NSPSend_delete 5; set 02_NSPanel_01 x_NSPSend_delete 6; set 02_NSPanel_01 x_NSPSend_delete 7; set 02_NSPanel_01 x_NSPSend_delete 8; set 02_NSPanel_01 x_NSPSend_json {"HMI_resources":[{"index":1,"ctype":"group","id":"1","uiid":1}]};
   jsonMap    POWER1:0 POWER2:0 POWER3:0 POWER4:0 Dimmer:0 Channel_0:0 Channel_1:0 Channel_2:0 Channel_3:0 Channel_4:0 HSBColor:0 Color:0
   model      tasmota_NSPanel_split
   readingList SmartHome/02_Kueche/tasmota_0C8DAC/tele/LWT:.* LWT
  SmartHome/02_Kueche/tasmota_0C8DAC/tele/LWT:Online {my $cmds=AttrVal('02_NSPanel_01','initConfig','');fhem("$cmds"); undef}
  SmartHome/02_Kueche/tasmota_0C8DAC/tele/STATE:.* { json2nameValue($EVENT,'',$JSONMAP) }
  SmartHome/02_Kueche/tasmota_0C8DAC/tele/SENSOR:.* { json2nameValue($EVENT,'',$JSONMAP) }
  SmartHome/02_Kueche/tasmota_0C8DAC/tele/INFO.:.* { $EVENT =~ m,^..Info[1-3]..(.+).$, ?  json2nameValue($1,'',$JSONMAP) : json2nameValue($EVENT,'',$JSONMAP) }
  SmartHome/02_Kueche/tasmota_0C8DAC/tele/UPTIME:.* { json2nameValue($EVENT,'',$JSONMAP) }
  SmartHome/02_Kueche/tasmota_0C8DAC/stat/POWER1:.* state
  SmartHome/02_Kueche/tasmota_0C8DAC/tele/RESULT:.* { $EVENT =~ m,\A..NSPanel.+id...(\d+).+params..(.+)..\z, ? json2nameValue($2,"Pan_${1}_",$JSONMAP) : json2nameValue($EVENT,'',$JSONMAP) }
   room       01_Buero
   setList    off:noArg    SmartHome/02_Kueche/tasmota_0C8DAC/cmnd/POWER1 0
  on:noArg     SmartHome/02_Kueche/tasmota_0C8DAC/cmnd/POWER1 1
  toggle:noArg SmartHome/02_Kueche/tasmota_0C8DAC/cmnd/POWER1 2
  setOtaUrl:textField SmartHome/02_Kueche/tasmota_0C8DAC/cmnd/OtaUrl $EVTPART1
  upgrade:noArg   SmartHome/02_Kueche/tasmota_0C8DAC/cmnd/upgrade 1
  x_NSPSend_json:textField { my $payload = $EVENT;$payload =~ s/$EVTPART0 //g; qq(SmartHome/02_Kueche/tasmota_0C8DAC/cmnd/NSPSend $payload)}
  x_NSPSend_delete:selectnumbers,1,1,8,0,lin SmartHome/02_Kueche/tasmota_0C8DAC/cmnd/NSPSend {"index":$EVTPART1, "type":"delete"}
   setStateList on off toggle
   stateFormat <a href="http://IPAddress" target="_blank">
LWT
</a>
state
   userattr   initConfig


Gruß

Beta-User

#36
Die Relays finden sich als "state" wieder, POWER2 dabei in dem anderen Device (=> beide kennen SetExtensions). Sehe daher nicht, dass das ein Problem wäre. in josnMap braucht man es afaik trotzdem, um regelmäßige Statusupdates "abzuleiten".

Schön, dass das Auspacken der Panel-Info soweit "ordentlich" klappt :) .

Wie gesagt: Mein persönlicher Angang für das ganze ginge in die Richtung, dass man Perl-Code dazu baut, der direkt aus dem JSON die Daten extrahiert und unmittelbare Schaltaktionen ableitet, wo eine Zuordnung bekannt ist. Sowas ähnliches mache ich mit meinen MiLight-Remotes, Code (die attrTemplate-Variante) wäre in diesem Thread zu finden: https://forum.fhem.de/index.php/topic,103493.0.html. "Irgendwo" (in einem userattr) könnte man die eigentliche Konfig verstecken (Panel-Id zu widget-Type zu FHEM-Zieldevice-Mimik).
Weiß noch nicht, wie das aussieht, wenn man mehrere Menüseiten hat, aber auch das sollte prinzipiell möglich sein.

Ist halt eine Fleißaufgabe...

Nachtrag noch: Für die "Gegenrichtung" würde es sich vermutlich auch anbieten, eine "standardisierte Verpackungslogik" zu vercoden, die dann mit Unterstützung von MQTT_GENERIC_BRIDGE das Panel mit den darzustellenden Ist-Zuständen aus den FHEM-Devices "füttert".
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

Brad Majors

#37
Hey, ich habe mir testweise auch mal das NSP gegönnt. Einbinden in FHEM hat soweit funktioniert.

Jetzt wäre meine erster Wunsch:

Ich würde gerne den eigentlich sinnfreien Temperatur Eintrag mit einem Wert meiner PV-Anlage ersetzen.
Sprich ich sehe was die Anlage momentan an Leistung bringt.

Anstelle jetzt 30°C steht dann 4250W. Ist das machbar?

Auf die beiden Schalter (oder später als Widget) lasse ich dann 2 SONOFF POW R3 (die können 25A) schalten.
Damit kann ich dann den Plugin in hybrid von mir und meiner Frau laden lassen. Wenn der zweite plugin hybrid irgendwan mal geliefert wird......


Wenn das dann läuft beschäftige ich mich mit den Widgets :).

PS: Momentan lasse ich die POW über einen do if schalten. Da FHEM aber nicht weiss welche sonstigen Geräte, Waschmaschine, Trockner usw. am laufen sind würde ich das gerne manuell entscheiden.

Und das NSP ist schneller bedient wie den Rechner öffnen, FHEM schauen, usw.

Raspberry Pi. * Eigenbau Nano Cul 433 und 866 * EnOcean TCM_3 * Netatmo * Max! Thermostate * SMA PV Inverter * Zigbee über ConBeeII / Phoscon

eszych

Hallo Zusammen!
Auch ich hatte mir das NS-Panel über die Kickstarter Kampagne besorgt. Ich hatte vor einiger Zeit schon einmal TASMOTA geflasht, aber dann keine Zeit und keine Muße mehr weiter zu machen.
Auch weil ich noch keinen wirklich guten Platz bei uns im Haus für das Teil gefunden hatte...
Einen Platz habe ich immer noch nicht, aber ich habe es inzwischen geschafft das Teil einigermaßen sinnvoll in FHEM einzubinden.
Eins vorweg, auch ich habe noch nicht auf das MQTT2 Module umgestellt, sondern nutze noch das alte MQTT Modul.
Eingebunden habe ich das Teil also über das MQTT-Modul als MQTT_Device:

defmod NS_Panel MQTT_DEVICE
attr NS_Panel DbLogExclude .*
attr NS_Panel IODev Mosquitto
attr NS_Panel autoSubscribeReadings /FHEM/nspanel/tele/+
attr NS_Panel genericDeviceType switch
attr NS_Panel group NS_Panel
attr NS_Panel icon max_wandthermostat
attr NS_Panel qos 2
attr NS_Panel retain 0
attr NS_Panel room Erdgeschoss,MQTT
attr NS_Panel stateFormat [$name:ANALOG_Temperature1] °C, [$name:Time:t]
attr NS_Panel subscribeReading_INFO1 /FHEM/nspanel/tele/INFO1
attr NS_Panel subscribeReading_INFO2 /FHEM/nspanel/tele/INFO2
attr NS_Panel subscribeReading_INFO3 /FHEM/nspanel/tele/INFO3
attr NS_Panel subscribeReading_LWT /FHEM/nspanel/tele/LWT
attr NS_Panel subscribeReading_RESULT /FHEM/nspanel/tele/RESULT
attr NS_Panel subscribeReading_SENSOR /FHEM/nspanel/tele/SENSOR
attr NS_Panel subscribeReading_STATE /FHEM/nspanel/tele/STATE


Die Readings bekomme ich über eine Expand-JSON:

defmod EXPJS_NSPANEL expandJSON NS_Panel:.*
attr EXPJS_NSPANEL DbLogExclude .*
attr EXPJS_NSPANEL group EXP-JSON
attr EXPJS_NSPANEL room FHEM


Das Schalten der beiden eingebauten Relais kann direkt erfolgen, dazu habe ich einfach zwei MQTT Devices angelegt - hier die Definition eines der beiden:

defmod NS_Panel_Power_1 MQTT_DEVICE
attr NS_Panel_Power_1 DbLogExclude .*
attr NS_Panel_Power_1 IODev Mosquitto
attr NS_Panel_Power_1 devStateIcon OFF:light_ceiling@white ON:light_ceiling@yellow
attr NS_Panel_Power_1 genericDeviceType light
attr NS_Panel_Power_1 group NS_Panel
attr NS_Panel_Power_1 icon light_ceiling
attr NS_Panel_Power_1 publishSet on off toggle /FHEM/nspanel/cmnd/POWER1
attr NS_Panel_Power_1 qos 2
attr NS_Panel_Power_1 retain 0
attr NS_Panel_Power_1 room Erdgeschoss,MQTT
attr NS_Panel_Power_1 subscribeReading_INFO2 /FHEM/nspanel/stat/RESULT
attr NS_Panel_Power_1 subscribeReading_state /FHEM/nspanel/stat/POWER1
attr NS_Panel_Power_1 webCmd on:off:toggle


Die Widgets waren eine Herausforderung! Ich hatte mit Node-Red experimentiert, bin dann aber wieder auf ein Notify zurück.
Da ich die ganzen Readings schon über das EXP-JSON im MQTT-Device habe, kann ich im Notify auf die ID des Widgets triggern:

NS_Panel:NSPanel_id:.* {
my $SwitchID = (ReadingsVal("NS_Panel", "NSPanel_id", 0));;
my $SwitchState = (ReadingsVal("NS_Panel", "NSPanel_params_switch", 0));;
my $Switch01State = (ReadingsVal("NS_Panel", "NSPanel_params_switches_01_switch", 0));;
my $Switch02State = (ReadingsVal("NS_Panel", "NSPanel_params_switches_02_switch", 0));;
my $Switch03State = (ReadingsVal("NS_Panel", "NSPanel_params_switches_03_switch", 0));;
my $Switch04State = (ReadingsVal("NS_Panel", "NSPanel_params_switches_04_switch", 0));;

{Log 1, "Das Device $NAME hat ausgeloest, der Event sah so aus: $EVENT"};
{Log 1, "Das Device $NAME hat ausgeloest, Switch-ID: $SwitchID"};
{Log 1, "Das Device $NAME hat ausgeloest, Switch-State: $SwitchState"};


fhem("set NS_Panel inactive");;

if ( "$SwitchID" eq "1") {
}

if ( "$SwitchID" eq "2") {
}

if ( "$SwitchID" eq "3") {
}

if ( "$SwitchID" eq "4") {
}

if ( "$SwitchID" eq "5") {
{Log 1, "Das Device $NAME hat ausgeloest, Switch-01-State: $Switch01State"};
{Log 1, "Das Device $NAME hat ausgeloest, Switch-02-State: $Switch02State"};
{Log 1, "Das Device $NAME hat ausgeloest, Switch-03-State: $Switch03State"};
{Log 1, "Das Device $NAME hat ausgeloest, Switch-04-State: $Switch04State"};
my $mqttstring = '{"NSPanel":{"ctype":"group","id":"' . $SwitchID . '","params":{"switches":[{"switch":"' . $Switch01State . '","outlet":0},{"switch":"' . $Switch02State . '","outlet":1},{"switch":"' . $Switch03State . '","outlet":2},{"switch":"' . $Switch04State . '","outlet":3}]}}}';
# {Log 1, "Das Device $NAME hat ausgeloest, MQQT Response: $mqttstring"};
if ( "$Switch01State" eq "on") {
fhem("set HM_AKT_Steckdose on");;
fhem("set Mosquitto publish /FHEM/nspanel/cmnd/nspsend $mqttstring");;
}
if ( "$Switch01State" eq "off") {
fhem("set HM_AKT_Steckdose off");;
fhem("set Mosquitto publish /FHEM/nspanel/cmnd/nspsend $mqttstring");;
}
if ( "$Switch02State" eq "on") {
fhem("set HP_Akt_Steckdose on");;
fhem("set Mosquitto publish /FHEM/nspanel/cmnd/nspsend $mqttstring");;
}
if ( "$Switch02State" eq "off") {
fhem("set HP_Akt_Steckdose off");;
fhem("set Mosquitto publish /FHEM/nspanel/cmnd/nspsend $mqttstring");;
}
}

if ( "$SwitchID" eq "6") {
}

if ( "$SwitchID" eq "7") {
}

if ( "$SwitchID" eq "8:") {
}
#
fhem("set NS_Panel active");;
}


Wie ihr seht ist das ganze noch nicht fertig und ich habe erst einen Mehrfach-Schalter umgesetzt.
Wichtig ist es den Status an das NS-Panel zurück zu schicken, sonst springt bei einem Mehrfach-Schalter-Widget die Anzeige wieder auf "off".
Was mir noch fehlt ist ein Automatismus, der bei "manuellem" Schalten der eingebundenen Devices - in meinem Fall die Steckdosen - auch der Status im NS-Panel aktualisiert wird.
Das läßt sich natürlich auch mit einem Notify lösen - aber irgendwann verliert man so wohl den Überblick über alles...

Verbesserungsvorschläge sind herzlich wilkommen!

Viel Spaß beim "nachbauen"  ;)
Raspberry Pi 2 - FHEM 5.7
HM-LAN, HM-CFG-USB-2
HM-Sec-SCo, HM-Sec-SC-2, HM-TC-IT-WM-W-EU,
HM-LC-SW4-DR, HM-LC-Sw1-DR, HM-ES-PMSw1-DR,    
HM-ES-PMSw1-Pl - Rademacher Hompilot DuoFern

guck123

Hallo zusammen,

ich arbeite da mit zwei Doif. Einen für die Steuerung aller Geräte und einen für den Widget Status aller Geräte. Ist recht übersichtlich so.

Als Beispiel:

doif_steuerung

([MQTT2_DVES_E8187C:Pan_1_switch] eq "on") (set MQTT2_shelly1_F42015 on)
DOELSEIF
([MQTT2_DVES_E8187C:Pan_1_switch] eq "off") (set MQTT2_shelly1_F42015 off)
DOELSEIF
([MQTT2_DVES_E8187C:Pan_2_switch] eq "on") (set HM_6A472D on)
DOELSEIF
([MQTT2_DVES_E8187C:Pan_2_switch] eq "off") (set HM_6A472D off)

Doif_status Update:

   
([MQTT2_shelly1_F42015:state] eq "on") (set MQTT2_DVES_E8187C x_NSPSend_json {"relation":{"id":"1","params":{"switch":"on"}}})
DOELSEIF
([MQTT2_shelly1_F42015:state] eq "off") (set MQTT2_DVES_E8187C x_NSPSend_json {"relation":{"id":"1","params":{"switch":"off"}}})

Grüße,

Denis