peerSmart - einfaches peeren

Begonnen von martinp876, 02 März 2019, 11:51:27

Vorheriges Thema - Nächstes Thema

martinp876

das neue Kommando peerSmart (ab morgen im Update) soll das peeren vereinfachen. Dafür werden optionen entfernt. Das kommando erstellt oder löscht das peering
- immer "single"
- mit auswahliste
- ist immer bidirektional (ehemals both)
Daher sind
- nur sinnvolle peerings möglich (anderes mit den bekannten Kommands peerChan oder peerBulk)

Vorteil zu peerChan: weniger parameter, auswahlliste
Vorteil zu peerBulk: Auswahlliste, automatisches Ssetzen des "peerNeedsBurst" register

Da es nur single peering zulässt (sonst kann es ja nicht mehr einfache sein) macht es sinn, die Aktor-Kanäle danach zu programmieren. Hier ergänzt das Template den Kommandosatz.
Also erst ein oder mehre kanäle peeren peere. dann mit templateSet die Funktion einrichten.

Hier zur Info: hat man ein template definiert kann man es zuweisen mit tplSet_<peer>
=> erst einmal templates erstellen (bspw nachfolgende for "schalter" eingeben)

hier 3 templates für Schalter mit der Funktion

short:toggle status, set max on time  long:ignore (keine Aktion)
short:aus  long:ignore (keine Aktion)
short:toggle status  long:ignore (keine Aktion)
short:on mit max onTime  long:aus

set hm templateDef SwToggleIgnore timeOn "sh:toggle lg:ignore" shSwJtOn:dlyOff shSwJtDlyOff:off shMultiExec:off shSwJtOff:dlyOn shOffTime:unused shOnDly:0 lgActionType:off shActionType:jmpToTarget shSwJtDlyOn:on shOnTimeMode:absolut shOffDly:0 shOffTimeMode:absolut shOnTime:p0
set hm templateDef SwOffIgnore 0 "sh:off lg:ignore" shOffTimeMode:absolut shActionType:jmpToTarget lgActionType:off shSwJtDlyOn:dlyOff shOffDly:0 lgMultiExec:off shSwJtOff:no shOffTime:unused shSwJtOn:dlyOff shSwJtDlyOff:off shMultiExec:off
set hm templateDef SwToggleToggle timeOn "sh:toggle lg:toggle" lgOffTime:unused shOnDly:0 shOffTime:unused shSwJtOff:dlyOn shSwJtDlyOn:on shActionType:jmpToTarget shOffTimeMode:absolut lgOnTimeMode:absolut lgSwJtOn:dlyOff lgOnTime:p0 lgSwJtOff:dlyOn lgOffTimeMode:absolut shMultiExec:off shSwJtDlyOff:off shSwJtOn:dlyOff lgSwJtDlyOn:on shOffDly:0 lgMultiExec:off shOnTimeMode:absolut lgActionType:jmpToTarget shOnTime:p0 lgSwJtDlyOff:off lgOnDly:0 lgOffDly:0
set hm templateDef SwOnOff timeOn "sh:on lg:off" lgActionType:jmpToTarget shOnTimeMode:absolut lgMultiExec:off lgOffDly:0 shOnTime:p0 lgSwJtDlyOff:off shSwJtOn:no shSwJtDlyOff:dlyOn shMultiExec:off lgOffTimeMode:absolut lgSwJtDlyOn:dlyOff shSwJtDlyOn:on shActionType:jmpToTarget lgSwJtOn:dlyOff lgSwJtOff:no shSwJtOff:dlyOn shOnDly:0 lgOffTime:unused

Hat das Template paramtert (bspw oben die Ontime ) kann man im nächsten Schritt diese ändern. Hier also die onTime setzen.
Ich nutze bspw immer onTime beim peeren. So wird da Licht nach 4h wieder ausgeschaltet, wenn es überLichtschlater eingeschaltet wurde.

Für Einsteiger (und alle anderen) sollte es nun hoffentlich einfacher werden:
1) set peerSmart
2) set tplSet_<peer>
3) optional set tplParam<...>

templates kann man hier kopieren und anfragen - mit hmtemplate auch einfach erstellen (man muss sich das "attr" eingabeverfahren einmal ansehen, das ist neu) oder modifizieren.
Für experten: template versteckt nichts, jedes Register ist sichtbar.


frank

#1
ich habe es noch nicht getestet, aber das prinzip sieht sehr schön einfach aus.

