Trame 175 HZ Pulsadis(Tempo,EJP, Heures Creuses, etc)

Forum pour tous les autres protocoles : Enocean, X10, les cartes piface.razberry ...
Pour les questions concernant le choix de protocoles, merci d'utiliser le forum Les autres objets.
L'Arsène
Messages : 51
Inscription : 06 févr. 2019, 18:57
Localisation : Grand EST

Re: Trame 175 HZ Pulsadis(Tempo,EJP, Heures Creuses, etc)

Message par L'Arsène »

Capture d’écran 2023-11-29 .png
Capture d’écran 2023-11-29 .png (30.59 Kio) Consulté 2144 fois
Bonjour YvesJosé,

Merci pour le nouveau script.
Sans tests ni essais possible, on ne peut valider à 100% un programme, script etc ..

Aujourd'hui en EJP, ce matin l'affichage me semble encore pas tout à fait correct.
Je suppose que la deuxième ligne d'information devrait être 'Demain pas d\'info' en attendant la soirée ?

Bonne journée.
L'Arsène.
yvesjose
Messages : 55
Inscription : 16 déc. 2019, 10:17

Re: Trame 175 HZ Pulsadis(Tempo,EJP, Heures Creuses, etc)

Message par yvesjose »

Bonjour l'Arsène

Oui j'ai remarqué le problème je suis en train de le corriger, mais pour être sur j'attends un peu avant de diffuser une nouvelle version.

Nouvelle version en cours de test :

Code : Tout sélectionner

