[Contournement] Neo Coolcam Z-Wave - kWh parfois farfelus

Forum dédié au Z-Wave : protocole, équipements, objets, interfaces ...
Chrominator
Messages : 1042
Inscription : 19 déc. 2015, 07:29
Localisation : France

Re: [Contournement] Neo Coolcam Z-Wave - kWh parfois farfelus

Message par Chrominator »

Le script fonctionne bien, mais n'empêche pas Domoticz d'enregistrer certaines valeurs erronées qui passent au travers.
Donc ce n'est pas une solution complète.

Le mieux serait un nouveau firmware pour ces prises, mais ne rêvons pas.

J'ai donc pris le parti d'une correction automatique à base de SQL.
Le principe est de mettre à jour soit la valeur du jour, soit le total lorsqu'il est faux, tout en évitant d'écraser les valeurs pertinentes.

Évidemment je recommande de faire une sauvegarde de la base de Domoticz avant de lancer cette procédure.

Pour limiter les éventuels dégâts qu'elle pourrait occasionner, il faut spécifier les IDX des NEO Coolcam qui seront mis à jour dans cette ligne :

Code : Tout sélectionner

and Meter_Calendar.DeviceRowID in ('1156', '1451', '1453', '1520', '1530', '1539', '1547')
La procédure à lancer dans sqlite3, autant de fois que nécessaire (1 fois par jour devrait suffire).

Code : Tout sélectionner

.open /home/pi/domoticz/domoticz.db

update Meter_Calendar
	set Counter = 0
	where Counter < 0
	and DeviceRowID in ('1156', '1451', '1453', '1520', '1530', '1539', '1547')
	;
update Meter_Calendar
set Value = (select b.Counter-a.Counter 
				from Meter_Calendar a join Meter_Calendar b on a.DeviceRowID = b.DeviceRowID 
				where Meter_Calendar.DeviceRowID = a.DeviceRowID
				and julianday(a.date) = julianday(b.date) - 1 
				and Meter_Calendar.Date = b.Date
				order by b.Date
			)
where exists (
select * 
				from Meter_Calendar a join Meter_Calendar b on a.DeviceRowID = b.DeviceRowID 
				where a.DeviceRowID = Meter_Calendar.DeviceRowID
				and Meter_Calendar.DeviceRowID in ('1156', '1451', '1453', '1520', '1530', '1539', '1547')
				and julianday(a.date) = julianday(b.date) - 1
				and Meter_Calendar.DeviceRowID = b.DeviceRowID
				and Meter_Calendar.Date = b.Date
				and b.Counter >= a.Counter
				);

update Meter_Calendar
set Counter = (select a.Counter+b.Value
				from Meter_Calendar a join Meter_Calendar b on a.DeviceRowID = b.DeviceRowID 
				where Meter_Calendar.DeviceRowID = a.DeviceRowID
				and julianday(a.date) = julianday(b.date) - 1 
				and Meter_Calendar.Date = b.Date
				and b.Value between 0 and 500000
			)
where exists (
select * 
				from Meter_Calendar a join Meter_Calendar b on a.DeviceRowID = b.DeviceRowID 
				where a.DeviceRowID = Meter_Calendar.DeviceRowID
				and Meter_Calendar.DeviceRowID in ('1156', '1451', '1453', '1520', '1530', '1539', '1547')
				and julianday(a.date) = julianday(b.date) - 1
				and Meter_Calendar.DeviceRowID = b.DeviceRowID
				and Meter_Calendar.Date = b.Date
				and b.Value < 500000
				);

update Meter_Calendar
set Value = (select b.Counter-a.Counter 
				from Meter_Calendar a join Meter_Calendar b on a.DeviceRowID = b.DeviceRowID 
				where Meter_Calendar.DeviceRowID = a.DeviceRowID
				and julianday(a.date) = julianday(b.date) - 1 
				and Meter_Calendar.Date = b.Date
				order by b.Date
			)
where exists (
select * 
				from Meter_Calendar a join Meter_Calendar b on a.DeviceRowID = b.DeviceRowID 
				where a.DeviceRowID = Meter_Calendar.DeviceRowID
				and Meter_Calendar.DeviceRowID in ('1156', '1451', '1453', '1520', '1530', '1539', '1547')
				and julianday(a.date) = julianday(b.date) - 1
				and Meter_Calendar.DeviceRowID = b.DeviceRowID
				and Meter_Calendar.Date = b.Date
				and b.Counter >= a.Counter
				);

.quit
avec l'effet produit :


Avant
Avant.png
Avant.png (15.35 Kio) Consulté 2728 fois

Après
Apres.PNG
Apres.PNG (13.26 Kio) Consulté 2728 fois
Un bon frein vaut mieux que deux sparadraps.

Ubuntu 24.04.3 LTS - Domoticz 2025.1 (build 16782)
Pentium G3220T 2.6GHz - 4Go DDR3
RFXtrx433 USB Ver Pro1/1043
Z-Stick GEN5 Version: 1.6-1136-g07ea22bb
Rtl433 RTL-SDR receiver
RFLink Gateway
Zigbee SLZB-06
Chrominator
Messages : 1042
Inscription : 19 déc. 2015, 07:29
Localisation : France