beim hm-cc-tc ist in allen 3 chn die auswahlliste von peerSmart leer, bzw besteht aus einem leeren eintrag.
ausserdem fehlt in chn 1,3 der befehl peerChan.
im hauptdevice könnte peersmart eigentlich entfallen.

beim hm-cc-vd existiert nur der vorhandene virtuelle tc (peer) zum löschen in der liste. hier müssten ja mindestens alle chn2 der vorhandenen hm-cc-tc erscheinen.
ausserdem fehlt peerchan.

bei den virtuellen tc fehlen in der auswahlliste von peersmart alle hm-cc-vd.

edit: die leere liste bei chn01 (weather) könnte doch richtig sein, da mir zum sinnvollen peeren gerade nur ein rt_weather chn einfällt. rt habe ich aber keine.
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

martinp876

Peerchan ist nicht geändert. Ch1 und 3 sind die Empfänger. Peerchan gab und gibt es nur von sendern.

Ja, im hauptdevice muss ich es unterbinden.
Vd habe ich nicht implementiert, fehlt also noch. Da hier alles manuell gemacht werden muss kann das noch häufiger vorkommen. Bitte um Nachsicht und info.

Bei rt ch1 muss ich noch sinnvolle peers definieren.

Beachte, dass es neben den rt peering bspw bei lichtschaltern oder rollos sinn macht, templates zu nutzen. Nach dem peeren legt man die funktion fest. Auch hier ein drop down. Eine liste mit templates kann ich stellen.

frank

#3
ZitatPeerchan ist nicht geändert. Ch1 und 3 sind die Empfänger. Peerchan gab und gibt es nur von sendern.
sorry, daran hatte ich nicht gedacht.
trotzdem müsste nach meinem verständnis auch im weatherchannel eines cc-tc oder tc-it peerchan existieren, da diese ja als externe tempsensoren für einen rt genutzt werden können. die weather channel verhalten sich bei beiden tc also als sender. 

Zitatsinn macht, templates zu nutzen
ja ja, das ewige template thema.
grundsätzlich sind templates eine schöne idee. allerdings bin ich mit hmtemplate nie richtig "warm" geworden.
zumindestens für meinen kopf ist die handhabung leider nicht kompatibel, so dass es insgesamt für meinen bedarf "einfacher" ist, 2-3 register über regset zu ändern.

seitdem papa die wunderschöne eingabemaske gebaut hat, https://forum.fhem.de/index.php/topic,94412.0.html, ist das "direkte" bearbeiten der register sogar noch sehr viel einfacher geworden.

wenn diese eingabemaske nun noch um templates erweitert würde, könnten templates sicher auch den "durchbruch" schaffen.
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

martinp876

Der tcweather hat ein peerchan. Die älteren modele habe ich nicht. Könnte man vorsehen.

Das interface von papa ist wirklich cool. Aber ( meine tiefe überzeugung) nicht der richtige weg. Ok, schon, wenn ich spielen will. Aber das sind temporäre einstellungen. Nicht speicherbar. Nicht wiederherstellbar. Nicht einfach übertragbar. Nicht vergleichbar.
Versuche dich erst einmal von erstellen des templates zu lösen und betrachte den usecase. Bsp lichtschalter. Ich habe bei einem einfachen lichtschalter schon einige unterschiedliche implementierungen. Diese unterscheiden sich beim gleichen aktor schon bei den peers. Ich will bei einem druck ( short oder long, egal erstmal) dass das licht: an,aus,togglt, ignore. Bei mir immer mit ontime. Den eine  peer(button) nutze ich bei short für toggle, bei long für on. Einen anderen peer ( mein default) macht short:on long:off.
Ich definiere also templates für schalter swtpl_<shortaction>_<longaktion>. Also swtpl_on_ignore, swtpl_on_off, swtpl_toggle_off. Ich nutze noch einen paramter(onTime). Muss man nicht.
Die templates kann ich zu Verfügung stellen.
Wenn du das template zuweist musst du nicht mehr überlegen, welche registee du setzen musst. Du musst es nicht mehr prüfen. Du kannst mittlerweile die parameter im frontend ändern.da ist ein kommando dafür. Ausserdem wird dir die liste der möglichen templates angezeigt.

Wie du siehst gebe ich nicht auf. Weil ich das für den einzig sinnvollen weg halte, die register in hochsprache, reproduzierbarkeit und nachverfolgung zu heben. Papas interface ist cool, deckt aber keine einzige meiner eigentlichen forderungen ab. Es macht die assemblersprache nur besser editierbar.