--[[
Récupère les infos EJP sur le site de EDF avec ce lien

https://particulier.edf.fr/services/rest/referentiel/historicEJPStore?searchType=ejp

{"listeEjp":[{"dateApplication":1638140400000,"statut":"EJP"},{"dateApplication":1641942000000, ......
.......,{"dateApplication":1675724400000,"statut":"EJP"},{"dateApplication":1675897200000,"statut":"EJP"}],"nbEjpRestants":10,"dateFinPeriode":"2023-03-31","dateDebutPeriode":"2022-11-01"}
On reçoit une table json contenant les dates des 22 jours de la saison précédente suivie des dates de la nouvelle saison le tout en pile FIFO et la trame se termine
avec le nombre de jours restants de la saison encours et les dates de le période.
Pour déterminer les infos EJP du jour et du lendemain je récupère uniquement que les 2 dernières dates de la table et je les compare à la date actuelle.
La mise à jour de ces infos est théoriquement disponible à partir de 15H30 (mais souvent plutôt) donc je force "Demain pas d'info" avant 16H00 et "Demain non EJP" après.
sur le site EDF :
***La mise à jour des données est effectuée quotidiennement vers 15h30, cependant des contraintes d'exploitation peuvent la retarder jusqu'à 5h du matin du jour EJP.***
--]]
local Jour_semaine = { 'Dimanche' , 'Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi', 'Samedi' } 
local alerte_ejp    = 'Infos EJP'       -- renseigner le nom de l'éventuel device alerte EJP associé (dummy - alert)
return {
	on = {
		timer = { 'at 07:00', 'at 23:00' , -- Pour être synchronisé avec les horaires EJP début et fin
		          'at *:05', 'at *:35' },   -- Vérification toutes les 30 minutes pour avoir l'info au plutot
		-- timer = { 'every 5 minutes' }, -- Pour test
		httpResponses = {
			'Rep_ejp' -- must match with the callback passed to the openURL command
		}
	},
--	logging = {
--		level = domoticz.LOG_INFO,
--		marker = 'template',
--	},
	execute = function(domoticz, item)
	    -- local day = Jour_semaine[tonumber(os.date("%w")) + 1]
        local devEJP = domoticz.devices(alerte_ejp)
        local function getTimezone()
            local now = os.time()
            return math.floor(os.difftime(now, os.time(os.date("!*t", now))))/3600
        end
        local function text_color(text,color)
            if color == 1  then text = '<FONT COLOR=#00FF00>' .. text .. '</FONT>' end -- Vert
            if color == 2  then text = '<FONT COLOR=#FF7F00>' .. text .. '</FONT>' end -- Orange
            if color == 4 or color == 3 then text = '<FONT COLOR=#FF0000>' .. text .. '</FONT>' end -- Rouge
            return text
        end
        local Time = require('Time')
        -- TimeZone = getTimezone()
        local now = Time(domoticz.time.rawDate .. ' 00:00:00') -- .addHours(TimeZone)
        local date_jour =  domoticz.time.dateToTimestamp(domoticz.time.rawDate .. ' ' .. ' 00:00:00')
        local date_demain = date_jour + 86400 -- ajout de 86400 seconde pour ajouter 1 jour
		if (item.isTimer) and domoticz.time.matchesRule('on  1/11-31/3') then
			domoticz.openURL({
				url = 'https://particulier.edf.fr/services/rest/referentiel/historicEJPStore?searchType=ejp',
				method = 'GET',
				headers = {["User-Agent"]= "Wget/1.20.3 (linux-gnu)",["Content-Type"]="application/json"},
				callback = 'Rep_ejp', -- see httpResponses above.
			})
		end
		if (item.isHTTPResponse) then
			if (item.ok) then
				if (item.isJSON) then
				    local Etat = devEJP.text -- 237
                    local ix = 0
					local Nbjrestant = item.json.nbEjpRestants  -- Nombre de jours restants
					for index, value in ipairs(item.json.listeEjp) do
                        ix = index -- recupère l'index de la dernire valeur de la tabel "listeEjp"
                    end  
					-- print(' Index : ' .. ix)
					local date_dj =   domoticz.utils.round(item.json.listeEjp[ix].dateApplication / 1000) -- derniere date
					local date_avdj =  domoticz.utils.round(item.json.listeEjp[ix-1].dateApplication / 1000) -- avant dernière date
					print( 'Nb Jours restants : ' .. Nbjrestant .. ' Date : Jour : ' .. date_jour .. ' Demain : ' .. date_demain .. ' / ' .. date_dj .. ' / ' .. date_avdj )
					texte = 'Nb Jours restants : ' .. Nbjrestant
                    if domoticz.time.matchesRule('at 15:34-23:59') then --  or Nbjrestant == 0
                        if date_demain == date_dj or date_demain == date_avdj then -- le dernier jour est égale à demain
                            message2 = 'Demain Rouge EJP'
                            couleur2 = 3
                        -- print('Message 2 :' .. message2) 
                        else
                            message2 = 'Demain Non EJP'
                            couleur2 = 1
                        end
                    else
                        message2 = 'Demain pas d\'info'
                        couleur2 = 0
                    end
                    if date_jour > date_dj  then  -- le dernier jour de table est ancien 
                        message1 = 'Aujourd\'hui Non EJP'
                        couleur1 = 1
                        message2 = 'Demain Non EJP'
                        couleur2 = 1
                    end
                    if date_jour < date_dj  then  -- le dernier jour de table est ancien 
                        message1 = 'Aujourd\'hui Non EJP'
                        couleur1 = 1
                    end
                    if date_jour == date_dj or date_jour == date_avdj then -- le dernier jour ou l'avant dernier est égale à aujoud'hui
                        message1 = 'Aujourd\'hui Rouge EJP'
                        if domoticz.time.matchesRule('at 07:00-22:59') then -- Rouge entre 07H00 & 23H00 (C'est le trigger timer qui ajustera l'heure de basculement
                            couleur1 = 4 -- Rouge de 07h00 à 23H00
                        else
                            couleur1 = 3 -- Orange de 23H00 à 07H00
                        end
                        -- message2 = 'Demain Non EJP'
                        -- couleur2 = 1
                    end
                    if date_demain == date_dj or date_demain == date_avdj then -- le dernier jour est égale à demain
                        message2 = 'Demain Rouge EJP'
                        couleur2 = 3
                        -- print('Message 2 :' .. message2) 
                    end
                    mail_texte = texte  .. '<br>' .. message1
                    mail_texte = mail_texte  .. '<br>' .. message2
                    texte = texte  .. '<br>' .. text_color(message1,couleur1)
                    texte = texte  .. '<br>' .. text_color(message2,couleur2)
                    if couleur1 > couleur2 then
                        couleur = couleur1
                    else
                        couleur = couleur2
                    end
					if texte ~= Etat or devEJP.color ~= couleur then
					    if alerte_ejp ~= nil then
					        devEJP.updateAlertSensor(couleur,texte) -- .updateAlertSensor(couleur,message) -- Vert=1 Jaune=2 Orange=3 Rouge=4
			            end
					   -- domoticz.email('Changement état EJP', mail_texte , 'prenom.nom@xxxmail.com')
					end
				end
			else
				domoticz.log('There was a problem handling the request', domoticz.LOG_ERROR)
				domoticz.log(item, domoticz.LOG_ERROR)
			end

		end

	end
}
EJP_rouge.png
EJP_rouge.png (11.49 Kio) Consulté 2138 fois
Cdlt YvesJosé
Hard: Synology
Soft: Domoticz (2023.2 sous docker / NAS synology )
Devices:RTL-SDR(Rtl_433), Sonoff(ESP-easy), Station La Crosse WS1650, téléinfo wifi avec Tasmota.
Travaux Perso : Décodage Pulsadis EDF (Tempo/EJP/HC)
L'Arsène
Messages : 51
Inscription : 06 févr. 2019, 18:57
Localisation : Grand EST

Re: Trame 175 HZ Pulsadis(Tempo,EJP, Heures Creuses, etc)

Message par L'Arsène »

C'est bien sage !

Cordialement.
L'Arsène.
lost
Messages : 1511
Inscription : 12 nov. 2016, 11:01

Re: Trame 175 HZ Pulsadis(Tempo,EJP, Heures Creuses, etc)

Message par lost »

Hello,

En Tempo, demain ça revient blanc (étonnant d'ailleurs de les voir fumer un rouge avec des températures pas si basses, peut-être des moyens de production pas encore remis en route) donc il n'y aura pas d'EJP.

Une question, par contre, aux fidèles de l'EJP: Quel intérêt trouvez-vous à y rester. On est certes à un tarif unique du kWh à 0.1518€ tout le temps, sans notion HP/HC, hors jours EJP ou c'est rendu à 1.4958€...

A comparer avec Tempo:
https://particulier.edf.fr/content/dam/ ... f_Bleu.pdf

=> Désormais tous les tarifs Tempo sauf, de peu, le blanc/HP sont inférieurs aux tarifs EJP! Et pour "journée-EJP" vs "rouge/HP", l'avantage Tempo c'est un peu plus que du simple au double. L'abonnement Tempo sans doute avantageux aussi, il est même passé sous celui HP/HC simple pour une puissance souscrite donnée.

Maintenant, il y a peut-être des choses auxquelles je ne pense pas niveau contractuel sur ces abonnements historiques/plus proposés qui peut rassurer pour l'avenir (fortement haussier, quoique Bruno Le Maire en entubeur en chef l'affirme en pointant le côté plafond des prix à venir en oubliant un prix plancher qui sera largement supérieur au coûts de production nucléaire)?
L'Arsène
Messages : 51
Inscription : 06 févr. 2019, 18:57
Localisation : Grand EST

Re: Trame 175 HZ Pulsadis(Tempo,EJP, Heures Creuses, etc)

Message par L'Arsène »

Bonjour Lost,

Par quel moyen pouvez vous affirmez la tarification Tempo pour demain ?

L'Arsène.
lost
Messages : 1511
Inscription : 12 nov. 2016, 11:01

Re: Trame 175 HZ Pulsadis(Tempo,EJP, Heures Creuses, etc)

Message par lost »

Bonjour,

Via l'url de base suivante, à laquelle il faut ajouter en fin la date du jour:
https://particulier.edf.fr/services/res ... eRelevant=

Par exemple, pour ce jour avec la date au format attendu:

Code : Tout sélectionner

curl --retry 1 --connect-timeout 2 -m 4 "https://particulier.edf.fr/services/rest/referentiel/searchTempoStore?dateRelevant=2023-11-29"
{"couleurJourJ":"TEMPO_ROUGE","couleurJourJ1":"TEMPO_BLANC"}
La couleur du lendemain (couleurJourJ1) passe de NON_DEFINI à TEMPO_[BLEU|BLANC|ROUGE] peu après 11h dans le JSON retourné par l'API/HTTP d'EDF.

C'est le mode opératoire utilisé par les qq scripts publiés dans les sujets Tempo. Cela permet d'anticiper qq heures plus tôt vs les 20h00 de la téléinfo.
Dernière modification par Keros le 29 nov. 2023, 18:34, modifié 1 fois.
Raison : Citation supprimée. Merci de ne pas citer le message précédent lors d'une réponse directe.
L'Arsène
Messages : 51
Inscription : 06 févr. 2019, 18:57
Localisation : Grand EST

Re: Trame 175 HZ Pulsadis(Tempo,EJP, Heures Creuses, etc)

Message par L'Arsène »

Lost,

Merci pour les infos.
Très utile du fait que l'on peut avoir l'info du J1 vers 11h00 alors par les codes Pulsadis c'est vers 20H00 comme écrit!

Cordialement.
L'Arsène.
yvesjose
Messages : 55
Inscription : 16 déc. 2019, 10:17

Re: Trame 175 HZ Pulsadis(Tempo,EJP, Heures Creuses, etc)

Message par yvesjose »

Bonjour l'Arsène

Encore un bug découvert dans le script 'Infos EJP' au passage du mois de décembre.
Je conditionne l'interrogation EJP uniquement pendant la période EJP en ligne 48 avec ce test :

Code : Tout sélectionner

if (item.isTimer) and domoticz.time.matchesRule('on  1/11-31/3') then
hélas la fonction domoticz.time.matchesRule('on 1/11-31/3') ne fonctionne pas comme je l’espérais.
il faut remplacer ce test une des 2 propositions suivante qui devrait fonctionner cette fois ci :

du 1er Novembre au 31 décembre puis du 1er Janvier au 31 mars

Code : Tout sélectionner

if (item.isTimer) and domoticz.time.matchesRule('on  1/11-31/12,1/1-31/3') then
ou
mois de Novembre, Décembre, Janvier, Février et Mars

Code : Tout sélectionner

if (item.isTimer) and domoticz.time.matchesRule('on  */11,*/12,*/1,*/2,*/3')
ou supprimer ce test :

Code : Tout sélectionner

if (item.isTimer) then
Désolé pour ce bug.
Cordialement Yves-José
Hard: Synology
Soft: Domoticz (2023.2 sous docker / NAS synology )
Devices:RTL-SDR(Rtl_433), Sonoff(ESP-easy), Station La Crosse WS1650, téléinfo wifi avec Tasmota.
Travaux Perso : Décodage Pulsadis EDF (Tempo/EJP/HC)
L'Arsène
Messages : 51
Inscription : 06 févr. 2019, 18:57
Localisation : Grand EST

Re: Trame 175 HZ Pulsadis(Tempo,EJP, Heures Creuses, etc)

Message par L'Arsène »

Bonjour Yves José,

Qu'ils se lèvent ceux qui n'ont fait de bug pour un programme ou script conséquent ?
Pour la détection de la période des journées EJP, je pense qu'il faut continuer dans ce sens et même prévoir une visualisation de l'icône ou sur une ligne " Hors saison EJP" devrait apparaitre ?
J'ai vu que tiens compte des jours de la semaine, pour l'affichage de la tarification du lendemain, le vendredi et samedi l'affichage pourrait être par défaut " Demain pas d'EJP" ?

Bonne continuation.
L'Arsène.
yvesjose
Messages : 55
Inscription : 16 déc. 2019, 10:17

Re: Trame 175 HZ Pulsadis(Tempo,EJP, Heures Creuses, etc)

Message par yvesjose »

Bonjour l'Arsène

Nouvelle correction le 'Demain pas d'info' ne fonctionnait correctement à partir de minuit

Code : Tout sélectionner

--[[
yjb
V1.0 11/2023
V2.0 02/12/2023 
Récupère les infos EJP sur le site de EDF avec ce lien

https://particulier.edf.fr/services/rest/referentiel/historicEJPStore?searchType=ejp

{"listeEjp":[{"dateApplication":1638140400000,"statut":"EJP"},{"dateApplication":1641942000000, ......
.......,{"dateApplication":1675724400000,"statut":"EJP"},{"dateApplication":1675897200000,"statut":"EJP"}],"nbEjpRestants":10,"dateFinPeriode":"2023-03-31","dateDebutPeriode":"2022-11-01"}
On reçoit une table json contenant les dates des 22 jours de la saison précédente suivie des dates de la nouvelle saison le tout en pile FIFO et la trame se termine
avec le nombre de jours restants de la saison encours et les dates de le période.
Pour déterminer les infos EJP du jour et du lendemain je récupère uniquement que les 2 dernières dates de la table et je les compare à la date actuelle.
La mise à jour de ces infos est théoriquement disponible à partir de 15H30 (mais souvent plutôt) donc je force "Demain pas d'info" avant 16H00 et "Demain non EJP" après.
sur le site EDF :
***La mise à jour des données est effectuée quotidiennement vers 15h30, cependant des contraintes d'exploitation peuvent la retarder jusqu'à 5h du matin du jour EJP.***
--]]
local Jour_semaine = { 'Dimanche' , 'Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi', 'Samedi' } 
local alerte_ejp    = 'Infos EJP'       -- renseigner le nom de l'éventuel device alerte EJP associé (dummy - alert)
return {
	on = {
		timer = { 'at 07:00', 'at 23:00', -- Pour être synchronisé avec les horaires EJP début et fin
		          'at *:05', 'at *:35' },   -- Vérification toutes les 30 minutes pour avoir l'info au plutot
		 timer = { 'every 5 minutes' }, -- Pour test
		httpResponses = {
			'Rep_ejp' -- must match with the callback passed to the openURL command
		}
	},
--	logging = {
--		level = domoticz.LOG_INFO,
--		marker = 'template',
--	},
	execute = function(domoticz, item)
	    -- local day = Jour_semaine[tonumber(os.date("%w")) + 1]
        local devEJP = domoticz.devices(alerte_ejp)
        local function getTimezone()
            local now = os.time()
            return math.floor(os.difftime(now, os.time(os.date("!*t", now))))/3600
        end
        local function text_color(text,color)
            if color == 1  then text = '<FONT COLOR=#00FF00>' .. text .. '</FONT>' end -- Vert
            if color == 2  then text = '<FONT COLOR=#FF7F00>' .. text .. '</FONT>' end -- Orange
            if color == 4 or color == 3 then text = '<FONT COLOR=#FF0000>' .. text .. '</FONT>' end -- Rouge
            return text
        end
        local Time = require('Time')
        -- TimeZone = getTimezone()
        local now = Time(domoticz.time.rawDate .. ' 00:00:00') -- .addHours(TimeZone)
        local date_jour =  domoticz.time.dateToTimestamp(domoticz.time.rawDate .. ' ' .. ' 00:00:00')
        local date_demain = date_jour + 86400 -- ajout de 86400 seconde pour ajouter 1 jour
		if (item.isTimer) and domoticz.time.matchesRule('on  1/11-31/12,1/1-31/3') then -- and domoticz.time.matchesRule('on */11,*/12,*/1,*/2,*/3') / ('on  1/11-31/3') ('on  1/11-31/12,1/1-31/3')
			domoticz.openURL({
				url = 'https://particulier.edf.fr/services/rest/referentiel/historicEJPStore?searchType=ejp',
				method = 'GET',
				headers = {["User-Agent"]= "Wget/1.20.3 (linux-gnu)",["Content-Type"]="application/json"},
				callback = 'Rep_ejp', -- see httpResponses above.
			})
		end
		if (item.isHTTPResponse) then
			if (item.ok) then
				if (item.isJSON) then
				    local Etat = devEJP.text -- 237
                    local ix = 0
					local Nbjrestant = item.json.nbEjpRestants  -- Nombre de jours restants
					for index, value in ipairs(item.json.listeEjp) do
                        ix = index -- recupère l'index de la dernire valeur de la tabel "listeEjp"
                    end  
					-- print(' Index : ' .. ix)
					local date_dj =   domoticz.utils.round(item.json.listeEjp[ix].dateApplication / 1000) -- derniere date
					local date_avdj =  domoticz.utils.round(item.json.listeEjp[ix-1].dateApplication / 1000) -- avant dernière date
					print( 'Nb Jours restants : ' .. Nbjrestant .. ' Date : Jour : ' .. date_jour .. ' Demain : ' .. date_demain .. ' / ' .. date_dj .. ' / ' .. date_avdj )
					texte = 'Nb Jours restants : ' .. Nbjrestant
                    if date_demain == date_dj or date_demain == date_avdj then -- le dernier jour est égale à demain
                        message2 = 'Demain Rouge EJP'
                        couleur2 = 3
                        -- print('Message 2 :' .. message2) 
                    else
                        message2 = 'Demain Non EJP'
                        couleur2 = 1
                    end
                    if date_jour > date_dj  then  -- le dernier jour de table est ancien 
                        message1 = 'Aujourd\'hui Non EJP'
                        couleur1 = 1
                        message2 = 'Demain Non EJP'
                        couleur2 = 1
                    end
                    if date_jour < date_dj  then  -- le dernier jour de table est ancien 
                        message1 = 'Aujourd\'hui Non EJP'
                        couleur1 = 1
                    end
                    if date_jour == date_dj or date_jour == date_avdj then -- le dernier jour ou l'avant dernier est égale à aujoud'hui
                        message1 = 'Aujourd\'hui Rouge EJP'
                        if domoticz.time.matchesRule('at 07:00-22:59') then -- Rouge entre 07H00 & 23H00 (C'est le trigger timer qui ajustera l'heure de basculement
                            couleur1 = 4 -- Rouge de 07h00 à 23H00
                        else
                            couleur1 = 3 -- Orange de 23H00 à 07H00
                        end
                        -- message2 = 'Demain Non EJP'
                        -- couleur2 = 1
                    end
                    if date_demain == date_dj or date_demain == date_avdj then -- le dernier jour est égale à demain
                        message2 = 'Demain Rouge EJP'
                        couleur2 = 3
                        -- print('Message 2 :' .. message2) 
                    end
                    if domoticz.time.matchesRule('at 00:00-15:34') and message2 == 'Demain Non EJP' then --  or Nbjrestant == 0
                        message2 = 'Demain pas d\'info'
                        couleur2 = 0
                    end
                    mail_texte = texte  .. '<br>' .. message1
                    mail_texte = mail_texte  .. '<br>' .. message2
                    texte = texte  .. '<br>' .. text_color(message1,couleur1)
                    texte = texte  .. '<br>' .. text_color(message2,couleur2)
                    if couleur1 > couleur2 then
                        couleur = couleur1
                    else
                        couleur = couleur2
                    end
					if texte ~= Etat or devEJP.color ~= couleur then
					    if alerte_ejp ~= nil then
					        devEJP.updateAlertSensor(couleur,texte) -- .updateAlertSensor(couleur,message) -- Vert=1 Jaune=2 Orange=3 Rouge=4
			            end
					   -- domoticz.email('Changement état EJP', mail_texte , 'prenom.nom@xxxmail.com')
					end
				end
			else
				domoticz.log('There was a problem handling the request', domoticz.LOG_ERROR)
				domoticz.log(item, domoticz.LOG_ERROR)
			end

		end

	end
}
Ce sera peut-être la dernière ?
Cordialement Yves-José
Hard: Synology
Soft: Domoticz (2023.2 sous docker / NAS synology )
Devices:RTL-SDR(Rtl_433), Sonoff(ESP-easy), Station La Crosse WS1650, téléinfo wifi avec Tasmota.
Travaux Perso : Décodage Pulsadis EDF (Tempo/EJP/HC)
Répondre