Re: [Contournement] Neo Coolcam Z-Wave - kWh parfois farfelus

Message par Chrominator »

Bonne nouvelle : Les valeurs farfelues issues des Neo Coolcam Z-Wave sont rejetées maintenant, nous n'auront plus ces valeurs parasites dans nos bases.

Voir ici, et la trace ci-dessous :
(C'est pas neuf mais je viens de le découvrir)

Screenshot_2021-01-13 Domoticz_dev.png
Screenshot_2021-01-13 Domoticz_dev.png (4.76 Kio) Consulté 2334 fois
Un bon frein vaut mieux que deux sparadraps.

Ubuntu 24.04.3 LTS - Domoticz 2025.1 (build 16782)
Pentium G3220T 2.6GHz - 4Go DDR3
RFXtrx433 USB Ver Pro1/1043
Z-Stick GEN5 Version: 1.6-1136-g07ea22bb
Rtl433 RTL-SDR receiver
RFLink Gateway
Zigbee SLZB-06
klarf
Messages : 136
Inscription : 17 mars 2018, 09:00

Re: [Contournement] Neo Coolcam Z-Wave - kWh parfois farfelus

Message par klarf »

Bonsoir,
Je viens de voir le sujet alors que j'ai reçu 2 prises la semaine dernière, c'est cool car justement j'étais habitué au prise fibaro z wave où les mesures sont fiables, et là j'ai eu le bug avec une prise neo cool cam (une sur les 2). J'ai mis le script en place et je verrais à la prochaine utilisation si c'est OK.
Merci pour les recherches et les liens !
Chrominator
Messages : 1042
Inscription : 19 déc. 2015, 07:29
Localisation : France

Re: [Contournement] Neo Coolcam Z-Wave - kWh parfois farfelus

Message par Chrominator »

GizMoCuz a filtré les valeurs négatives engendrées par les neo coolcam plugs dans domoticz le 7 janvier 2021.

Le comportement est un peu différent, et j'observe que mon précédent script sql ne résoud plus aussi bien le problème.

Donc nouveau script ci-dessous pour toute version de Domoticz postérieure à cette date.
Comme avant, vous remplacez les valeurs de l'ensemble DeviceRowID in ('1156', '1451', '1453', '1520', '1530', '1539', '1547', '1565', '1671') par les valeurs d'idx de vos prises.

Code : Tout sélectionner

.open /home/pi/domoticz/domoticz.db

update Meter_Calendar
	set Value = 0
	where Value < 0
	and DeviceRowID in ('1156', '1451', '1453', '1520', '1530', '1539', '1547', '1565', '1671')
;
update Meter_Calendar
	set Counter = 0
	where (Counter is NULL)
	and DeviceRowID in ('1156', '1451', '1453', '1520', '1530', '1539', '1547', '1565', '1671')
;
update Meter_Calendar
set Counter = (select a.Counter+b.Value
				from Meter_Calendar a join Meter_Calendar b on a.DeviceRowID = b.DeviceRowID 
				where Meter_Calendar.DeviceRowID = a.DeviceRowID
				and julianday(a.date) = julianday(b.date) - 1 
				and Meter_Calendar.Date = b.Date
				and b.Value between 0 and 500000
			)
where exists (
select * 
				from Meter_Calendar a join Meter_Calendar b on a.DeviceRowID = b.DeviceRowID 
				where a.DeviceRowID = Meter_Calendar.DeviceRowID
				and Meter_Calendar.DeviceRowID in ('1156', '1451', '1453', '1520', '1530', '1539', '1547', '1565', '1671')
				and julianday(a.date) = julianday(b.date) - 1
				and Meter_Calendar.DeviceRowID = b.DeviceRowID
				and Meter_Calendar.Date = b.Date
				and b.Value < 500000
				);
update Meter_Calendar
set Value = (select b.Counter-a.Counter 
				from Meter_Calendar a join Meter_Calendar b on a.DeviceRowID = b.DeviceRowID 
				where Meter_Calendar.DeviceRowID = a.DeviceRowID
				and julianday(a.date) = julianday(b.date) - 1 
				and Meter_Calendar.Date = b.Date
				order by b.Date
			)
where exists (
select * 
				from Meter_Calendar a join Meter_Calendar b on a.DeviceRowID = b.DeviceRowID 
				where a.DeviceRowID = Meter_Calendar.DeviceRowID
				and Meter_Calendar.DeviceRowID in ('1156', '1451', '1453', '1520', '1530', '1539', '1547', '1565', '1671')
				and julianday(a.date) = julianday(b.date) - 1
				and Meter_Calendar.DeviceRowID = b.DeviceRowID
				and Meter_Calendar.Date = b.Date
				and b.Counter >= a.Counter
				);				
.exit
Un bon frein vaut mieux que deux sparadraps.

Ubuntu 24.04.3 LTS - Domoticz 2025.1 (build 16782)
Pentium G3220T 2.6GHz - 4Go DDR3
RFXtrx433 USB Ver Pro1/1043
Z-Stick GEN5 Version: 1.6-1136-g07ea22bb
Rtl433 RTL-SDR receiver
RFLink Gateway
Zigbee SLZB-06
Répondre