Eins noch: der erste angang der templates hat die user verschreckt und überfordert. Das sollte nun deutlich einfacher sein. Ich schicke dir gerne einen satz templates für schalötaktoren zum spiele, wenn du sagst, was du brauchst.

Otto123

#5
Hallo Martin,

ich habe das heute mal durchgespielt. Das ging für zwei Tasten / an&aus ganz easy und schnell. War auch alles logisch.

Was mir jetzt nicht klar geworden ist bzw. fehlt: Wie bekomme ich bei tplSet_<btn> autoOff_short die Zeit dahinter? Also so  - der typische Fall Impulsschalter fürs Garagentor.

Edit - habe es gefunden, nachdem man das Template angewendet hat, gibt es im set Menü eine weitere Auswahl wie: tplParaxxxx

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

PS915

Ich wollte gerade PeerSmart verwenden und habe festgestellt, dass im Dropdown Menü die Device Namen nicht aktuell sind.

Hier mein Ablauf:

define virtuelle_Taster CUL_HM 123456
set virtuelle_Taster virtual 6
rename virtuelle_Taster_Btn1 v.taster1.btn1
rename virtuelle_Taster_Btn2 v.taster1.btn2
rename virtuelle_Taster_Btn3 v.taster2.btn1
rename virtuelle_Taster_Btn4 v.taster2.btn2
rename virtuelle_Taster_Btn5 v.taster3.btn1
rename virtuelle_Taster_Btn6 v.taster3.btn2


Screenshot "pS_1.PNG" - aktuelle Namen nach dem Rename
Screenshot "pS_2.PNG" - Übersicht Dropdown
Screenshot "pS_3.PNG" - Auswahl von BTN 6
Screenshot "pS_4.PNG" - Fehlermeldung

Nur nach einem shutdown restart werden die Namen im Dropdown korrekt angezeigt.

Ist das dein Bug?

Gruß,
Phil



Otto123

#7
Hallo Martin,

ich habe versucht mit peerSmart ein FB (RC-4-1) 4 Tasten mit vier Aktoren zu peeren, pro Taste 1 Aktor.
2 Aktoren sind Kanäle eines HM-MOD-RE-8
2 Aktoren sind virtuelle Känale der VCCU

Der Peervorgang mit dem HM-MOD-RE-8 funktioniert soweit sauber, sogar die Register peerNeedsBurst in der FB werden gesetzt!  :D
Man muss 4 Befehle absetzen (ich schreib es einfach mal hin)  ;)
set SW81_1_TorAuf peerSmart RC41_1
set SW81_3_TorZu peerSmart RC41_3
set RC41_1 peerSmart SW81_1_TorAuf
set RC41_3 peerSmart SW81_3_TorZu

Es trat allerdings der Fall auf, dass configCheck in der FB missing register list gemeldet hat. Ich habe ein set RC41 getConfig nach den ersten beiden peerSmart Befehlen eingeschoben!
Ich habe dann noch je Aktor 2 Templates und darin jeweils einen Parameter gesetzt. Per Menü - da war also Zeit vorhanden. Ich schreibe einfach noch als Beispiel je einen Befehl auf.
set SW81_3_TorZu tplSet_RC41_3 autOff_short
set SW81_3_TorZu tplPara010_RC41_3_short_autoOff_time 1

Danach sagte configCheck auch missing Register, ich musste zusätzlich noch ein set SW81_3_TorZu getConfig nachschieben.

Was nicht funktioniert ist peerSmart am VCCU Kanal. Man kann es per Menü zwar auswählen aber es passiert nichts!
Statt
set VCCU_Btn4 peerSmart RC41_2
set VCCU_Btn3 peerSmart RC41_4

musste ich noch peerChan verwenden. Das funktioniert sofort. :)
set RC41_2 peerChan 0 VCCU_Btn4 single set actor
set RC41_4 peerChan 0 VCCU_Btn3 single set actor


Ich denke peerSmart für virtuelle Kanäle der VCCU hat noch ein Fehler.
File            Rev   Last Change

10_CUL_HM.pm    19983 2019-08-11 13:48:33Z martinp876
98_HMinfo.pm    19495 2019-05-30 09:17:45Z martinp876
00_HMLAN.pm     18152 2019-01-05 23:18:38Z martinp876
00_HMUARTLGW.pm 18838 2019-03-09 20:40:14Z mgernoth

HMConfig.pm     19226 2019-04-20 06:54:28Z martinp876


Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz