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

Tout ce que vous avez toujours voulu savoir sur le Z-Wave, protocole, equipements, interface,s ...
Chrominator
Messages : 666
Enregistré le : 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) Vu 503 fois

Après
Apres.PNG
Apres.PNG (13.26 Kio) Vu 503 fois
Partir, c’est pourrir un pneu.

Ubuntu 20.04 LTS - Domoticz v2020.2
rfxcom RFXtrx433 USB Version: Pro1/1043
Z-Stick GEN5 Version: 1.6-1136-g07ea22bb
Rtl433 RTL-SDR receiver
RFLink Gateway with LAN interface 48.4

Chrominator
Messages : 666
Enregistré le : 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) Vu 109 fois
Partir, c’est pourrir un pneu.

Ubuntu 20.04 LTS - Domoticz v2020.2
rfxcom RFXtrx433 USB Version: Pro1/1043
Z-Stick GEN5 Version: 1.6-1136-g07ea22bb
Rtl433 RTL-SDR receiver
RFLink Gateway with LAN interface 48.4

klarf
Messages : 46
Enregistré le : 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 : 666
Enregistré le : 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
Partir, c’est pourrir un pneu.

Ubuntu 20.04 LTS - Domoticz v2020.2
rfxcom RFXtrx433 USB Version: Pro1/1043
Z-Stick GEN5 Version: 1.6-1136-g07ea22bb
Rtl433 RTL-SDR receiver
RFLink Gateway with LAN interface 48.4

Répondre